Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions rpc/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,17 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
}
*reply = v

case "eth_sendRawTransaction":
args := new(NewDataArgs)
if err := json.Unmarshal(req.Params, &args); err != nil {
return err
}
v, err := api.xeth().PushTx(args.Data)
if err != nil {
return err
}
*reply = v

case "eth_sendTransaction", "eth_transact":
args := new(NewTxArgs)
if err := json.Unmarshal(req.Params, &args); err != nil {
Expand Down
15 changes: 15 additions & 0 deletions rpc/api/eth.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ var (
"eth_getData": (*ethApi).GetData,
"eth_getCode": (*ethApi).GetData,
"eth_sign": (*ethApi).Sign,
"eth_sendRawTransaction": (*ethApi).PushTx,
"eth_sendTransaction": (*ethApi).SendTransaction,
"eth_transact": (*ethApi).SendTransaction,
"eth_estimateGas": (*ethApi).EstimateGas,
Expand Down Expand Up @@ -247,6 +248,20 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) {
return v, nil
}


func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) {
args := new(NewDataArgs)
if err := self.codec.Decode(req.Params, &args); err != nil {
return nil, shared.NewDecodeParamError(err.Error())
}

v, err := self.xeth.PushTx(args.Data)
if err != nil {
return nil, err
}
return v, nil
}

func (self *ethApi) SendTransaction(req *shared.Request) (interface{}, error) {
args := new(NewTxArgs)
if err := self.codec.Decode(req.Params, &args); err != nil {
Expand Down
29 changes: 29 additions & 0 deletions rpc/api/eth_args.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,35 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
return nil
}

type NewDataArgs struct {
Data string
}

func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}

if err := json.Unmarshal(b, &obj); err != nil {
return shared.NewDecodeParamError(err.Error())
}

// Check for sufficient params
if len(obj) < 1 {
return shared.NewInsufficientParamsError(len(obj), 1)
}

data, ok := obj[0].(string)
if !ok {
return shared.NewInvalidTypeError("data", "not a string")
}
args.Data = data

if len(args.Data) == 0 {
return shared.NewValidationError("data", "is required")
}

return nil
}

type NewSigArgs struct {
From string
Data string
Expand Down
1 change: 1 addition & 0 deletions rpc/api/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ var (
"getData",
"getCode",
"sign",
"sendRawTransaction",
"sendTransaction",
"transact",
"estimateGas",
Expand Down
29 changes: 29 additions & 0 deletions rpc/args.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,35 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
return nil
}

type NewDataArgs struct {
Data string
}

func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}

if err := json.Unmarshal(b, &obj); err != nil {
return NewDecodeParamError(err.Error())
}

// Check for sufficient params
if len(obj) < 1 {
return NewInsufficientParamsError(len(obj), 1)
}

data, ok := obj[0].(string)
if !ok {
return NewInvalidTypeError("data", "not a string")
}
args.Data = data

if len(args.Data) == 0 {
return NewValidationError("data", "is required")
}

return nil
}

type NewTxArgs struct {
From string
To string
Expand Down
4 changes: 4 additions & 0 deletions xeth/xeth.go
Original file line number Diff line number Diff line change
Expand Up @@ -794,8 +794,12 @@ func (self *XEth) PushTx(encodedTx string) (string, error) {

if tx.To() == nil {
addr := core.AddressFromMessage(tx)
glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr)
return addr.Hex(), nil
} else {
glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To())
}

return tx.Hash().Hex(), nil
}

Expand Down