diff options
author | obscuren <geffobscura@gmail.com> | 2015-01-29 19:01:51 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-01-29 19:01:51 +0800 |
commit | 6d012f628bbfc22b2587828968eff513dfeb4d8e (patch) | |
tree | 54ee7aa44e667a62bea049f5c58cacf4fe571e3f /rpc | |
parent | ec85458612e1d5374767f87005dd0ad5934f74d5 (diff) | |
download | go-tangerine-6d012f628bbfc22b2587828968eff513dfeb4d8e.tar.gz go-tangerine-6d012f628bbfc22b2587828968eff513dfeb4d8e.tar.zst go-tangerine-6d012f628bbfc22b2587828968eff513dfeb4d8e.zip |
implement transact
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/args.go | 37 | ||||
-rw-r--r-- | rpc/message.go | 17 | ||||
-rw-r--r-- | rpc/packages.go | 11 |
3 files changed, 22 insertions, 43 deletions
diff --git a/rpc/args.go b/rpc/args.go index bebd79eb9..0c3087151 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -1,8 +1,6 @@ package rpc -import ( - "encoding/json" -) +import "encoding/json" type GetBlockArgs struct { BlockNumber int32 @@ -30,33 +28,18 @@ func (obj *GetBlockArgs) requirements() error { } type NewTxArgs struct { - Sec string `json:"sec"` Recipient string `json:"recipient"` Value string `json:"value"` Gas string `json:"gas"` GasPrice string `json:"gasprice"` - Init string `json:"init"` - Body string `json:"body"` + Data string `json:"data"` } // type TxResponse struct { // Hash string // } -func (obj *NewTxArgs) UnmarshalJSON(b []byte) (err error) { - if err = json.Unmarshal(b, obj); err == nil { - return - } - return NewErrorResponse(ErrorDecodeArgs) -} - func (a *NewTxArgs) requirements() error { - if a.Recipient == "" { - return NewErrorResponse("Transact requires a 'recipient' address as argument") - } - if a.Value == "" { - return NewErrorResponse("Transact requires a 'value' as argument") - } if a.Gas == "" { return NewErrorResponse("Transact requires a 'gas' value as argument") } @@ -66,22 +49,6 @@ func (a *NewTxArgs) requirements() error { return nil } -func (a *NewTxArgs) requirementsContract() error { - if a.Value == "" { - return NewErrorResponse("Create requires a 'value' as argument") - } - if a.Gas == "" { - return NewErrorResponse("Create requires a 'gas' value as argument") - } - if a.GasPrice == "" { - return NewErrorResponse("Create requires a 'gasprice' value as argument") - } - if a.Body == "" { - return NewErrorResponse("Create requires a 'body' value as argument") - } - return nil -} - type PushTxArgs struct { Tx string `json:"tx"` } diff --git a/rpc/message.go b/rpc/message.go index 5785fcc87..e9f47634f 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -20,6 +20,7 @@ import ( "bytes" "encoding/json" "errors" + "fmt" ) const ( @@ -56,6 +57,14 @@ type RpcRequest struct { Params []json.RawMessage `json:"params"` } +func NewErrorResponse(msg string) error { + return errors.New(msg) +} + +func NewErrorResponseWithError(msg string, err error) error { + return fmt.Errorf("%s: %v", msg, err) +} + func (req *RpcRequest) ToSha3Args() (*Sha3Args, error) { if len(req.Params) < 1 { return nil, NewErrorResponse(ErrorArguments) @@ -86,7 +95,7 @@ func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { } func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { - if len(req.Params) < 7 { + if len(req.Params) < 1 { return nil, NewErrorResponse(ErrorArguments) } @@ -94,7 +103,7 @@ func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { - return nil, NewErrorResponse(ErrorDecodeArgs) + return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) } rpclogger.DebugDetailf("%T %v", args, args) return args, nil @@ -175,7 +184,3 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { rpclogger.DebugDetailf("%T %v", args, args) return args, nil } - -func NewErrorResponse(msg string) error { - return errors.New(msg) -} diff --git a/rpc/packages.go b/rpc/packages.go index 2c5fbf6be..11a172bd6 100644 --- a/rpc/packages.go +++ b/rpc/packages.go @@ -67,7 +67,8 @@ func (p *EthereumApi) Transact(args *NewTxArgs, reply *interface{}) error { if err != nil { return err } - result, _ := p.xeth.Transact( /* TODO specify account */ args.Recipient, args.Value, args.Gas, args.GasPrice, args.Body) + result, _ := p.xeth.Transact( /* TODO specify account */ args.Recipient, args.Value, args.Gas, args.GasPrice, args.Data) + fmt.Println("result:", result) *reply = result return nil } @@ -78,7 +79,7 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *interface{}) error { return err } - result, _ := p.xeth.Transact( /* TODO specify account */ "", args.Value, args.Gas, args.GasPrice, args.Body) + result, _ := p.xeth.Transact( /* TODO specify account */ "", args.Value, args.Gas, args.GasPrice, args.Data) *reply = result return nil } @@ -210,6 +211,12 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } return p.GetBlock(args, reply) + case "eth_transact": + args, err := req.ToNewTxArgs() + if err != nil { + return err + } + return p.Transact(args, reply) case "web3_sha3": args, err := req.ToSha3Args() if err != nil { |