diff options
author | Wei-Ning Huang <w@dexon.org> | 2019-01-13 00:13:49 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@byzantine-lab.io> | 2019-06-12 17:27:21 +0800 |
commit | f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658 (patch) | |
tree | 72561d414bcef69d2114578fc1b1d87a428df3a8 /core/vm/governance_test.go | |
parent | 77fc30443842b1e62311c35b1bdd729fa51d005c (diff) | |
download | go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar.gz go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar.bz2 go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar.lz go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar.xz go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.tar.zst go-tangerine-f82a81c6fa36c8ee6ba6a55e0662930c8f0d2658.zip |
core: vm: add totalSupply and totalStaked in the governance contract (#144)
Add totalSupply and totalStaked in the governance contract for the
preperation of DEXON cryptoeconomics 4.0.
Also removed the unstaked variable in node info and improve tests for
delegate/undeleate.
Diffstat (limited to 'core/vm/governance_test.go')
-rw-r--r-- | core/vm/governance_test.go | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/core/vm/governance_test.go b/core/vm/governance_test.go index 4c5236565..8566d6537 100644 --- a/core/vm/governance_test.go +++ b/core/vm/governance_test.go @@ -205,6 +205,7 @@ func (g *GovernanceContractTestSuite) TestStakeUnstakeWithoutExtraDelegators() { g.Require().Equal(1, int(g.s.LenNodes().Uint64())) g.Require().Equal(1, len(g.s.QualifiedNodes())) g.Require().Equal("Test1", g.s.Node(big.NewInt(0)).Name) + g.Require().Equal(amount.String(), g.s.TotalStaked().String()) // Check balance. g.Require().Equal(new(big.Int).Sub(balanceBeforeStake, amount), g.stateDB.GetBalance(addr)) @@ -219,9 +220,14 @@ func (g *GovernanceContractTestSuite) TestStakeUnstakeWithoutExtraDelegators() { g.Require().NoError(err) _, err = g.call(addr, input, big.NewInt(0)) g.Require().NoError(err) + g.Require().Equal(0, len(g.s.QualifiedNodes())) g.Require().Equal(1, int(g.s.LenDelegators(addr).Uint64())) g.Require().Equal(1, int(g.s.LenNodes().Uint64())) + node := g.s.Node(big.NewInt(0)) + g.Require().Equal(big.NewInt(0).String(), node.Staked.String()) + g.Require().Equal(big.NewInt(0).String(), g.s.TotalStaked().String()) + // Wait for lockup time than withdraw. time.Sleep(time.Second * 2) input, err = abiObject.Pack("withdraw", addr) @@ -229,6 +235,7 @@ func (g *GovernanceContractTestSuite) TestStakeUnstakeWithoutExtraDelegators() { _, err = g.call(addr, input, big.NewInt(0)) g.Require().NoError(err) + g.Require().Equal(0, len(g.s.QualifiedNodes())) g.Require().Equal(0, int(g.s.LenDelegators(addr).Uint64())) g.Require().Equal(0, int(g.s.LenNodes().Uint64())) @@ -251,16 +258,18 @@ func (g *GovernanceContractTestSuite) TestStakeUnstakeWithoutExtraDelegators() { g.Require().NoError(err) g.Require().Equal(2, len(g.s.QualifiedNodes())) + g.Require().Equal(new(big.Int).Mul(amount, big.NewInt(2)).String(), g.s.TotalStaked().String()) // 2nd node Unstake. input, err = abiObject.Pack("unstake") g.Require().NoError(err) _, err = g.call(addr2, input, big.NewInt(0)) g.Require().NoError(err) - node := g.s.Node(big.NewInt(0)) + node = g.s.Node(big.NewInt(0)) g.Require().Equal("Test2", node.Name) - g.Require().Equal(true, node.Unstaked) + g.Require().Equal(big.NewInt(0).String(), node.Staked.String()) g.Require().Equal(1, len(g.s.QualifiedNodes())) + g.Require().Equal(amount.String(), g.s.TotalStaked().String()) time.Sleep(time.Second * 2) input, err = abiObject.Pack("withdraw", addr2) @@ -279,6 +288,8 @@ func (g *GovernanceContractTestSuite) TestStakeUnstakeWithoutExtraDelegators() { _, err = g.call(addr, input, big.NewInt(0)) g.Require().NoError(err) g.Require().Equal(0, len(g.s.QualifiedNodes())) + g.Require().Equal(big.NewInt(0).String(), g.s.TotalStaked().String()) + time.Sleep(time.Second * 2) input, err = abiObject.Pack("withdraw", addr) g.Require().NoError(err) @@ -322,6 +333,7 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { g.Require().Equal(new(big.Int).Sub(balanceBeforeDelegate, amount), g.stateDB.GetBalance(addrDelegator)) g.Require().Equal(addrDelegator, g.s.Delegator(addr, big.NewInt(1)).Owner) g.Require().Equal(new(big.Int).Add(amount, ownerStaked), g.s.Node(big.NewInt(0)).Staked) + g.Require().Equal(g.s.Node(big.NewInt(0)).Staked.String(), g.s.TotalStaked().String()) g.Require().Equal(1, int(g.s.DelegatorsOffset(addr, addrDelegator).Int64())) // Same person delegate the 2nd time should fail. @@ -339,6 +351,7 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { g.Require().Equal(addrDelegator2, g.s.Delegator(addr, big.NewInt(2)).Owner) g.Require().Equal(new(big.Int).Add(ownerStaked, new(big.Int).Mul(amount, big.NewInt(2))), g.s.Node(big.NewInt(0)).Staked) + g.Require().Equal(g.s.Node(big.NewInt(0)).Staked.String(), g.s.TotalStaked().String()) g.Require().Equal(2, int(g.s.DelegatorsOffset(addr, addrDelegator2).Int64())) // Qualified. @@ -349,8 +362,14 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { input, err = abiObject.Pack("undelegate", addr) g.Require().NoError(err) _, err = g.call(addrDelegator, input, big.NewInt(0)) + g.Require().Equal(new(big.Int).Add(amount, ownerStaked), g.s.Node(big.NewInt(0)).Staked) + g.Require().Equal(g.s.Node(big.NewInt(0)).Staked.String(), g.s.TotalStaked().String()) g.Require().NoError(err) + // Undelegate the second time should fail. + _, err = g.call(addrDelegator, input, big.NewInt(0)) + g.Require().Error(err) + // Withdraw within lockup time should fail. input, err = abiObject.Pack("withdraw", addr) g.Require().NoError(err) @@ -377,7 +396,7 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { input, err = abiObject.Pack("withdraw", addr) g.Require().NoError(err) _, err = g.call(addrDelegator, input, big.NewInt(0)) - g.Require().NotNil(err) + g.Require().Error(err) // Undelegate addrDelegator2. balanceBeforeUnDelegate = g.stateDB.GetBalance(addrDelegator2) @@ -386,6 +405,9 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { _, err = g.call(addrDelegator2, input, big.NewInt(0)) g.Require().NoError(err) + g.Require().Equal(ownerStaked, g.s.Node(big.NewInt(0)).Staked) + g.Require().Equal(g.s.Node(big.NewInt(0)).Staked.String(), g.s.TotalStaked().String()) + // Wait for lockup time than withdraw. time.Sleep(time.Second * 2) input, err = abiObject.Pack("withdraw", addr) @@ -399,6 +421,25 @@ func (g *GovernanceContractTestSuite) TestDelegateUndelegate() { // Unqualified g.Require().Equal(0, len(g.s.QualifiedNodes())) + + // Owner undelegate itself. + g.Require().Equal(1, int(g.s.LenNodes().Uint64())) + g.Require().Equal(1, int(g.s.LenDelegators(addr).Uint64())) + + input, err = abiObject.Pack("undelegate", addr) + g.Require().NoError(err) + _, err = g.call(addr, input, big.NewInt(0)) + g.Require().NoError(err) + g.Require().Equal(big.NewInt(0).String(), g.s.Node(big.NewInt(0)).Staked.String()) + g.Require().Equal(big.NewInt(0).String(), g.s.TotalStaked().String()) + + time.Sleep(time.Second * 2) + input, err = abiObject.Pack("withdraw", addr) + g.Require().NoError(err) + _, err = g.call(addr, input, big.NewInt(0)) + + g.Require().Equal(0, int(g.s.LenNodes().Uint64())) + g.Require().Equal(0, int(g.s.LenDelegators(addr).Uint64())) } func (g *GovernanceContractTestSuite) TestFine() { @@ -485,7 +526,6 @@ func (g *GovernanceContractTestSuite) TestFine() { g.Require().NoError(err) _, err = g.call(addrDelegator, input, big.NewInt(0)) g.Require().NoError(err) - } func (g *GovernanceContractTestSuite) TestUnstakeWithExtraDelegators() { @@ -893,9 +933,19 @@ func (g *GovernanceContractTestSuite) TestMiscVariableReading() { privKey, addr := g.newPrefundAccount() pk := crypto.FromECDSAPub(&privKey.PublicKey) + input, err := abiObject.Pack("totalSupply") + g.Require().NoError(err) + res, err := g.call(addr, input, big.NewInt(0)) + g.Require().NoError(err) + + input, err = abiObject.Pack("totalStaked") + g.Require().NoError(err) + res, err = g.call(addr, input, big.NewInt(0)) + g.Require().NoError(err) + // Stake. amount := new(big.Int).Mul(big.NewInt(1e18), big.NewInt(5e4)) - input, err := abiObject.Pack("stake", pk, "Test1", "test1@dexon.org", "Taipei, Taiwan", "https://dexon.org") + input, err = abiObject.Pack("stake", pk, "Test1", "test1@dexon.org", "Taipei, Taiwan", "https://dexon.org") g.Require().NoError(err) _, err = g.call(addr, input, amount) g.Require().NoError(err) @@ -917,7 +967,7 @@ func (g *GovernanceContractTestSuite) TestMiscVariableReading() { input, err = abiObject.Pack("nodes", big.NewInt(0)) g.Require().NoError(err) - res, err := g.call(addr, input, big.NewInt(0)) + res, err = g.call(addr, input, big.NewInt(0)) g.Require().NoError(err) input, err = abiObject.Pack("nodesLength") |