aboutsummaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorBas van Kervel <bas@ethdev.com>2015-06-30 21:27:27 +0800
committerBas van Kervel <bas@ethdev.com>2015-06-30 21:27:27 +0800
commita5d5387dee984b0d3712379998c200d2c6fe89e5 (patch)
tree7a18d5c46c84c091f7b52d6b573912cc404928b6 /rpc
parent57dff6f1d7e8402d2849205cb44daaffcc40cc23 (diff)
downloaddexon-a5d5387dee984b0d3712379998c200d2c6fe89e5.tar.gz
dexon-a5d5387dee984b0d3712379998c200d2c6fe89e5.tar.zst
dexon-a5d5387dee984b0d3712379998c200d2c6fe89e5.zip
rebase with develop
Diffstat (limited to 'rpc')
-rw-r--r--rpc/api/eth.go9
-rw-r--r--rpc/api/eth_args.go39
2 files changed, 33 insertions, 15 deletions
diff --git a/rpc/api/eth.go b/rpc/api/eth.go
index db0b4b024..784cd0f48 100644
--- a/rpc/api/eth.go
+++ b/rpc/api/eth.go
@@ -7,7 +7,9 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto/sha3"
"github.com/ethereum/go-ethereum/eth"
+ "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared"
"github.com/ethereum/go-ethereum/xeth"
@@ -555,6 +557,13 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) {
return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil
}
+func rlpHash(x interface{}) (h common.Hash) {
+ hw := sha3.NewKeccak256()
+ rlp.Encode(hw, x)
+ hw.Sum(h[:0])
+ return h
+}
+
func (self *ethApi) Resend(req *shared.Request) (interface{}, error) {
args := new(ResendArgs)
if err := self.codec.Decode(req.Params, &args); err != nil {
diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go
index b5507832d..8f64280d3 100644
--- a/rpc/api/eth_args.go
+++ b/rpc/api/eth_args.go
@@ -885,10 +885,10 @@ func newTx(t *types.Transaction) *tx {
tx: t,
To: to,
From: from.Hex(),
- Value: t.Amount.String(),
+ Value: t.Value().String(),
Nonce: strconv.Itoa(int(t.Nonce())),
Data: "0x" + common.Bytes2Hex(t.Data()),
- GasLimit: t.GasLimit.String(),
+ GasLimit: t.Gas().String(),
GasPrice: t.GasPrice().String(),
}
}
@@ -905,16 +905,21 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
return shared.NewDecodeParamError(err.Error())
}
- trans := new(types.Transaction)
- trans.Amount = new(big.Int)
- trans.GasLimit = new(big.Int)
- trans.Price = new(big.Int)
+ var (
+ nonce uint64
+ to common.Address
+ amount = new(big.Int).Set(common.Big0)
+ gasLimit = new(big.Int).Set(common.Big0)
+ gasPrice = new(big.Int).Set(common.Big0)
+ data []byte
+ contractCreation = true
+ )
if val, found := fields["To"]; found {
if strVal, ok := val.(string); ok && len(strVal) > 0 {
tx.To = strVal
- to := common.StringToAddress(strVal)
- trans.Recipient = &to
+ to = common.HexToAddress(strVal)
+ contractCreation = false
}
}
@@ -927,7 +932,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
if val, found := fields["Nonce"]; found {
if strVal, ok := val.(string); ok {
tx.Nonce = strVal
- if trans.AccountNonce, err = strconv.ParseUint(strVal, 10, 64); err != nil {
+ if nonce, err = strconv.ParseUint(strVal, 10, 64); err != nil {
return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Nonce - %v", err))
}
}
@@ -939,7 +944,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
if val, found := fields["Value"]; found {
if strVal, ok := val.(string); ok {
tx.Value = strVal
- if _, parseOk = trans.Amount.SetString(strVal, 0); !parseOk {
+ if _, parseOk = amount.SetString(strVal, 0); !parseOk {
return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.Amount - %v", err))
}
}
@@ -949,9 +954,9 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
if strVal, ok := val.(string); ok {
tx.Data = strVal
if strings.HasPrefix(strVal, "0x") {
- trans.Payload = common.Hex2Bytes(strVal[2:])
+ data = common.Hex2Bytes(strVal[2:])
} else {
- trans.Payload = common.Hex2Bytes(strVal)
+ data = common.Hex2Bytes(strVal)
}
}
}
@@ -959,7 +964,7 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
if val, found := fields["GasLimit"]; found {
if strVal, ok := val.(string); ok {
tx.GasLimit = strVal
- if _, parseOk = trans.GasLimit.SetString(strVal, 0); !parseOk {
+ if _, parseOk = gasLimit.SetString(strVal, 0); !parseOk {
return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasLimit - %v", err))
}
}
@@ -968,13 +973,17 @@ func (tx *tx) UnmarshalJSON(b []byte) (err error) {
if val, found := fields["GasPrice"]; found {
if strVal, ok := val.(string); ok {
tx.GasPrice = strVal
- if _, parseOk = trans.Price.SetString(strVal, 0); !parseOk {
+ if _, parseOk = gasPrice.SetString(strVal, 0); !parseOk {
return shared.NewDecodeParamError(fmt.Sprintf("Unable to decode tx.GasPrice - %v", err))
}
}
}
- tx.tx = trans
+ if contractCreation {
+ tx.tx = types.NewContractCreation(nonce, amount, gasLimit, gasPrice, data)
+ } else {
+ tx.tx = types.NewTransaction(nonce, to, amount, gasLimit, gasPrice, data)
+ }
return nil
}