|
|
|
@ -26,6 +26,7 @@ import ( |
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/natspec" |
|
|
|
|
"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" |
|
|
|
@ -70,8 +71,10 @@ var ( |
|
|
|
|
"eth_getCode": (*ethApi).GetData, |
|
|
|
|
"eth_getNatSpec": (*ethApi).GetNatSpec, |
|
|
|
|
"eth_sign": (*ethApi).Sign, |
|
|
|
|
"eth_sendRawTransaction": (*ethApi).SendRawTransaction, |
|
|
|
|
"eth_sendRawTransaction": (*ethApi).SubmitTransaction, |
|
|
|
|
"eth_submitTransaction": (*ethApi).SubmitTransaction, |
|
|
|
|
"eth_sendTransaction": (*ethApi).SendTransaction, |
|
|
|
|
"eth_signTransaction": (*ethApi).SignTransaction, |
|
|
|
|
"eth_transact": (*ethApi).SendTransaction, |
|
|
|
|
"eth_estimateGas": (*ethApi).EstimateGas, |
|
|
|
|
"eth_call": (*ethApi).Call, |
|
|
|
@ -285,7 +288,7 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) { |
|
|
|
|
return v, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (self *ethApi) SendRawTransaction(req *shared.Request) (interface{}, error) { |
|
|
|
|
func (self *ethApi) SubmitTransaction(req *shared.Request) (interface{}, error) { |
|
|
|
|
args := new(NewDataArgs) |
|
|
|
|
if err := self.codec.Decode(req.Params, &args); err != nil { |
|
|
|
|
return nil, shared.NewDecodeParamError(err.Error()) |
|
|
|
@ -298,6 +301,45 @@ func (self *ethApi) SendRawTransaction(req *shared.Request) (interface{}, error) |
|
|
|
|
return v, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// JsonTransaction is returned as response by the JSON RPC. It contains the
|
|
|
|
|
// signed RLP encoded transaction as Raw and the signed transaction object as Tx.
|
|
|
|
|
type JsonTransaction struct { |
|
|
|
|
Raw string `json:"raw"` |
|
|
|
|
Tx *tx `json:"tx"` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (self *ethApi) SignTransaction(req *shared.Request) (interface{}, error) { |
|
|
|
|
args := new(NewTxArgs) |
|
|
|
|
if err := self.codec.Decode(req.Params, &args); err != nil { |
|
|
|
|
return nil, shared.NewDecodeParamError(err.Error()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// nonce may be nil ("guess" mode)
|
|
|
|
|
var nonce string |
|
|
|
|
if args.Nonce != nil { |
|
|
|
|
nonce = args.Nonce.String() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var gas, price string |
|
|
|
|
if args.Gas != nil { |
|
|
|
|
gas = args.Gas.String() |
|
|
|
|
} |
|
|
|
|
if args.GasPrice != nil { |
|
|
|
|
price = args.GasPrice.String() |
|
|
|
|
} |
|
|
|
|
tx, err := self.xeth.SignTransaction(args.From, args.To, nonce, args.Value.String(), gas, price, args.Data) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
data, err := rlp.EncodeToBytes(tx) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return JsonTransaction{"0x" + common.Bytes2Hex(data), newTx(tx)}, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (self *ethApi) SendTransaction(req *shared.Request) (interface{}, error) { |
|
|
|
|
args := new(NewTxArgs) |
|
|
|
|
if err := self.codec.Decode(req.Params, &args); err != nil { |
|
|
|
|