aboutsummaryrefslogtreecommitdiffstats
path: root/xeth
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2015-06-11 20:05:32 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2015-06-30 00:51:47 +0800
commit654564e164b3b6f7f4ba1e8bbd6fcd64776068fa (patch)
treebac9d2b3094d23001f3c1a70389ddb57de37477d /xeth
parent9d8b512b27f691fc1980b850e04eb436a3938626 (diff)
downloadgo-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.tar.gz
go-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.tar.zst
go-tangerine-654564e164b3b6f7f4ba1e8bbd6fcd64776068fa.zip
core/types: make transactions immutable
Diffstat (limited to 'xeth')
-rw-r--r--xeth/xeth.go34
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.