From 6099b8e575ac88ed85a88e245c53242805aaa05a Mon Sep 17 00:00:00 2001 From: Minh Doan Date: Thu, 14 Mar 2019 20:04:29 -0700 Subject: [PATCH] move play staking contract into a func --- test/chain/main.go | 260 +++++++++++++++++++++++---------------------- 1 file changed, 132 insertions(+), 128 deletions(-) diff --git a/test/chain/main.go b/test/chain/main.go index 0389e7837..e19dbee4e 100644 --- a/test/chain/main.go +++ b/test/chain/main.go @@ -191,6 +191,137 @@ func playFaucetContract(chain *core.BlockChain) { callFaucetContractToFundAnAddress(chain) } +func playStakingContract(chain *core.BlockChain) { + fmt.Println() + fmt.Println("--------- ************************** ---------") + fmt.Println() + fmt.Println("--------- Now Setting up Staking Contract ---------") + fmt.Println() + //worker := pkgworker.New(params.TestChainConfig, chain, consensus.NewFaker(), crypto.PubkeyToAddress(StakingPriKey.PublicKey), 0) + var stakingtxns []*types.Transaction + + state = contractworker.GetCurrentState() + fmt.Println("Before Staking Balances") + fmt.Println("user address balance") + fmt.Println(state.GetBalance(AllRandomUserAddress[0])) + fmt.Println("The balances for 2 more users:") + fmt.Println(state.GetBalance(AllRandomUserAddress[1])) + fmt.Println(state.GetBalance(AllRandomUserAddress[2])) + + nonce = contractworker.GetCurrentState().GetNonce(crypto.PubkeyToAddress(StakingPriKey.PublicKey)) + dataEnc = common.FromHex(StakingContractBinary) + stx, _ := types.SignTx(types.NewContractCreation(nonce, 0, big.NewInt(0), params.TxGasContractCreation*10, nil, dataEnc), types.HomesteadSigner{}, StakingPriKey) + stakingtxns = append(stakingtxns, stx) + + StakeContractAddress := crypto.CreateAddress(StakingAddress, nonce+uint64(0)) + + state = contractworker.GetCurrentState() + fmt.Println("stake contract balance :") + fmt.Println(state.GetBalance(StakeContractAddress)) + fmt.Println("stake address balance :") + fmt.Println(state.GetBalance(StakingAddress)) + + depositFnSignature := []byte("deposit()") + //hash = sha3.NewKeccak256() + hash := sha3.NewLegacyKeccak256() + hash.Write(depositFnSignature) + methodID := hash.Sum(nil)[:4] + + var callEncl []byte + callEncl = append(callEncl, methodID...) + stake := 100000 + fmt.Println() + fmt.Println("--------- Staking Contract added to txns ---------") + fmt.Println() + fmt.Printf("-- Now Staking with stake: %d --\n", stake) + fmt.Println() + for i := 0; i <= 2; i++ { + + //Deposit Does not take a argument, stake is transferred via amount. + tx, _ := types.SignTx(types.NewTransaction(0, StakeContractAddress, 0, big.NewInt(int64(stake)), params.TxGas*5, nil, callEncl), types.HomesteadSigner{}, AllRandomUserKey[i]) + stakingtxns = append(stakingtxns, tx) + } + err = contractworker.CommitTransactions(stakingtxns) + + if err != nil { + fmt.Println(err) + } + block, _ = contractworker.Commit() + _, err = chain.InsertChain(types.Blocks{block}) + if err != nil { + fmt.Println(err) + } + // receipts := contractworker.GetCurrentReceipts() + // fmt.Println(receipts[len(receipts)-4].ContractAddress) + state = contractworker.GetCurrentState() + + fmt.Printf("After Staking Balances (should be less by %d)\n", stake) + fmt.Println("user address balance") + fmt.Println(state.GetBalance(AllRandomUserAddress[0])) + fmt.Println("The balances for 2 more users:") + fmt.Println(state.GetBalance(AllRandomUserAddress[1])) + fmt.Println(state.GetBalance(AllRandomUserAddress[2])) + fmt.Println("faucet contract balance (unchanged):") + fmt.Println(state.GetBalance(FaucetContractAddress)) + fmt.Println("stake contract balance :") + fmt.Println(state.GetBalance(StakeContractAddress)) + fmt.Println("stake address balance :") + fmt.Println(state.GetBalance(StakingAddress)) + fmt.Println() + fmt.Println("--------- Now Setting up Withdrawing Stakes ---------") + + withdrawFnSignature := []byte("withdraw(uint256)") + //hash = sha3.NewKeccak256() + hash = sha3.NewLegacyKeccak256() + hash.Write(withdrawFnSignature) + methodID = hash.Sum(nil)[:4] + + withdraw := "5000" + withdrawstake := new(big.Int) + withdrawstake.SetString(withdraw, 10) + paddedAmount := common.LeftPadBytes(withdrawstake.Bytes(), 32) + + var dataEncl []byte + dataEncl = append(dataEncl, methodID...) + dataEncl = append(dataEncl, paddedAmount...) + + var withdrawstakingtxns []*types.Transaction + + fmt.Println() + fmt.Printf("-- Withdrawing Stake by amount: %s --\n", withdraw) + fmt.Println() + + for i := 0; i <= 2; i++ { + cnonce := contractworker.GetCurrentState().GetNonce(AllRandomUserAddress[i]) + tx, _ := types.SignTx(types.NewTransaction(cnonce, StakeContractAddress, 0, big.NewInt(0), params.TxGas*5, nil, dataEncl), types.HomesteadSigner{}, AllRandomUserKey[i]) + withdrawstakingtxns = append(withdrawstakingtxns, tx) + } + + err = contractworker.CommitTransactions(withdrawstakingtxns) + if err != nil { + fmt.Println("error:") + fmt.Println(err) + } + + block, _ = contractworker.Commit() + _, err = chain.InsertChain(types.Blocks{block}) + if err != nil { + fmt.Println(err) + } + state = contractworker.GetCurrentState() + fmt.Printf("Withdraw Staking Balances (should be up by %s)\n", withdraw) + fmt.Println(state.GetBalance(AllRandomUserAddress[0])) + fmt.Println(state.GetBalance(AllRandomUserAddress[1])) + fmt.Println(state.GetBalance(AllRandomUserAddress[2])) + fmt.Println("faucet contract balance (unchanged):") + fmt.Println(state.GetBalance(FaucetContractAddress)) + fmt.Printf("stake contract balance (should downup by %s)\n", withdraw) + fmt.Println(state.GetBalance(StakeContractAddress)) + fmt.Println("stake address balance :") + fmt.Println(state.GetBalance(StakingAddress)) + +} + func main() { genesis := gspec.MustCommit(database) chain, _ := core.NewBlockChain(database, nil, gspec.Config, consensus.NewFaker(), vm.Config{}, nil) @@ -218,132 +349,5 @@ func main() { } playFaucetContract(chain) - - // fmt.Println() - // fmt.Println("--------- ************************** ---------") - // fmt.Println() - // fmt.Println("--------- Now Setting up Staking Contract ---------") - // fmt.Println() - // //worker := pkgworker.New(params.TestChainConfig, chain, consensus.NewFaker(), crypto.PubkeyToAddress(StakingPriKey.PublicKey), 0) - // var stakingtxns []*types.Transaction - - // state = contractworker.GetCurrentState() - // fmt.Println("Before Staking Balances") - // fmt.Println("user address balance") - // fmt.Println(state.GetBalance(AllRandomUserAddress[0])) - // fmt.Println("The balances for 2 more users:") - // fmt.Println(state.GetBalance(AllRandomUserAddress[1])) - // fmt.Println(state.GetBalance(AllRandomUserAddress[2])) - - // nonce = contractworker.GetCurrentState().GetNonce(crypto.PubkeyToAddress(StakingPriKey.PublicKey)) - // dataEnc = common.FromHex(StakingContractBinary) - // stx, _ := types.SignTx(types.NewContractCreation(nonce, 0, big.NewInt(0), params.TxGasContractCreation*10, nil, dataEnc), types.HomesteadSigner{}, StakingPriKey) - // stakingtxns = append(stakingtxns, stx) - - // StakeContractAddress := crypto.CreateAddress(StakingAddress, nonce+uint64(0)) - - // state = contractworker.GetCurrentState() - // fmt.Println("stake contract balance :") - // fmt.Println(state.GetBalance(StakeContractAddress)) - // fmt.Println("stake address balance :") - // fmt.Println(state.GetBalance(StakingAddress)) - - // depositFnSignature := []byte("deposit()") - // //hash = sha3.NewKeccak256() - // hash = sha3.NewLegacyKeccak256() - // hash.Write(depositFnSignature) - // methodID := hash.Sum(nil)[:4] - - // var callEncl []byte - // callEncl = append(callEncl, methodID...) - // stake := 100000 - // fmt.Println() - // fmt.Println("--------- Staking Contract added to txns ---------") - // fmt.Println() - // fmt.Printf("-- Now Staking with stake: %d --\n", stake) - // fmt.Println() - // for i := 0; i <= 2; i++ { - - // //Deposit Does not take a argument, stake is transferred via amount. - // tx, _ := types.SignTx(types.NewTransaction(0, StakeContractAddress, 0, big.NewInt(int64(stake)), params.TxGas*5, nil, callEncl), types.HomesteadSigner{}, AllRandomUserKey[i]) - // stakingtxns = append(stakingtxns, tx) - // } - // err = contractworker.CommitTransactions(stakingtxns) - - // if err != nil { - // fmt.Println(err) - // } - // block, _ = contractworker.Commit() - // _, err = chain.InsertChain(types.Blocks{block}) - // if err != nil { - // fmt.Println(err) - // } - // // receipts := contractworker.GetCurrentReceipts() - // // fmt.Println(receipts[len(receipts)-4].ContractAddress) - // state = contractworker.GetCurrentState() - - // fmt.Printf("After Staking Balances (should be less by %d)\n", stake) - // fmt.Println("user address balance") - // fmt.Println(state.GetBalance(AllRandomUserAddress[0])) - // fmt.Println("The balances for 2 more users:") - // fmt.Println(state.GetBalance(AllRandomUserAddress[1])) - // fmt.Println(state.GetBalance(AllRandomUserAddress[2])) - // fmt.Println("faucet contract balance (unchanged):") - // fmt.Println(state.GetBalance(FaucetContractAddress)) - // fmt.Println("stake contract balance :") - // fmt.Println(state.GetBalance(StakeContractAddress)) - // fmt.Println("stake address balance :") - // fmt.Println(state.GetBalance(StakingAddress)) - // fmt.Println() - // fmt.Println("--------- Now Setting up Withdrawing Stakes ---------") - - // withdrawFnSignature := []byte("withdraw(uint256)") - // //hash = sha3.NewKeccak256() - // hash = sha3.NewLegacyKeccak256() - // hash.Write(withdrawFnSignature) - // methodID = hash.Sum(nil)[:4] - - // withdraw := "5000" - // withdrawstake := new(big.Int) - // withdrawstake.SetString(withdraw, 10) - // paddedAmount := common.LeftPadBytes(withdrawstake.Bytes(), 32) - - // var dataEncl []byte - // dataEncl = append(dataEncl, methodID...) - // dataEncl = append(dataEncl, paddedAmount...) - - // var withdrawstakingtxns []*types.Transaction - - // fmt.Println() - // fmt.Printf("-- Withdrawing Stake by amount: %s --\n", withdraw) - // fmt.Println() - - // for i := 0; i <= 2; i++ { - // cnonce := contractworker.GetCurrentState().GetNonce(AllRandomUserAddress[i]) - // tx, _ := types.SignTx(types.NewTransaction(cnonce, StakeContractAddress, 0, big.NewInt(0), params.TxGas*5, nil, dataEncl), types.HomesteadSigner{}, AllRandomUserKey[i]) - // withdrawstakingtxns = append(withdrawstakingtxns, tx) - // } - - // err = contractworker.CommitTransactions(withdrawstakingtxns) - // if err != nil { - // fmt.Println("error:") - // fmt.Println(err) - // } - - // block, _ = contractworker.Commit() - // _, err = chain.InsertChain(types.Blocks{block}) - // if err != nil { - // fmt.Println(err) - // } - // state = contractworker.GetCurrentState() - // fmt.Printf("Withdraw Staking Balances (should be up by %s)\n", withdraw) - // fmt.Println(state.GetBalance(AllRandomUserAddress[0])) - // fmt.Println(state.GetBalance(AllRandomUserAddress[1])) - // fmt.Println(state.GetBalance(AllRandomUserAddress[2])) - // fmt.Println("faucet contract balance (unchanged):") - // fmt.Println(state.GetBalance(FaucetContractAddress)) - // fmt.Printf("stake contract balance (should downup by %s)\n", withdraw) - // fmt.Println(state.GetBalance(StakeContractAddress)) - // fmt.Println("stake address balance :") - // fmt.Println(state.GetBalance(StakingAddress)) + playStakingContract(chain) }