diff options
author | Felix Lange <fjl@twurst.com> | 2015-06-11 20:05:32 +0800 |
---|---|---|
committer | Jeffrey Wilcke <geffobscura@gmail.com> | 2015-06-30 00:51:47 +0800 |
commit | 654564e164b3b6f7f4ba1e8bbd6fcd64776068fa (patch) | |
tree | bac9d2b3094d23001f3c1a70389ddb57de37477d /xeth/xeth.go | |
parent | 9d8b512b27f691fc1980b850e04eb436a3938626 (diff) | |
download | go-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.tar.gz go-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.tar.zst go-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.zip |
core/types: make transactions immutable
Diffstat (limited to 'xeth/xeth.go')
-rw-r--r-- | xeth/xeth.go | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/xeth/xeth.go b/xeth/xeth.go index 99e17423a..11d30ebac 100644 --- a/xeth/xeth.go +++ b/xeth/xeth.go @@ -946,51 +946,45 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS // TODO: align default values to have the same type, e.g. not depend on // common.Value conversions later on - - var tx *types.Transaction - if contractCreation { - tx = types.NewContractCreationTx(value, gas, price, data) - } else { - tx = types.NewTransactionMessage(to, value, gas, price, data) - } - - state := self.backend.TxPool().State() - var nonce uint64 if len(nonceStr) != 0 { nonce = common.Big(nonceStr).Uint64() } else { + state := self.backend.TxPool().State() nonce = state.GetNonce(from) } - tx.SetNonce(nonce) + var tx *types.Transaction + if contractCreation { + tx = types.NewContractCreation(nonce, value, gas, price, data) + } else { + tx = types.NewTransaction(nonce, to, value, gas, price, data) + } - if err := self.sign(tx, from, false); err != nil { + signed, err := self.sign(tx, from, false) + if err != nil { return "", err } - if err := self.backend.TxPool().Add(tx); err != nil { + if err = self.backend.TxPool().Add(signed); err != nil { return "", err } - //state.SetNonce(from, nonce+1) if contractCreation { addr := core.AddressFromMessage(tx) glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr) - - return core.AddressFromMessage(tx).Hex(), nil + return addr.Hex(), nil } else { glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To()) } return tx.Hash().Hex(), nil } -func (self *XEth) sign(tx *types.Transaction, from common.Address, didUnlock bool) error { +func (self *XEth) sign(tx *types.Transaction, from common.Address, didUnlock bool) (*types.Transaction, error) { hash := tx.Hash() sig, err := self.doSign(from, hash, didUnlock) if err != nil { - return err + return tx, err } - tx.SetSignatureValues(sig) - return nil + return tx.WithSignature(sig) } // callmsg is the message type used for call transations. |