core/types: make transactions immutable
This commit is contained in:
committed by
Jeffrey Wilcke
parent
9d8b512b27
commit
654564e164
34
xeth/xeth.go
34
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.
|
||||
|
Reference in New Issue
Block a user