diff options
author | Wei-Ning Huang <w@dexon.org> | 2019-05-19 21:12:55 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@byzantine-lab.io> | 2019-09-17 16:57:29 +0800 |
commit | 5893ab04fe50d5712bba896c6f6b166b4762b4da (patch) | |
tree | 107aa9b4893536be6ea1e215e600ac55259593b0 | |
parent | 29c18926ca71d545805310748d6f9ce3576ec2b0 (diff) | |
download | go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar.gz go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar.bz2 go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar.lz go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar.xz go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.tar.zst go-tangerine-5893ab04fe50d5712bba896c6f6b166b4762b4da.zip |
core: vm: fix payFine function
-rw-r--r-- | core/vm/oracle_contracts.go | 4 | ||||
-rw-r--r-- | core/vm/oracle_contracts_test.go | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/core/vm/oracle_contracts.go b/core/vm/oracle_contracts.go index 47a680455..eebfa9a3a 100644 --- a/core/vm/oracle_contracts.go +++ b/core/vm/oracle_contracts.go @@ -1919,7 +1919,9 @@ func (g *GovernanceContract) payFine(nodeAddr common.Address) ([]byte, error) { g.state.UpdateNode(nodeOffset, node) // Pay the fine to governance owner. - g.evm.StateDB.AddBalance(g.state.Owner(), g.contract.Value()) + if !g.transfer(GovernanceContractAddress, g.state.Owner(), g.contract.Value()) { + return nil, errExecutionReverted + } g.state.emitFinePaid(nodeAddr, g.contract.Value()) diff --git a/core/vm/oracle_contracts_test.go b/core/vm/oracle_contracts_test.go index 5be893f95..cbf08c273 100644 --- a/core/vm/oracle_contracts_test.go +++ b/core/vm/oracle_contracts_test.go @@ -612,11 +612,19 @@ func (g *OracleContractsTestSuite) TestFine() { g.Require().NotNil(err) // Pay the fine. + govBalance := g.stateDB.GetBalance(GovernanceContractAddress) + ownerBalance := g.stateDB.GetBalance(g.config.Owner) + input, err = GovernanceABI.ABI.Pack("payFine", addr) g.Require().NoError(err) _, err = g.call(GovernanceContractAddress, finePayer, input, amount) g.Require().NoError(err) + g.Require().Equal(g.stateDB.GetBalance(GovernanceContractAddress).String(), + govBalance.String()) + g.Require().Equal(g.stateDB.GetBalance(g.config.Owner).String(), + new(big.Int).Add(ownerBalance, amount).String()) + // Qualified. g.Require().Equal(1, len(g.s.QualifiedNodes())) } |