aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWei-Ning Huang <w@byzantine-lab.io>2019-08-26 11:47:24 +0800
committerWei-Ning Huang <w@byzantine-lab.io>2019-09-17 16:57:31 +0800
commitb91351e4b03de9aed53d7b323a873926afe2491f (patch)
tree202c11c43af4fec07ae20c2fb8fea2da96228630
parentd3700a69273f421228f01d5500e9a4a9b06a9e45 (diff)
downloadgo-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.go48
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