diff options
-rw-r--r-- | core/vm/oracle_contract_abi.go | 17 | ||||
-rw-r--r-- | core/vm/oracle_contracts.go | 18 |
2 files changed, 31 insertions, 4 deletions
diff --git a/core/vm/oracle_contract_abi.go b/core/vm/oracle_contract_abi.go index 7722ecbce..f3e5aef06 100644 --- a/core/vm/oracle_contract_abi.go +++ b/core/vm/oracle_contract_abi.go @@ -673,6 +673,18 @@ const GovernanceABIJSON = ` "indexed": true, "name": "NodeAddress", "type": "address" + } + ], + "name": "NodeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "NodeAddress", + "type": "address" }, { "indexed": true, @@ -719,6 +731,11 @@ const GovernanceABIJSON = ` "type": "address" }, { + "indexed": true, + "name": "DelegatorAddress", + "type": "address" + }, + { "indexed": false, "name": "Amount", "type": "uint256" diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go index 86dbb1db4..342f5f4b9 100644 --- a/core/vm/oracle_contracts.go +++ b/core/vm/oracle_contracts.go @@ -969,6 +969,15 @@ func (s *GovernanceStateHelper) emitUnstaked(nodeAddr common.Address) { }) } +// event NodeRemoved(address indexed NodeAddress); +func (s *GovernanceStateHelper) emitNodeRemoved(nodeAddr common.Address) { + s.StateDB.AddLog(&types.Log{ + Address: GovernanceContractAddress, + Topics: []common.Hash{GovernanceABI.Events["NodeRemoved"].Id(), nodeAddr.Hash()}, + Data: []byte{}, + }) +} + // event Delegated(address indexed NodeAddress, address indexed DelegatorAddress, uint256 Amount); func (s *GovernanceStateHelper) emitDelegated(nodeAddr, delegatorAddr common.Address, amount *big.Int) { s.StateDB.AddLog(&types.Log{ @@ -987,11 +996,11 @@ func (s *GovernanceStateHelper) emitUndelegated(nodeAddr, delegatorAddr common.A }) } -// event Withdrawn(address indexed NodeAddress, uint256 Amount); -func (s *GovernanceStateHelper) emitWithdrawn(nodeAddr common.Address, amount *big.Int) { +// event Withdrawn(address indexed NodeAddress, address indexed DelegatorAddress, uint256 Amount); +func (s *GovernanceStateHelper) emitWithdrawn(nodeAddr common.Address, delegatorAddr common.Address, amount *big.Int) { s.StateDB.AddLog(&types.Log{ Address: GovernanceContractAddress, - Topics: []common.Hash{GovernanceABI.Events["Withdrawn"].Id(), nodeAddr.Hash()}, + Topics: []common.Hash{GovernanceABI.Events["Withdrawn"].Id(), nodeAddr.Hash(), delegatorAddr.Hash()}, Data: common.BigToHash(amount).Bytes(), }) } @@ -1462,7 +1471,7 @@ func (g *GovernanceContract) withdraw(nodeAddr common.Address) ([]byte, error) { return nil, errExecutionReverted } - g.state.emitWithdrawn(nodeAddr, delegator.Value) + g.state.emitWithdrawn(nodeAddr, delegator.Owner, delegator.Value) // We are the last delegator to withdraw the fund, remove the node info. if g.state.LenDelegators(nodeAddr).Cmp(big.NewInt(0)) == 0 { @@ -1479,6 +1488,7 @@ func (g *GovernanceContract) withdraw(nodeAddr common.Address) ([]byte, error) { } g.state.DeleteNodesOffsetByAddress(nodeAddr) g.state.PopLastNode() + g.state.emitNodeRemoved(nodeAddr) } return g.useGas(100000) |