aboutsummaryrefslogtreecommitdiffstats
path: root/eth/api.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-03-01 16:59:12 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-03-01 16:59:12 +0800
commitf30b809f00cfe98190c682407943583f235f39d0 (patch)
treecd908d75bb01a821bd6ea72224d0154a9e8a16a6 /eth/api.go
parent7d598af49324176cd60b6ce89bc8a72080098675 (diff)
parent0ff2adb21b4d9a4699f50b1d1a65873fac39d258 (diff)
downloaddexon-f30b809f00cfe98190c682407943583f235f39d0.tar
dexon-f30b809f00cfe98190c682407943583f235f39d0.tar.gz
dexon-f30b809f00cfe98190c682407943583f235f39d0.tar.bz2
dexon-f30b809f00cfe98190c682407943583f235f39d0.tar.lz
dexon-f30b809f00cfe98190c682407943583f235f39d0.tar.xz
dexon-f30b809f00cfe98190c682407943583f235f39d0.tar.zst
dexon-f30b809f00cfe98190c682407943583f235f39d0.zip
Merge pull request #2215 from bas-vk/estimategas
core: improved check for contract creation
Diffstat (limited to 'eth/api.go')
-rw-r--r--eth/api.go65
1 files changed, 31 insertions, 34 deletions
diff --git a/eth/api.go b/eth/api.go
index cfbafd79f..38b67a07a 100644
--- a/eth/api.go
+++ b/eth/api.go
@@ -620,12 +620,12 @@ func (m callmsg) Value() *big.Int { return m.value }
func (m callmsg) Data() []byte { return m.data }
type CallArgs struct {
- From common.Address `json:"from"`
- To common.Address `json:"to"`
- Gas rpc.HexNumber `json:"gas"`
- GasPrice rpc.HexNumber `json:"gasPrice"`
- Value rpc.HexNumber `json:"value"`
- Data string `json:"data"`
+ From common.Address `json:"from"`
+ To *common.Address `json:"to"`
+ Gas rpc.HexNumber `json:"gas"`
+ GasPrice rpc.HexNumber `json:"gasPrice"`
+ Value rpc.HexNumber `json:"value"`
+ Data string `json:"data"`
}
func (s *PublicBlockChainAPI) doCall(args CallArgs, blockNr rpc.BlockNumber) (string, *big.Int, error) {
@@ -653,7 +653,7 @@ func (s *PublicBlockChainAPI) doCall(args CallArgs, blockNr rpc.BlockNumber) (st
// Assemble the CALL invocation
msg := callmsg{
from: from,
- to: &args.To,
+ to: args.To,
gas: args.Gas.BigInt(),
gasPrice: args.GasPrice.BigInt(),
value: args.Value.BigInt(),
@@ -665,6 +665,7 @@ func (s *PublicBlockChainAPI) doCall(args CallArgs, blockNr rpc.BlockNumber) (st
if msg.gasPrice.Cmp(common.Big0) == 0 {
msg.gasPrice = new(big.Int).Mul(big.NewInt(50), common.Shannon)
}
+
// Execute the call and return
vmenv := core.NewEnv(stateDb, s.bc, msg, block.Header())
gp := new(core.GasPool).AddGas(common.MaxBig)
@@ -1012,13 +1013,13 @@ func (s *PublicTransactionPoolAPI) sign(address common.Address, tx *types.Transa
}
type SendTxArgs struct {
- From common.Address `json:"from"`
- To common.Address `json:"to"`
- Gas *rpc.HexNumber `json:"gas"`
- GasPrice *rpc.HexNumber `json:"gasPrice"`
- Value *rpc.HexNumber `json:"value"`
- Data string `json:"data"`
- Nonce *rpc.HexNumber `json:"nonce"`
+ From common.Address `json:"from"`
+ To *common.Address `json:"to"`
+ Gas *rpc.HexNumber `json:"gas"`
+ GasPrice *rpc.HexNumber `json:"gasPrice"`
+ Value *rpc.HexNumber `json:"value"`
+ Data string `json:"data"`
+ Nonce *rpc.HexNumber `json:"nonce"`
}
// SendTransaction will create a transaction for the given transaction argument, sign it and submit it to the
@@ -1042,12 +1043,12 @@ func (s *PublicTransactionPoolAPI) SendTransaction(args SendTxArgs) (common.Hash
}
var tx *types.Transaction
- contractCreation := (args.To == common.Address{})
+ contractCreation := (args.To == nil)
if contractCreation {
tx = types.NewContractCreation(args.Nonce.Uint64(), args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
} else {
- tx = types.NewTransaction(args.Nonce.Uint64(), args.To, args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
+ tx = types.NewTransaction(args.Nonce.Uint64(), *args.To, args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
}
signedTx, err := s.sign(args.From, tx)
@@ -1106,7 +1107,7 @@ func (s *PublicTransactionPoolAPI) Sign(address common.Address, data string) (st
type SignTransactionArgs struct {
From common.Address
- To common.Address
+ To *common.Address
Nonce *rpc.HexNumber
Value *rpc.HexNumber
Gas *rpc.HexNumber
@@ -1132,23 +1133,21 @@ type Tx struct {
func (tx *Tx) UnmarshalJSON(b []byte) (err error) {
req := struct {
- To common.Address `json:"to"`
- From common.Address `json:"from"`
- Nonce *rpc.HexNumber `json:"nonce"`
- Value *rpc.HexNumber `json:"value"`
- Data string `json:"data"`
- GasLimit *rpc.HexNumber `json:"gas"`
- GasPrice *rpc.HexNumber `json:"gasPrice"`
- Hash common.Hash `json:"hash"`
+ To *common.Address `json:"to"`
+ From common.Address `json:"from"`
+ Nonce *rpc.HexNumber `json:"nonce"`
+ Value *rpc.HexNumber `json:"value"`
+ Data string `json:"data"`
+ GasLimit *rpc.HexNumber `json:"gas"`
+ GasPrice *rpc.HexNumber `json:"gasPrice"`
+ Hash common.Hash `json:"hash"`
}{}
if err := json.Unmarshal(b, &req); err != nil {
return err
}
- contractCreation := (req.To == (common.Address{}))
-
- tx.To = &req.To
+ tx.To = req.To
tx.From = req.From
tx.Nonce = req.Nonce
tx.Value = req.Value
@@ -1172,12 +1171,10 @@ func (tx *Tx) UnmarshalJSON(b []byte) (err error) {
tx.GasPrice = rpc.NewHexNumber(int64(50000000000))
}
+ contractCreation := (req.To == nil)
if contractCreation {
tx.tx = types.NewContractCreation(tx.Nonce.Uint64(), tx.Value.BigInt(), tx.GasLimit.BigInt(), tx.GasPrice.BigInt(), data)
} else {
- if tx.To == nil {
- return fmt.Errorf("need to address")
- }
tx.tx = types.NewTransaction(tx.Nonce.Uint64(), *tx.To, tx.Value.BigInt(), tx.GasLimit.BigInt(), tx.GasPrice.BigInt(), data)
}
@@ -1226,12 +1223,12 @@ func (s *PublicTransactionPoolAPI) SignTransaction(args *SignTransactionArgs) (*
}
var tx *types.Transaction
- contractCreation := (args.To == common.Address{})
+ contractCreation := (args.To == nil)
if contractCreation {
tx = types.NewContractCreation(args.Nonce.Uint64(), args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
} else {
- tx = types.NewTransaction(args.Nonce.Uint64(), args.To, args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
+ tx = types.NewTransaction(args.Nonce.Uint64(), *args.To, args.Value.BigInt(), args.Gas.BigInt(), args.GasPrice.BigInt(), common.FromHex(args.Data))
}
signedTx, err := s.sign(args.From, tx)
@@ -1324,7 +1321,7 @@ func (s *PublicTransactionPoolAPI) Resend(tx *Tx, gasPrice, gasLimit *rpc.HexNum
}
var newTx *types.Transaction
- contractCreation := (*tx.tx.To() == common.Address{})
+ contractCreation := (tx.tx.To() == nil)
if contractCreation {
newTx = types.NewContractCreation(tx.tx.Nonce(), tx.tx.Value(), gasPrice.BigInt(), gasLimit.BigInt(), tx.tx.Data())
} else {