diff options
author | Wei-Ning Huang <w@byzantine-lab.io> | 2019-08-26 11:47:24 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@byzantine-lab.io> | 2019-09-17 16:57:31 +0800 |
commit | b91351e4b03de9aed53d7b323a873926afe2491f (patch) | |
tree | 202c11c43af4fec07ae20c2fb8fea2da96228630 | |
parent | d3700a69273f421228f01d5500e9a4a9b06a9e45 (diff) | |
download | go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar.gz go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar.bz2 go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar.lz go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar.xz go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.tar.zst go-tangerine-b91351e4b03de9aed53d7b323a873926afe2491f.zip |
core: vm: reject transaction for some gov methods if value > 0
-rw-r--r-- | core/vm/oracle_contracts.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go index 130d5bf24..296d6fd4f 100644 --- a/core/vm/oracle_contracts.go +++ b/core/vm/oracle_contracts.go @@ -1915,6 +1915,10 @@ func (g *GovernanceContract) stake() ([]byte, error) { } func (g *GovernanceContract) unstake(amount *big.Int) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + caller := g.contract.Caller() offset := g.state.NodesOffsetByAddress(caller) @@ -1951,6 +1955,10 @@ func (g *GovernanceContract) unstake(amount *big.Int) ([]byte, error) { func (g *GovernanceContract) updateNodeInfo( name, email, location, url string) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + caller := g.contract.Caller() offset := g.state.NodesOffsetByAddress(caller) @@ -1974,6 +1982,10 @@ func (g *GovernanceContract) updateNodeInfo( } func (g *GovernanceContract) withdraw() ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + if !g.withdrawable() { return nil, errExecutionReverted } @@ -2064,6 +2076,10 @@ func (g *GovernanceContract) payFine(nodeAddr common.Address) ([]byte, error) { } func (g *GovernanceContract) proposeCRS(nextRound *big.Int, signedCRS []byte) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + if nextRound.Uint64() != g.evm.Round.Uint64()+1 || g.state.CRSRound().Uint64() == nextRound.Uint64() { return nil, errExecutionReverted @@ -2141,6 +2157,10 @@ func (g *GovernanceContract) fine(nodeAddr common.Address, amount *big.Int, payl } func (g *GovernanceContract) report(reportType *big.Int, arg1, arg2 []byte) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + typeEnum := FineType(reportType.Uint64()) var reportedNodeID coreTypes.NodeID @@ -2192,6 +2212,10 @@ func (g *GovernanceContract) report(reportType *big.Int, arg1, arg2 []byte) ([]b } func (g *GovernanceContract) resetDKG(newSignedCRS []byte) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + round := g.evm.Round nextRound := new(big.Int).Add(round, big.NewInt(1)) @@ -2859,6 +2883,10 @@ func (g *GovernanceContract) Run(evm *EVM, input []byte, contract *Contract) (re } func (g *GovernanceContract) transferOwnership(newOwner common.Address) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + // Only owner can update configuration. if g.contract.Caller() != g.state.Owner() { return nil, errExecutionReverted @@ -2871,6 +2899,10 @@ func (g *GovernanceContract) transferOwnership(newOwner common.Address) ([]byte, } func (g *GovernanceContract) transferNodeOwnership(newOwner common.Address) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + if newOwner == (common.Address{}) { return nil, errExecutionReverted } @@ -2899,6 +2931,10 @@ func (g *GovernanceContract) transferNodeOwnership(newOwner common.Address) ([]b } func (g *GovernanceContract) transferNodeOwnershipByFoundation(oldOwner, newOwner common.Address) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + // Only owner can update configuration. if g.contract.Caller() != g.state.Owner() { return nil, errExecutionReverted @@ -2931,6 +2967,10 @@ func (g *GovernanceContract) transferNodeOwnershipByFoundation(oldOwner, newOwne } func (g *GovernanceContract) replaceNodePublicKey(newPublicKey []byte) ([]byte, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + caller := g.contract.Caller() offset := g.state.NodesOffsetByAddress(caller) @@ -2962,6 +3002,10 @@ func (g *GovernanceContract) replaceNodePublicKey(newPublicKey []byte) ([]byte, } func (g *GovernanceContract) addToWhitelist(addr common.Address) (*big.Int, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + // Only owner can update whitelist. if g.contract.Caller() != g.state.Owner() { return nil, errExecutionReverted @@ -2970,6 +3014,10 @@ func (g *GovernanceContract) addToWhitelist(addr common.Address) (*big.Int, erro } func (g *GovernanceContract) removeFromWhitelist(addr common.Address) (*big.Int, error) { + if g.contract.Value().Cmp(big.NewInt(0)) > 0 { + return nil, errExecutionReverted + } + // Only owner can update whitelist. if g.contract.Caller() != g.state.Owner() { return nil, errExecutionReverted |