Skip to content

Commit e4f9ec8

Browse files
committed
Merge pull request #1267 from SilentCicero/develop
eth_sendRawTransaction JSON RPC
2 parents 8eaaf24 + 1f34dac commit e4f9ec8

File tree

6 files changed

+89
-0
lines changed

6 files changed

+89
-0
lines changed

rpc/api.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,17 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
170170
}
171171
*reply = v
172172

173+
case "eth_sendRawTransaction":
174+
args := new(NewDataArgs)
175+
if err := json.Unmarshal(req.Params, &args); err != nil {
176+
return err
177+
}
178+
v, err := api.xeth().PushTx(args.Data)
179+
if err != nil {
180+
return err
181+
}
182+
*reply = v
183+
173184
case "eth_sendTransaction", "eth_transact":
174185
args := new(NewTxArgs)
175186
if err := json.Unmarshal(req.Params, &args); err != nil {

rpc/api/eth.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ var (
4646
"eth_getData": (*ethApi).GetData,
4747
"eth_getCode": (*ethApi).GetData,
4848
"eth_sign": (*ethApi).Sign,
49+
"eth_sendRawTransaction": (*ethApi).PushTx,
4950
"eth_sendTransaction": (*ethApi).SendTransaction,
5051
"eth_transact": (*ethApi).SendTransaction,
5152
"eth_estimateGas": (*ethApi).EstimateGas,
@@ -247,6 +248,20 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) {
247248
return v, nil
248249
}
249250

251+
252+
func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) {
253+
args := new(NewDataArgs)
254+
if err := self.codec.Decode(req.Params, &args); err != nil {
255+
return nil, shared.NewDecodeParamError(err.Error())
256+
}
257+
258+
v, err := self.xeth.PushTx(args.Data)
259+
if err != nil {
260+
return nil, err
261+
}
262+
return v, nil
263+
}
264+
250265
func (self *ethApi) SendTransaction(req *shared.Request) (interface{}, error) {
251266
args := new(NewTxArgs)
252267
if err := self.codec.Decode(req.Params, &args); err != nil {

rpc/api/eth_args.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,35 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
226226
return nil
227227
}
228228

229+
type NewDataArgs struct {
230+
Data string
231+
}
232+
233+
func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
234+
var obj []interface{}
235+
236+
if err := json.Unmarshal(b, &obj); err != nil {
237+
return shared.NewDecodeParamError(err.Error())
238+
}
239+
240+
// Check for sufficient params
241+
if len(obj) < 1 {
242+
return shared.NewInsufficientParamsError(len(obj), 1)
243+
}
244+
245+
data, ok := obj[0].(string)
246+
if !ok {
247+
return shared.NewInvalidTypeError("data", "not a string")
248+
}
249+
args.Data = data
250+
251+
if len(args.Data) == 0 {
252+
return shared.NewValidationError("data", "is required")
253+
}
254+
255+
return nil
256+
}
257+
229258
type NewSigArgs struct {
230259
From string
231260
Data string

rpc/api/utils.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ var (
5151
"getData",
5252
"getCode",
5353
"sign",
54+
"sendRawTransaction",
5455
"sendTransaction",
5556
"transact",
5657
"estimateGas",

rpc/args.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,35 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
154154
return nil
155155
}
156156

157+
type NewDataArgs struct {
158+
Data string
159+
}
160+
161+
func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
162+
var obj []interface{}
163+
164+
if err := json.Unmarshal(b, &obj); err != nil {
165+
return NewDecodeParamError(err.Error())
166+
}
167+
168+
// Check for sufficient params
169+
if len(obj) < 1 {
170+
return NewInsufficientParamsError(len(obj), 1)
171+
}
172+
173+
data, ok := obj[0].(string)
174+
if !ok {
175+
return NewInvalidTypeError("data", "not a string")
176+
}
177+
args.Data = data
178+
179+
if len(args.Data) == 0 {
180+
return NewValidationError("data", "is required")
181+
}
182+
183+
return nil
184+
}
185+
157186
type NewTxArgs struct {
158187
From string
159188
To string

xeth/xeth.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,8 +803,12 @@ func (self *XEth) PushTx(encodedTx string) (string, error) {
803803

804804
if tx.To() == nil {
805805
addr := core.AddressFromMessage(tx)
806+
glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr)
806807
return addr.Hex(), nil
808+
} else {
809+
glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To())
807810
}
811+
808812
return tx.Hash().Hex(), nil
809813
}
810814

0 commit comments

Comments
 (0)