@ -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 ) SendRaw Transaction ( req * shared . Request ) ( interface { } , error ) {
func ( self * ethApi ) Submit Transaction ( 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 {