From 669168d32a534c1054f9df659b3199f7b6da0d21 Mon Sep 17 00:00:00 2001 From: Determinant Date: Thu, 15 Aug 2019 14:50:39 -0400 Subject: show wallet state in the example --- examples/payments/main.go | 170 ++++++++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 72 deletions(-) (limited to 'examples/payments') diff --git a/examples/payments/main.go b/examples/payments/main.go index ffb156c..1c0a18e 100644 --- a/examples/payments/main.go +++ b/examples/payments/main.go @@ -1,89 +1,115 @@ package main import ( - "time" - "os" - "os/signal" - "syscall" - "crypto/rand" - "math/big" - //"encoding/hex" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core" - "github.com/ava-labs/coreth/eth" - "github.com/ava-labs/coreth" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/common" + "crypto/rand" + "fmt" + "math/big" + "os" + "os/signal" + "syscall" + "time" + //"encoding/hex" + "github.com/ava-labs/coreth" + "github.com/ava-labs/coreth/eth" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) func checkError(err error) { - if err != nil { panic(err) } + if err != nil { + panic(err) + } } func main() { - config := eth.DefaultConfig - chainConfig := ¶ms.ChainConfig { - ChainID: big.NewInt(1), - HomesteadBlock: big.NewInt(0), - DAOForkBlock: big.NewInt(0), - DAOForkSupport: true, - EIP150Block: big.NewInt(0), - EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - IstanbulBlock: nil, - Ethash: nil, - } + // configure the chain + config := eth.DefaultConfig + chainConfig := ¶ms.ChainConfig{ + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: big.NewInt(0), + DAOForkSupport: true, + EIP150Block: big.NewInt(0), + EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: nil, + Ethash: nil, + } - genBalance := big.NewInt(100000000000000000) - genKey, _ := coreth.NewKey(rand.Reader) + // configure the genesis block + genBalance := big.NewInt(100000000000000000) + genKey, _ := coreth.NewKey(rand.Reader) - config.Genesis = &core.Genesis{ - Config: chainConfig, - Nonce: 0, - Number: 0, - ExtraData: hexutil.MustDecode("0x00"), - GasLimit: 100000000, - Difficulty: big.NewInt(0), - Alloc: core.GenesisAlloc{ genKey.Address: { Balance: genBalance }}, - } + config.Genesis = &core.Genesis{ + Config: chainConfig, + Nonce: 0, + Number: 0, + ExtraData: hexutil.MustDecode("0x00"), + GasLimit: 100000000, + Difficulty: big.NewInt(0), + Alloc: core.GenesisAlloc{genKey.Address: {Balance: genBalance}}, + } - config.Miner.ManualMining = true - config.Miner.ManualUncle = true + // grab the control of block generation and disable auto uncle + config.Miner.ManualMining = true + config.Miner.ManualUncle = true - chainID := chainConfig.ChainID - nonce := uint64(0) - value := big.NewInt(1000000000000) - gasLimit := 21000 - gasPrice := big.NewInt(1000000000) - bob, err := coreth.NewKey(rand.Reader); checkError(err) + // info required to generate a transaction + chainID := chainConfig.ChainID + nonce := uint64(0) + value := big.NewInt(1000000000000) + gasLimit := 21000 + gasPrice := big.NewInt(1000000000) + bob, err := coreth.NewKey(rand.Reader) + checkError(err) - chain := coreth.NewETHChain(&config, nil) - chain.SetOnSeal(func(block *types.Block) { - go func() { - time.Sleep(1000 * time.Millisecond) - chain.GenBlock() - }() - }) - chain.Start() + blockCount := 0 + chain := coreth.NewETHChain(&config, nil) + showBalance := func() { + state, err := chain.CurrentState() + checkError(err) + log.Info(fmt.Sprintf("genesis balanche = %s", state.GetBalance(genKey.Address))) + log.Info(fmt.Sprintf("bob's balanche = %s", state.GetBalance(bob.Address))) + } + chain.SetOnSeal(func(block *types.Block) error { + go func() { + // the minimum time gap is 1s + time.Sleep(1000 * time.Millisecond) + // generate 15 blocks + blockCount++ + if blockCount == 15 { + showBalance() + return + } + chain.GenBlock() + }() + return nil + }) - chain.GenBlock() - for i := 0; i < 10; i++ { - tx := types.NewTransaction(nonce, bob.Address, value, uint64(gasLimit), gasPrice, nil) - signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), genKey.PrivateKey); checkError(err) - _ = signedTx - chain.AddRemoteTxs([]*types.Transaction{signedTx}) - time.Sleep(1000 * time.Millisecond) - nonce++ - } + // start the chain + chain.Start() + chain.GenBlock() + for i := 0; i < 10; i++ { + tx := types.NewTransaction(nonce, bob.Address, value, uint64(gasLimit), gasPrice, nil) + signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), genKey.PrivateKey) + checkError(err) + _ = signedTx + chain.AddRemoteTxs([]*types.Transaction{signedTx}) + time.Sleep(1000 * time.Millisecond) + nonce++ + } - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) - signal.Notify(c, os.Interrupt, syscall.SIGINT) - <-c - chain.Stop() + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt, syscall.SIGTERM) + signal.Notify(c, os.Interrupt, syscall.SIGINT) + <-c + chain.Stop() } -- cgit v1.2.3-70-g09d2