aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/oracle_contracts.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/vm/oracle_contracts.go')
-rw-r--r--core/vm/oracle_contracts.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go
index 62261a36b..f21700d86 100644
--- a/core/vm/oracle_contracts.go
+++ b/core/vm/oracle_contracts.go
@@ -1058,6 +1058,16 @@ func (s *GovernanceState) emitCRSProposed(round *big.Int, crs common.Hash) {
})
}
+// event NodeOwnershipTransfered(address indexed NodeAddress, address indexed NewOwnerAddress);
+func (s *GovernanceState) emitNodeOwnershipTransfered(nodeAddr, newNodeAddr common.Address) {
+ s.StateDB.AddLog(&types.Log{
+ Address: GovernanceContractAddress,
+ Topics: []common.Hash{GovernanceABI.Events["NodeOwnershipTransfered"].Id(),
+ nodeAddr.Hash(), newNodeAddr.Hash()},
+ Data: []byte{},
+ })
+}
+
// event Staked(address indexed NodeAddress, uint256 Amount);
func (s *GovernanceState) emitStaked(nodeAddr common.Address, amount *big.Int) {
s.StateDB.AddLog(&types.Log{
@@ -2373,6 +2383,11 @@ func (g *GovernanceContract) transferNodeOwnership(newOwner common.Address) ([]b
return nil, errExecutionReverted
}
+ newOffset := g.state.NodesOffsetByAddress(newOwner)
+ if newOffset.Cmp(big.NewInt(0)) >= 0 {
+ return nil, errExecutionReverted
+ }
+
node := g.state.Node(offset)
g.state.PutNodeOffsets(node, big.NewInt(0))
@@ -2380,6 +2395,8 @@ func (g *GovernanceContract) transferNodeOwnership(newOwner common.Address) ([]b
g.state.PutNodeOffsets(node, offset)
g.state.UpdateNode(offset, node)
+ g.state.emitNodeOwnershipTransfered(caller, newOwner)
+
return nil, nil
}