Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
3d6519e4
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3d6519e4
编写于
3月 10, 2015
作者:
T
Taylor Gerring
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update response types
上级
617804c3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
312 addition
and
6 deletion
+312
-6
rpc/api.go
rpc/api.go
+90
-5
rpc/args_test.go
rpc/args_test.go
+1
-1
rpc/responses.go
rpc/responses.go
+206
-0
xeth/xeth.go
xeth/xeth.go
+15
-0
未找到文件。
rpc/api.go
浏览文件 @
3d6519e4
...
@@ -415,6 +415,44 @@ func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
...
@@ -415,6 +415,44 @@ func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
GetBlockByHash
(
blockhash
string
,
includetx
bool
)
(
*
BlockRes
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByHash
(
blockhash
)
br
:=
NewBlockRes
(
block
)
br
.
fullTx
=
includetx
return
br
,
nil
}
func
(
p
*
EthereumApi
)
GetBlockByNumber
(
blocknum
int64
,
includetx
bool
)
(
*
BlockRes
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByNumber
(
blocknum
)
br
:=
NewBlockRes
(
block
)
br
.
fullTx
=
includetx
return
br
,
nil
}
func
(
p
*
EthereumApi
)
GetBlockTransactionCountByHash
(
blockhash
string
)
(
int64
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByHash
(
blockhash
)
br
:=
NewBlockRes
(
block
)
return
int64
(
len
(
br
.
Transactions
)),
nil
}
func
(
p
*
EthereumApi
)
GetBlockTransactionCountByNumber
(
blocknum
int64
)
(
int64
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByNumber
(
blocknum
)
br
:=
NewBlockRes
(
block
)
return
int64
(
len
(
br
.
Transactions
)),
nil
}
func
(
p
*
EthereumApi
)
GetBlockUncleCountByHash
(
blockhash
string
)
(
int64
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByHash
(
blockhash
)
br
:=
NewBlockRes
(
block
)
return
int64
(
len
(
br
.
Uncles
)),
nil
}
func
(
p
*
EthereumApi
)
GetBlockUncleCountByNumber
(
blocknum
int64
)
(
int64
,
error
)
{
block
:=
p
.
xeth
()
.
EthBlockByNumber
(
blocknum
)
br
:=
NewBlockRes
(
block
)
return
int64
(
len
(
br
.
Uncles
)),
nil
}
func
(
p
*
EthereumApi
)
GetRequestReply
(
req
*
RpcRequest
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetRequestReply
(
req
*
RpcRequest
,
reply
*
interface
{})
error
{
// Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC
// Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC
rpclogger
.
DebugDetailf
(
"%T %s"
,
req
.
Params
,
req
.
Params
)
rpclogger
.
DebugDetailf
(
"%T %s"
,
req
.
Params
,
req
.
Params
)
...
@@ -468,10 +506,49 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -468,10 +506,49 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
}
return
p
.
GetTxCountAt
(
args
,
reply
)
return
p
.
GetTxCountAt
(
args
,
reply
)
case
"eth_getBlockTransactionCountByHash"
:
case
"eth_getBlockTransactionCountByHash"
:
args
:=
new
(
GetBlockByHashArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
}
v
,
err
:=
p
.
GetBlockTransactionCountByHash
(
args
.
BlockHash
)
if
err
!=
nil
{
return
err
}
*
reply
=
toHex
(
big
.
NewInt
(
v
)
.
Bytes
())
case
"eth_getBlockTransactionCountByNumber"
:
case
"eth_getBlockTransactionCountByNumber"
:
args
:=
new
(
GetBlockByNumberArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
}
v
,
err
:=
p
.
GetBlockTransactionCountByNumber
(
args
.
BlockNumber
)
if
err
!=
nil
{
return
err
}
*
reply
=
toHex
(
big
.
NewInt
(
v
)
.
Bytes
())
case
"eth_getUncleCountByBlockHash"
:
case
"eth_getUncleCountByBlockHash"
:
args
:=
new
(
GetBlockByHashArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
}
v
,
err
:=
p
.
GetBlockUncleCountByHash
(
args
.
BlockHash
)
if
err
!=
nil
{
return
err
}
*
reply
=
toHex
(
big
.
NewInt
(
v
)
.
Bytes
())
case
"eth_getUncleCountByBlockNumber"
:
case
"eth_getUncleCountByBlockNumber"
:
return
errNotImplemented
args
:=
new
(
GetBlockByNumberArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
}
v
,
err
:=
p
.
GetBlockUncleCountByNumber
(
args
.
BlockNumber
)
if
err
!=
nil
{
return
err
}
*
reply
=
toHex
(
big
.
NewInt
(
v
)
.
Bytes
())
case
"eth_getData"
:
case
"eth_getData"
:
// TODO handle BlockNumber
// TODO handle BlockNumber
args
:=
new
(
GetDataArgs
)
args
:=
new
(
GetDataArgs
)
...
@@ -494,19 +571,27 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -494,19 +571,27 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
case
"eth_flush"
:
case
"eth_flush"
:
return
errNotImplemented
return
errNotImplemented
case
"eth_getBlockByHash"
:
case
"eth_getBlockByHash"
:
// TODO handle second param for "include transaction objects"
args
:=
new
(
GetBlockByHashArgs
)
args
:=
new
(
GetBlockByHashArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
return
err
}
}
*
reply
=
p
.
xeth
()
.
BlockByHash
(
args
.
BlockHash
)
v
,
err
:=
p
.
GetBlockByHash
(
args
.
BlockHash
,
args
.
Transactions
)
if
err
!=
nil
{
return
err
}
*
reply
=
v
case
"eth_getBlockByNumber"
:
case
"eth_getBlockByNumber"
:
// TODO handle second param for "include transaction objects"
args
:=
new
(
GetBlockByNumberArgs
)
args
:=
new
(
GetBlockByNumberArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
return
err
}
}
*
reply
=
p
.
xeth
()
.
BlockByNumber
(
args
.
BlockNumber
)
v
,
err
:=
p
.
GetBlockByNumber
(
args
.
BlockNumber
,
args
.
Transactions
)
if
err
!=
nil
{
return
err
}
*
reply
=
v
case
"eth_getTransactionByHash"
:
case
"eth_getTransactionByHash"
:
case
"eth_getTransactionByBlockHashAndIndex"
:
case
"eth_getTransactionByBlockHashAndIndex"
:
case
"eth_getTransactionByBlockNumberAndIndex"
:
case
"eth_getTransactionByBlockNumberAndIndex"
:
...
...
rpc/args_test.go
浏览文件 @
3d6519e4
...
@@ -243,7 +243,7 @@ func TestFilterOptions(t *testing.T) {
...
@@ -243,7 +243,7 @@ func TestFilterOptions(t *testing.T) {
expected
.
Max
=
3
expected
.
Max
=
3
expected
.
Skip
=
0
expected
.
Skip
=
0
expected
.
Address
=
"0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"
expected
.
Address
=
"0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8"
expected
.
Topic
=
[]
string
{
"0x12341234"
}
// expected.Topics
= []string{"0x12341234"}
args
:=
new
(
FilterOptions
)
args
:=
new
(
FilterOptions
)
if
err
:=
json
.
Unmarshal
([]
byte
(
input
),
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
input
),
&
args
);
err
!=
nil
{
...
...
rpc/responses.go
0 → 100644
浏览文件 @
3d6519e4
package
rpc
import
(
"encoding/json"
"math/big"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethutil"
)
type
BlockRes
struct
{
fullTx
bool
BlockNumber
int64
`json:"number"`
BlockHash
[]
byte
`json:"hash"`
ParentHash
[]
byte
`json:"parentHash"`
Nonce
[]
byte
`json:"nonce"`
Sha3Uncles
[]
byte
`json:"sha3Uncles"`
LogsBloom
[]
byte
`json:"logsBloom"`
TransactionRoot
[]
byte
`json:"transactionRoot"`
StateRoot
[]
byte
`json:"stateRoot"`
Miner
[]
byte
`json:"miner"`
Difficulty
int64
`json:"difficulty"`
TotalDifficulty
int64
`json:"totalDifficulty"`
Size
int64
`json:"size"`
ExtraData
[]
byte
`json:"extraData"`
GasLimit
int64
`json:"gasLimit"`
MinGasPrice
int64
`json:"minGasPrice"`
GasUsed
int64
`json:"gasUsed"`
UnixTimestamp
int64
`json:"timestamp"`
Transactions
[]
*
TransactionRes
`json:"transactions"`
Uncles
[][]
byte
`json:"uncles"`
}
func
(
b
*
BlockRes
)
MarshalJSON
()
([]
byte
,
error
)
{
var
ext
struct
{
BlockNumber
string
`json:"number"`
BlockHash
string
`json:"hash"`
ParentHash
string
`json:"parentHash"`
Nonce
string
`json:"nonce"`
Sha3Uncles
string
`json:"sha3Uncles"`
LogsBloom
string
`json:"logsBloom"`
TransactionRoot
string
`json:"transactionRoot"`
StateRoot
string
`json:"stateRoot"`
Miner
string
`json:"miner"`
Difficulty
string
`json:"difficulty"`
TotalDifficulty
string
`json:"totalDifficulty"`
Size
string
`json:"size"`
ExtraData
string
`json:"extraData"`
GasLimit
string
`json:"gasLimit"`
MinGasPrice
string
`json:"minGasPrice"`
GasUsed
string
`json:"gasUsed"`
UnixTimestamp
string
`json:"timestamp"`
Transactions
[]
interface
{}
`json:"transactions"`
Uncles
[]
string
`json:"uncles"`
}
// convert strict types to hexified strings
ext
.
BlockNumber
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
BlockNumber
)
.
Bytes
())
ext
.
BlockHash
=
ethutil
.
Bytes2Hex
(
b
.
BlockHash
)
ext
.
ParentHash
=
ethutil
.
Bytes2Hex
(
b
.
ParentHash
)
ext
.
Nonce
=
ethutil
.
Bytes2Hex
(
b
.
Nonce
)
ext
.
Sha3Uncles
=
ethutil
.
Bytes2Hex
(
b
.
Sha3Uncles
)
ext
.
LogsBloom
=
ethutil
.
Bytes2Hex
(
b
.
LogsBloom
)
ext
.
TransactionRoot
=
ethutil
.
Bytes2Hex
(
b
.
TransactionRoot
)
ext
.
StateRoot
=
ethutil
.
Bytes2Hex
(
b
.
StateRoot
)
ext
.
Miner
=
ethutil
.
Bytes2Hex
(
b
.
Miner
)
ext
.
Difficulty
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
Difficulty
)
.
Bytes
())
ext
.
TotalDifficulty
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
TotalDifficulty
)
.
Bytes
())
ext
.
Size
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
Size
)
.
Bytes
())
ext
.
ExtraData
=
ethutil
.
Bytes2Hex
(
b
.
ExtraData
)
ext
.
GasLimit
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
GasLimit
)
.
Bytes
())
ext
.
MinGasPrice
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
MinGasPrice
)
.
Bytes
())
ext
.
GasUsed
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
GasUsed
)
.
Bytes
())
ext
.
UnixTimestamp
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
b
.
UnixTimestamp
)
.
Bytes
())
ext
.
Transactions
=
make
([]
interface
{},
len
(
b
.
Transactions
))
if
b
.
fullTx
{
for
i
,
tx
:=
range
b
.
Transactions
{
ext
.
Transactions
[
i
]
=
tx
}
}
else
{
for
i
,
tx
:=
range
b
.
Transactions
{
ext
.
Transactions
[
i
]
=
ethutil
.
Bytes2Hex
(
tx
.
Hash
)
}
}
ext
.
Uncles
=
make
([]
string
,
len
(
b
.
Uncles
))
for
i
,
v
:=
range
b
.
Uncles
{
ext
.
Uncles
[
i
]
=
ethutil
.
Bytes2Hex
(
v
)
}
return
json
.
Marshal
(
ext
)
}
func
NewBlockRes
(
block
*
types
.
Block
)
*
BlockRes
{
res
:=
new
(
BlockRes
)
res
.
BlockNumber
=
block
.
Number
()
.
Int64
()
res
.
BlockHash
=
block
.
Hash
()
res
.
ParentHash
=
block
.
ParentHash
()
res
.
Nonce
=
block
.
Header
()
.
Nonce
res
.
Sha3Uncles
=
block
.
Header
()
.
UncleHash
res
.
LogsBloom
=
block
.
Bloom
()
res
.
TransactionRoot
=
block
.
Header
()
.
TxHash
res
.
StateRoot
=
block
.
Root
()
res
.
Miner
=
block
.
Header
()
.
Coinbase
res
.
Difficulty
=
block
.
Difficulty
()
.
Int64
()
res
.
TotalDifficulty
=
block
.
Td
.
Int64
()
res
.
Size
=
int64
(
block
.
Size
())
// res.ExtraData =
res
.
GasLimit
=
block
.
GasLimit
()
.
Int64
()
// res.MinGasPrice =
res
.
GasUsed
=
block
.
GasUsed
()
.
Int64
()
res
.
UnixTimestamp
=
block
.
Time
()
res
.
Transactions
=
make
([]
*
TransactionRes
,
len
(
block
.
Transactions
()))
for
i
,
tx
:=
range
block
.
Transactions
()
{
v
:=
NewTransactionRes
(
tx
)
v
.
BlockHash
=
block
.
Hash
()
v
.
BlockNumber
=
block
.
Number
()
.
Int64
()
v
.
TxIndex
=
int64
(
i
)
res
.
Transactions
[
i
]
=
v
}
res
.
Uncles
=
make
([][]
byte
,
len
(
block
.
Uncles
()))
for
i
,
uncle
:=
range
block
.
Uncles
()
{
res
.
Uncles
[
i
]
=
uncle
.
Hash
()
}
return
res
}
type
TransactionRes
struct
{
Hash
[]
byte
`json:"hash"`
Nonce
int64
`json:"nonce"`
BlockHash
[]
byte
`json:"blockHash,omitempty"`
BlockNumber
int64
`json:"blockNumber,omitempty"`
TxIndex
int64
`json:"transactionIndex,omitempty"`
From
[]
byte
`json:"from"`
To
[]
byte
`json:"to"`
Value
int64
`json:"value"`
Gas
int64
`json:"gas"`
GasPrice
int64
`json:"gasPrice"`
Input
[]
byte
`json:"input"`
}
func
(
t
*
TransactionRes
)
MarshalJSON
()
([]
byte
,
error
)
{
var
ext
struct
{
Hash
string
`json:"hash"`
Nonce
string
`json:"nonce"`
BlockHash
string
`json:"blockHash,omitempty"`
BlockNumber
string
`json:"blockNumber,omitempty"`
TxIndex
string
`json:"transactionIndex,omitempty"`
From
string
`json:"from"`
To
string
`json:"to"`
Value
string
`json:"value"`
Gas
string
`json:"gas"`
GasPrice
string
`json:"gasPrice"`
Input
string
`json:"input"`
}
ext
.
Hash
=
ethutil
.
Bytes2Hex
(
t
.
Hash
)
ext
.
Nonce
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
Nonce
)
.
Bytes
())
ext
.
BlockHash
=
ethutil
.
Bytes2Hex
(
t
.
BlockHash
)
ext
.
BlockNumber
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
BlockNumber
)
.
Bytes
())
ext
.
TxIndex
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
TxIndex
)
.
Bytes
())
ext
.
From
=
ethutil
.
Bytes2Hex
(
t
.
From
)
ext
.
To
=
ethutil
.
Bytes2Hex
(
t
.
To
)
ext
.
Value
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
Value
)
.
Bytes
())
ext
.
Gas
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
Gas
)
.
Bytes
())
ext
.
GasPrice
=
ethutil
.
Bytes2Hex
(
big
.
NewInt
(
t
.
GasPrice
)
.
Bytes
())
ext
.
Input
=
ethutil
.
Bytes2Hex
(
t
.
Input
)
return
json
.
Marshal
(
ext
)
}
func
NewTransactionRes
(
tx
*
types
.
Transaction
)
*
TransactionRes
{
var
v
=
new
(
TransactionRes
)
v
.
Hash
=
tx
.
Hash
()
v
.
Nonce
=
int64
(
tx
.
Nonce
())
v
.
From
=
tx
.
From
()
v
.
To
=
tx
.
To
()
v
.
Value
=
tx
.
Value
()
.
Int64
()
v
.
Gas
=
tx
.
Gas
()
.
Int64
()
v
.
GasPrice
=
tx
.
GasPrice
()
.
Int64
()
v
.
Input
=
tx
.
Data
()
return
v
}
type
FilterLogRes
struct
{
Hash
string
`json:"hash"`
Address
string
`json:"address"`
Data
string
`json:"data"`
BlockNumber
string
`json:"blockNumber"`
TransactionHash
string
`json:"transactionHash"`
BlockHash
string
`json:"blockHash"`
TransactionIndex
string
`json:"transactionIndex"`
LogIndex
string
`json:"logIndex"`
}
type
FilterWhisperRes
struct
{
Hash
string
`json:"hash"`
From
string
`json:"from"`
To
string
`json:"to"`
Expiry
string
`json:"expiry"`
Sent
string
`json:"sent"`
Ttl
string
`json:"ttl"`
Topics
string
`json:"topics"`
Payload
string
`json:"payload"`
WorkProved
string
`json:"workProved"`
}
xeth/xeth.go
浏览文件 @
3d6519e4
...
@@ -99,6 +99,13 @@ func (self *XEth) BlockByHash(strHash string) *Block {
...
@@ -99,6 +99,13 @@ func (self *XEth) BlockByHash(strHash string) *Block {
return
NewBlock
(
block
)
return
NewBlock
(
block
)
}
}
func
(
self
*
XEth
)
EthBlockByHash
(
strHash
string
)
*
types
.
Block
{
hash
:=
fromHex
(
strHash
)
block
:=
self
.
chainManager
.
GetBlock
(
hash
)
return
block
}
func
(
self
*
XEth
)
BlockByNumber
(
num
int64
)
*
Block
{
func
(
self
*
XEth
)
BlockByNumber
(
num
int64
)
*
Block
{
if
num
==
-
1
{
if
num
==
-
1
{
return
NewBlock
(
self
.
chainManager
.
CurrentBlock
())
return
NewBlock
(
self
.
chainManager
.
CurrentBlock
())
...
@@ -107,6 +114,14 @@ func (self *XEth) BlockByNumber(num int64) *Block {
...
@@ -107,6 +114,14 @@ func (self *XEth) BlockByNumber(num int64) *Block {
return
NewBlock
(
self
.
chainManager
.
GetBlockByNumber
(
uint64
(
num
)))
return
NewBlock
(
self
.
chainManager
.
GetBlockByNumber
(
uint64
(
num
)))
}
}
func
(
self
*
XEth
)
EthBlockByNumber
(
num
int64
)
*
types
.
Block
{
if
num
==
-
1
{
return
self
.
chainManager
.
CurrentBlock
()
}
return
self
.
chainManager
.
GetBlockByNumber
(
uint64
(
num
))
}
func
(
self
*
XEth
)
Block
(
v
interface
{})
*
Block
{
func
(
self
*
XEth
)
Block
(
v
interface
{})
*
Block
{
if
n
,
ok
:=
v
.
(
int32
);
ok
{
if
n
,
ok
:=
v
.
(
int32
);
ok
{
return
self
.
BlockByNumber
(
int64
(
n
))
return
self
.
BlockByNumber
(
int64
(
n
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录