|
|
@ -82,11 +82,23 @@ func (b *BlockGen) SetExtra(data []byte) { |
|
|
|
// added. Notably, contract code relying on the BLOCKHASH instruction
|
|
|
|
// added. Notably, contract code relying on the BLOCKHASH instruction
|
|
|
|
// will panic during execution.
|
|
|
|
// will panic during execution.
|
|
|
|
func (b *BlockGen) AddTx(tx *types.Transaction) { |
|
|
|
func (b *BlockGen) AddTx(tx *types.Transaction) { |
|
|
|
|
|
|
|
b.AddTxWithChain(nil, tx) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// AddTxWithChain adds a transaction to the generated block. If no coinbase has
|
|
|
|
|
|
|
|
// been set, the block's coinbase is set to the zero address.
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// AddTxWithChain panics if the transaction cannot be executed. In addition to
|
|
|
|
|
|
|
|
// the protocol-imposed limitations (gas limit, etc.), there are some
|
|
|
|
|
|
|
|
// further limitations on the content of transactions that can be
|
|
|
|
|
|
|
|
// added. If contract code relies on the BLOCKHASH instruction,
|
|
|
|
|
|
|
|
// the block in chain will be returned.
|
|
|
|
|
|
|
|
func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { |
|
|
|
if b.gasPool == nil { |
|
|
|
if b.gasPool == nil { |
|
|
|
b.SetCoinbase(common.Address{}) |
|
|
|
b.SetCoinbase(common.Address{}) |
|
|
|
} |
|
|
|
} |
|
|
|
b.statedb.Prepare(tx.Hash(), common.Hash{}, len(b.txs)) |
|
|
|
b.statedb.Prepare(tx.Hash(), common.Hash{}, len(b.txs)) |
|
|
|
receipt, _, err := ApplyTransaction(b.config, nil, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}) |
|
|
|
receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
panic(err) |
|
|
|
panic(err) |
|
|
|
} |
|
|
|
} |
|
|
|