aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-12 22:59:07 +0800
committerobscuren <geffobscura@gmail.com>2015-03-12 22:59:07 +0800
commit2273155e7e325a2a6a940fffae7e9f6744b2ec22 (patch)
tree1767f5b797db8988afc46e9118b61d522a9c5226
parent26a563642431806486b595f29e22ae833abb6a8c (diff)
downloaddexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar.gz
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar.bz2
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar.lz
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar.xz
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.tar.zst
dexon-2273155e7e325a2a6a940fffae7e9f6744b2ec22.zip
Get transaction implemented
* Added a GetTransaction to XEth * Implemented the `eth_getTransactionByHash` RPC method
-rw-r--r--rpc/api.go18
-rw-r--r--rpc/args.go6
-rw-r--r--xeth/xeth.go13
3 files changed, 27 insertions, 10 deletions
diff --git a/rpc/api.go b/rpc/api.go
index 44b8ee834..b94d2d6dc 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -421,6 +421,14 @@ func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
return nil
}
+func (p *EthereumApi) GetTransactionByHash(hash string, reply *interface{}) error {
+ tx := p.xeth().EthTransactionByHash(hash)
+ if tx != nil {
+ *reply = NewTransactionRes(tx)
+ }
+ return nil
+}
+
func (p *EthereumApi) GetBlockByHash(blockhash string, includetx bool) (*BlockRes, error) {
block := p.xeth().EthBlockByHash(blockhash)
br := NewBlockRes(block)
@@ -594,14 +602,18 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
*reply = v
case "eth_getTransactionByHash":
- return errNotImplemented
+ // HashIndexArgs used, but only the "Hash" part we need.
+ args := new(HashIndexArgs)
+ if err := json.Unmarshal(req.Params, &args); err != nil {
+ }
+ return p.GetTransactionByHash(args.Hash, reply)
case "eth_getTransactionByBlockHashAndIndex":
args := new(HashIndexArgs)
if err := json.Unmarshal(req.Params, &args); err != nil {
return err
}
- v, err := p.GetBlockByHash(args.BlockHash, true)
+ v, err := p.GetBlockByHash(args.Hash, true)
if err != nil {
return err
}
@@ -629,7 +641,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return err
}
- v, err := p.GetBlockByHash(args.BlockHash, false)
+ v, err := p.GetBlockByHash(args.Hash, false)
if err != nil {
return err
}
diff --git a/rpc/args.go b/rpc/args.go
index 40f8575b2..faca03b63 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -280,8 +280,8 @@ func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
}
type HashIndexArgs struct {
- BlockHash string
- Index int64
+ Hash string
+ Index int64
}
func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
@@ -299,7 +299,7 @@ func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
if !ok {
return errDecodeArgs
}
- args.BlockHash = arg0
+ args.Hash = arg0
if len(obj) > 1 {
arg1, ok := obj[1].(string)
diff --git a/xeth/xeth.go b/xeth/xeth.go
index 70172a1c8..4c28caf86 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -32,6 +32,7 @@ type Backend interface {
Peers() []*p2p.Peer
BlockDb() ethutil.Database
StateDb() ethutil.Database
+ ExtraDb() ethutil.Database
EventMux() *event.TypeMux
Whisper() *whisper.Whisper
@@ -127,6 +128,14 @@ func (self *XEth) EthBlockByHash(strHash string) *types.Block {
return block
}
+func (self *XEth) EthTransactionByHash(hash string) *types.Transaction {
+ data, _ := self.eth.ExtraDb().Get(fromHex(hash))
+ if len(data) != 0 {
+ return types.NewTransactionFromBytes(data)
+ }
+ return nil
+}
+
func (self *XEth) BlockByNumber(num int64) *Block {
if num == -1 {
return NewBlock(self.chainManager.CurrentBlock())
@@ -231,10 +240,6 @@ func (self *XEth) SecretToAddress(key string) string {
return toHex(pair.Address())
}
-func (self *XEth) Execute(addr, value, gas, price, data string) (string, error) {
- return "", nil
-}
-
type KeyVal struct {
Key string `json:"key"`
Value string `json:"value"`