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/Determinant/coreth/eth"
"github.com/Determinant/coreth"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/common"
)
func checkError(err error) {
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,
}
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.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)
chain := coreth.NewETHChain(&config, nil)
chain.SetOnSeal(func(block *types.Block) {
go func() {
time.Sleep(1000 * time.Millisecond)
chain.GenBlock()
}()
})
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()
}