天天看點

JSON RPC API

JSON格式用于進行輕量級資料的互動,它可描述數字,字元串,有序的數以及鍵值對集合。

JSON-RPC是一種無狀态,輕量級的遠端過程調用協定(RPC)。該規範主要定義與處理過程相關的資料結構和規則,它是與傳輸方式無關的,可在Socket,HTTP或在各種消息傳送環境内使用。它隻是将JSON(RFC 4627)作為資料格式。

Geth 1.4有實驗性的pub/sub支援,參看此頁擷取更多資訊。

Parity 1.6有實驗性的pub/sub支援,參考此頁擷取更多資訊。

JavaScript API

為了在JS應用程式内的以太坊節點能使用web3.js庫,這裡給出了RPC接口函數,參考JS API檢視更多資訊。

JSON-RPC 端點

預設JSON-RPC端點:

Client URL
C++ http://localhost:8545
Go http://localhost:8545
Py http://localhost:4000
Parity http://localhost:8545

Go

可用--rpc标志來開始一個HTTP JSON-RPC

geth --rpc

改變預設端口8545和清單位址localhost如下:

geth --rpc --rpcaddr <ip> --rpcport <portnumber>

若是從浏覽器通路RPC,需要通過合适的域名集來使能CORS,否則,JS調用會被同源政策限制且請求會失敗:

geth --rpc --rpccorsdomain "http://localhost:3000"

JSON RPC還可使用指令admin.startRPC(addr, port)從geth console啟動。

C++

可帶-j項來運作eth應用程式:

./eth -j

可自定義JSON-RPC端口(預設為8545):

./eth -j --json-rpc-port 8079

Python

在Python内JSON RPC伺服器預設是開啟的,并且監聽端口127.0.0.1:4000

可給它一個配置選項來自定義端口和監聽位址:

pyethapp -c jsonrpc.listen_port=4002 -c jsonrpc.listen_host=127.0.0.2 run

JSON-RPC 支援項

cpp-ethereum go-ethereum py-ethereum parity
JSON-RPC 1.0
JSON-RPC 2.0
Batch requests
HTTP
IPC
WS

十六進制編碼

目前通過JSON傳輸兩個關鍵資料類型:未格式化位元組數組和數量。它們都是以十六進制編碼形式傳輸,然而有不同的格式化要求:

當編碼數量QUANTITIES(整數和數量)時:以十六進制格式編碼,字首0x,這是最緊湊的一種表示方法(有個例外,就是零表示為0x0)。例子:

0x41(65的十進制)

0x400(1024的十進制)

WRONG:0x(應該至少有一個數字-零是0x0)

WRONG:0x0400(第一個位置不應為0)

WRONG:ff(必須以0x為字首)

當編碼未格式化資料時(位元組數組,賬戶位址,哈希,位元組碼數組):

以十六進制編碼,字首為0x,每個位元組有兩個十六進制數字。例子:

0x41(大小為1,A)

0x004200(大小為3,"\0B\0")

0x(大小為0, "")

WRONG:0xf0f0f(必須時偶數的數字)

WRONG:004200(必須帶字首0x)

目前cpp-ethereum, go-ethereum和parity在http和IPC(Linux的unix socket以及Windows OSX的命名管道)上提供JSON-RPC互動。go-ethereum的1.4版本和Parity的1.6版本以上都支援websocket。

預設區塊參數:

下面的方法都有一個額外的預設區塊參數:

eth_getBalance

傳回指定位址的賬戶餘額

參數

1.DATA - 長度20個位元組,表示要檢查餘額的位址

2.QUANTITY|TAG - 整數型區塊數量,或字元串"latest", "earliest"或"pending",參考預設區塊參數

params: [
   '0x407d73d8a49eeb85d32cf465507dd71d507100c1',
   'latest'
]
           

傳回值

QUANTITY - 目前餘額的整數型,以wei為機關,後面帶18個0的wei,表示1ETH。

執行個體:

//Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0234c8a3397aab58" // 158972490234375000
}
           

其中jsonrpc字段表示JSON-RPC版本号,method字段表示需要調用的API方法名字,params字段表示要傳送的參數,id字段用來辨別消息。

eth_getCode

傳回給定位址的代碼

參數:

1.DATA - 長度20個位元組,表示位址

2.QUANTITY|TAG - 整數型的區塊數量,或字元串"latest", "earliest"或"pending",參考預設區塊參數

params: [
   '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b',
   '0x2'  // 2
]
           

傳回值:

DATA - 從指定位址擷取的代碼

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"
}
           

eth_getTransactionCount

傳回從一個位址發出的交易數量

參數:

1.DATA - 長度20位元組,表示位址

2.QUANTITY|TAG - 整數型區塊數量,或者字元串"latest","earliest"或"pending",參考預設參數

params: [
   '0x407d73d8a49eeb85d32cf465507dd71d507100c1',
   'latest' // state at the latest block
]
           

傳回值:

QUANTITY - 擷取從這個位址發出的交易數量,它是一個整數形式

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
           

eth_getStorageAt

傳回一個給定位址上的一個存儲位置的值

參數:

1.DATA - 長度為20個位元組,表示存儲的位址

2.QUANTITY - 存儲的位置,它是一個整數形式

3.QUANTITY|TAG - 區塊數,整數形式,或字元串"latest","earliest"或"pending",參考預設區塊參數

傳回值:

DATA - 擷取該存儲位置的值

執行個體:

根據要擷取的存儲計算正确的位置,假設下面的合約通過位址0x391694e7e0b0cce554cb130d723a9d27458f9298部署在0x295a70b2de5e3953354a6a8344e616ed314d7251

contract Storage {
    uint pos0;
    mapping(address => uint) pos1;
    
    function Storage() {
        pos0 = 1234;
        pos1[msg.sender] = 5678;
    }
           

擷取pos0的值很簡單:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545

{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}
           

而擷取該map中的一個元素會更難,map内一個元素的位置使用如下方式計算得到:

keccack(LeftPad32(key, 0), LeftPad32(map position, 0))
           

這表示要擷取位置pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]上的存儲,必須用下面的方式計算位置:

keccak(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"))
           

一個帶web3庫的geth控制台可以如下方式做這個計算:

> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"
           

現在就可去擷取該存儲位置了:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545

{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}
           

eth_call

沒有在區塊鍊上建立交易的情況下立即執行一個新的消息調用

參數:

1.Object - 交易調用對象

from - DATA, 長20位元組 ,可選的,要發出交易的位址

to - DATA,長20位元組,該交易指向的位址

gas - QUANTITY,可選的,交易執行所需的gas數,整型的。eth_call消耗0 gas,但是一些執行操作可能需要該參數。

gasPrice - QUANTITY,可選的,每個需支付gas的gasPrice數量,整形格式。

value - QUANTITY,可選的,與該交易以通發出的數值,整數型。

data - DATA,可選的,所要調用方法的簽名和被編碼參數的哈希值組合。詳細參考Ethereum Contract ABI

2.QUANTITY|TAG - 區塊數量,整數型,或字元串"latest","earliest"或"pending",參考預設區塊參數。

傳回值:

DATA - 執行合約的傳回值

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x"
}
           

當請求以太坊的狀态資訊時,最後的預設區塊參數決定了區塊的高度。

以下都是預設區塊參數的潛在項:

HEX String - 一個整數型區塊數量

String "earliest" - 最早/創世區塊

String "latest" - 最近被挖礦的區塊

String "pending" - 挂起狀态/交易

Curl執行個體解析

當節點申訴内容類型時, curl選項可能傳回一個應答。這是因為--data選項設定内容類型為application/x-www-form-urlencoded。若節點真的申訴,需手動在調用起始處将頭部設定為-H "Content-Type:application/json"

該執行個體也沒有包含必須給到curl類似127.0.0.1:8545的URL/IP & port組合。

JSON RPC方法

web3_clientVersion:

傳回目前用戶端版本号

參數:

none

傳回值:

String - 目前用戶端版本号

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'

// Result
{
  "id":67,
  "jsonrpc":"2.0",
  "result": "Mist/v0.9.3/darwin/go1.4.1"
}
           

web3_sha3

傳回給定資料的Keccak-256(非标準SHA3-256)

參數:

1.DATA - 要轉換為SHA3哈希的資料

params: [
  "0x68656c6c6f20776f726c64"
]
           

傳回值:

DATA - 給定字元串的SHA3結果

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'

// Result
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}
           

net_version:

傳回目前網絡id,每個鍊都擁有獨一無二的ID辨別。

參數:

none

傳回值:

String - 目前網絡id。

"1" - 辨別以太坊主網

"2" - Morden測試網(已被廢棄)

"3" - Ropsten測試網

"4" - Rinkby測試網

"42" - Kovan測試網

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'

// Result
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "3"
}
           

網絡監聽:

若用戶端正在監聽網絡連接配接則傳回true。

參數:

none

傳回值:

Boolean - 當監聽時為true,否則為false

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'

// Result
{
  "id":67,
  "jsonrpc":"2.0",
  "result":true
}
           

net_peerCount

傳回目前連接配接到用戶端的節點數

參數

none

傳回值

QUANTITY - 連接配接着的節點數量,整數型

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'

// Result
{
  "id":74,
  "jsonrpc": "2.0",
  "result": "0x2" // 2
}
           

eth_protocolVersion

傳回目前以太坊協定版本

參數

none

傳回值

String - 目前以太坊協定版本号

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'

// Result
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "54"
}
           

eth_syncing

傳回一個對象,該對象攜帶同步狀态的資料,反之傳回false。

參數

none

傳回值

Object|Boolean,一個攜帶同步狀态資料的對象或false,當沒有同步時:

startingBlock:QUANTITY - 區塊在哪點開始導入(在同步到達它的頭部之後,會複位)

currentBlock:QUANTITY - 目前區塊,與eth_blockNumber相同

highestBlock:QUANTITY - 預估最高區塊

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": {
    startingBlock: '0x384',
    currentBlock: '0x386',
    highestBlock: '0x454'
  }
}
// Or when not syncing
{
  "id":1,
  "jsonrpc": "2.0",
  "result": false
}
           

eth_coinbase

傳回用戶端coinbase位址

參數

none

傳回值

DATA - 長20位元組,目前coinbase位址

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'

// Result
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}
           

eth_mining

若用戶端正在挖一個新區塊,則傳回true

參數

none

傳回值

Boolean - 若用戶端正在挖礦,則傳回true,反之傳回false

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'

// Result
{
  "id":71,
  "jsonrpc": "2.0",
  "result": true
}
           

eth_hashrate

傳回節點正在挖礦的每秒哈希數量

參數

none

傳回值

QUANTITY - 每秒的哈希數量

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'

// Result
{
  "id":71,
  "jsonrpc": "2.0",
  "result": "0x38a"
}
           

eth_gasPrice

傳回目前每gas的價格,以wei為機關,18個0的wei表示1個eth

參數

none

傳回值

QUANTITY - 目前每gas的價格,整數型,以wei為機關

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'

// Result
{
  "id":73,
  "jsonrpc": "2.0",
  "result": "0x09184e72a000" // 10000000000000
}
           

eth_accounts

傳回用戶端存儲的位址清單

參數

none

傳回值

Array of DATA - 長度為20位元組,用戶端所存儲的位址

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}
           

eth_blockNumber

傳回最近區塊的數量

參數

none

傳回值

QUANTITY - 在用戶端上的目前區塊數量,整數型

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'

// Result
{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0x4b7" // 1207
}
           

eth_getTransactionCount

傳回從一個位址發出的交易數量

參數

1.DATA - 長20位元組,表示位址

2.QUANTITY|TAG - 區塊數量,整數型,或字元串"latest","earliest"或"pending",參考預設區塊參數

params: [
   '0x407d73d8a49eeb85d32cf465507dd71d507100c1',
   'latest' // state at the latest block
]
           

傳回值

QUANTITY - 從位址發出的交易數量,整型

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
           

eth_getBlockTransactionCountByHash

傳回一個與給定區塊哈希相比對的區塊内的交易數量

參數

DATA - 長32位元組,表示區塊的哈希值

params: [
   '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]
           

傳回值

QUANTITY - 該區塊内的交易數量,整數型

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xb" // 11
}
           

eth_getBlockTransactionCountByNumber

傳回與給定區塊号相比對的區塊内的交易數量

參數

1.QUANTITY|TAG - 區塊數量,整數型。或者字元串"earliest","latest"或"pending",正如在預設區塊參數所示

params: [
   '0xe8', // 232
]
           

傳回值

QUANTITY - 該區塊内的交易數量,整數型

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xa" // 10
}
           

eth_getUncleCountByBlockHash

傳回與給定區塊哈希相比對的區塊内的叔父節點數

參數

1.DATA - 長32位元組,表示區塊哈希

params: [
   '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]
           

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
           

eth_getUncleCountByBlockNumber

傳回一個給定區塊号比對的區塊的叔父數量

參數

1.QUANTITY|TAG - 區塊号,整數型,或者整數型"latest","earliest"或"pending",參考預設區塊參數

params: [
   '0xe8', // 232
]
           

傳回值

QUANTITY - 該區塊内的叔父數量,整數型

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
           

eth_sign

簽名函數計算一個以太坊指定的簽名:

sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))
           

通過給一個添加了字首的消息做簽名計算,可用于識别一個以太坊的簽名。這可防止惡意DApp對任意資料(比如,交易資料)進行簽名以冒充受害者。

注意:要簽名的位址必須先解鎖。

參數

賬戶,資訊

1.DATA - 長20位元組,表示位址

2.DATA - 長N位元組,表示要簽名的資訊

傳回

DATA:簽名

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
           

一個使用solidity ecrecover來驗證使用eth_sign簽名的方法執行個體可參考,該合約部署在測試網Ropsten和Rinkeby上。

eth_sendTransaction

建立新消息調用交易,或者若資料域包含代碼,則建立的是一個合約

參數

1.Object - 交易對象

from: DATA - 長20位元組,表示發出交易的位址

to:DATA- 長20位元組,若正在建立的是一個新合約,則為可選項,交易所指向的位址

gas: QUANTITY - (可選,預設:90000)交易執行所需要的gas,整數型,其中會傳回未被使用的gas

gasPrice:QUANTITY - (可選,預設:To-Be-Determined)每個被支付的gas所用的gasPrice,整型。

value:QUANTITY - (可選)該交易所攜帶的數值,整型

data:DATA - 一個合約的被編譯的代碼或者被調用函數的簽名以及被編碼的參數的哈希值。詳細參考Ethereum Contract ABI 

nonce:QUANTITY - (可選)nonce值,整型。它允許覆寫使用同一nonce值的挂起交易。

params: [{
  "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
  "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
  "gas": "0x76c0", // 30400
  "gasPrice": "0x9184e72a000", // 10000000000000
  "value": "0x9184e72a", // 2441406250
  "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"
}]
           

傳回值

DATA - 長32位元組,表示交易哈希值,或若交易還沒有使用則為zero哈希。

在合約被挖礦後,當建立一個合約時,使用函數eth_getTransactionReceipt來擷取合約位址。

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
           

eth_sendRawTransaction

給被簽名的交易建立新消息調用或建立一個合約。

參數

1.DATA - 被簽名的交易資料

params: ["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"]
           

傳回值

DATA - 長32個位元組,交易哈希,或若交易還沒被使用,則為zero哈希

在合約被挖礦後,當建立一個合約時,使用函數eth_getTransactionReceipt來擷取合約位址。

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
           

eth_sendTransaction與eth_sendRawTransaction差別:

首先一個交易在黃皮書的4.3章節有介紹,它由字段比如gasPrice,value等構成。它們被算法Recursive Length Prefix編碼進一個位元組序内,并最終被存儲到區塊鍊中。而這個位元組序就是所謂的raw交易。一般來說一個raw交易表示的就是一個機器碼格式的交易,簽名是已經被添加進去了的。

所有的交易都必須被簽名,否則被認為是無效交易且不會被打包進區塊鍊中。

一個raw交易是以raw位元組形式的交易,若有一個有效交易的raw位元組,則可使用sendRawTransaction,否則它也可作為sendTransaction()的一部分,web3.js會自動建立簽過名的交易位元組。web3.js将類似JSON交易{from: ...,to:...,value:...}轉換成raw位元組并自動對它進行簽名。

若使用類似infura.io平台,這些不會處理私鑰而隻會處理簽過名的交易平台時,會需要使用raw位元組。

eth_estimateGas

生成并傳回一個預估值,該預估值是描述一個交易完成所需要的gas量。該交易不會被添加到區塊鍊。注意預估值可能會明顯多于實際交易中所使用到的gas數量,這是由各種各樣原因導緻的,包括EVM機制和節點行為。

參數

參考eth_call參數,不同之處就是所有屬性在這都是可選的。若沒有指定gas上限,則geth會使用挂起區塊的gas上限。是以當執行所需gas數量高于挂起區塊gas上限時,可能會導緻預估值不足于支付執行call/transaction時所需的gas。

傳回值

QUANTITY - gas使用數量

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x5208" // 21000
}
           

eth_getBlockByHash

通過哈希值傳回關于區塊的資訊

參數

1.DATA - 長32位元組,表示區塊的哈希值

2.Boolean - 若要傳回完整交易對象時則設為true,若隻要此哈希的交易,則設為false

params: [
   '0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331',
   true
]
           

傳回值

Object - 一個區塊對象,或當找不到區塊時為null

number: QUANTITY - 表示區塊号,當為挂起區塊時為null

hash:DATA - 長32位元組,表示區塊哈希,當為挂起區塊時為null

parentHash:DATA - 長32位元組,表示父區塊哈希值

nonce:DATA-長8個位元組,表示生成的工作量證明哈希,當為挂起區塊是為null

sha3Uncles:DATA - 長32個位元組,表示區塊内的叔父資料的SHA3

logsBloom:DATA - 長256個位元組,表示區塊的日志布隆過濾器,當為挂起區塊時為null

transactionsRoot:DATA - 長32個位元組,表示區塊的交易樹的根

stateRoot:DATA - 長32個位元組,區塊的最終狀态樹的根

receiptsRoot:DATA - 長32個位元組,區塊的收據樹的根

miner:DATA-長20個位元組,挖礦獎勵受益人的位址

difficulty:QUANTITY - 區塊難度值,整型

totalDifficulty:QUANTITY - 到目前區塊位置的鍊的總難度值,整型

extraData:DATA - 表示本區塊額外資料域

size:QUANTITY - 本區塊的大小,以位元組為機關,整型

gasLimit:QUANTITY - 在本區塊内的允許的最大gas

gasUsed:QUANTITY - 本區塊内所有交易消耗的gas

timestamp:QUANTITY - 整理區塊時的unix的時間戳

transactions:Array - 交易對象的數組,或根據最後給定參數的長32位元組的交易哈希值

uncles:Array - 叔父哈希數組

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", true],"id":1}'

// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {
    "number": "0x1b4", // 436
    "hash": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
    "parentHash": "0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5",
    "nonce": "0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2",
    "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    "logsBloom": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
    "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "stateRoot": "0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff",
    "miner": "0x4e65fda2159562a496f9f3522f89122a3088497a",
    "difficulty": "0x027f07", // 163591
    "totalDifficulty":  "0x027f07", // 163591
    "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "size":  "0x027f07", // 163591
    "gasLimit": "0x9f759", // 653145
    "gasUsed": "0x9f759", // 653145
    "timestamp": "0x54e34e8e" // 1424182926
    "transactions": [{...},{ ... }] 
    "uncles": ["0x1606e5...", "0xd5145a9..."]
  }
           

eth_getBlockByNumber

通過區塊号得到區塊的資訊

參數

1.QUANTITY|TAG - 一個區塊号,整型,或字元串"earliest","latest"或"pending",正如在預設區塊參數内所描述的一樣。

2.Boolean - 若要傳回整個交易對象,則設為true,若隻傳回該交易的哈希,則設為false。

params: [
   '0x1b4', // 436
   true
]
           

傳回值

參考eth_getBlockByHash

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'
           

結果參考 eth_getBlockByHash

eth_getTransactionByHash

傳回交易hash所請求的交易資訊

參數

1.DATA - 長32個位元組,一個交易哈希

params: [
   "0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"
]
           

傳回值

object - 一個交易對象,或當找不到交易時為null

hash:DATA - 長32位元組,表示交易的哈希

nonce:QUANTITY - 表示前一個發送者的交易數量

blockHash:DATA - 長32個位元組,表示該交易所在區塊哈希,當交易挂起時為null

blockNumber:QUANTITY - 交易所在區塊的區塊号,當交易挂起時為null

transactionIndex:QUANTITY - 區塊内的交易索引号,整型,交易挂起時為null

from:DATA-長20位元組,表示發送者位址

to:DATA-20位元組,表示接收者位址,當它是一個合約建立交易時為null

value:QUANTITY - 發送者提供的gas價格,以wei為機關

gasPrice:QUANTITY - 發送者提供的的gas價格,以wei為機關

gas:QUANTITY - 發送者提供的gas

input:DATA - 與交易一起發送的資料

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'

// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {
    "hash":"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",
    "nonce":"0x",
    "blockHash": "0xbeab0aa2411b7ab17f30a99d3cb9c6ef2fc5426d6ad6fd9e2a26a6aed1d1055b",
    "blockNumber": "0x15df", // 5599
    "transactionIndex":  "0x1", // 1
    "from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
    "to":"0x85h43d8a49eeb85d32cf465507dd71d507100c1",
    "value":"0x7f110", // 520464
    "gas": "0x7f110", // 520464
    "gasPrice":"0x09184e72a000",
    "input":"0x603880600c6000396000f300603880600c6000396000f3603880600c6000396000f360",
  }
}
           

eth_getTransactionByBlockHashAndIndex

通過區塊哈希和交易索引位置傳回一個交易資訊

參數

1.DATA - 長32位元組,表示區塊哈希

2.QUANTITY - 交易索引位置,整型

params: [
   '0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331',
   '0x0' // 0
]
           

傳回值

參考eth_getTransactionByHash

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'
           

結果參考eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

通過區塊号和交易索引位置傳回交易資訊

參數

1.QUANTITY|TAG - 一個區塊号,或者字元串"earliest","latest"或"pending",正如在預設區塊參數中所示一樣。

2.QUANTITY - 交易索引位置

params: [
   '0x29c', // 668
   '0x0' // 0
]
           

傳回值

參考eth_getTransactionByHash

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'
           

結果參考eth_getTransactionByHash

eth_getTransactionReceipt

傳回通過交易哈希得到的交易收據

注意:該收據在挂起交易中不可用

參數

1.DATA - 長32個位元組,表示交易哈希

params: [
   '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238'
]
           

傳回值

Object - 一個交易收據對象,或者當找不到收據時為null

transactionHash:DATA-長32個位元組,表示交易哈希

transactionIndex:QUANTITY - 區塊内的交易索引位置,整數型

blockHash:DATA - 長32位元組,表示交易所在的區塊哈希值

blockNumber:QUANTITY - 交易所在的區塊号

from:DATA-長20個位元組,發送者位址

to:DATA - 長20個位元組,接收者位址,當它是一個合約建立交易時為null

cumulativeGasUsed:QUANTITY - 當在區塊内執行該交易時所消耗的總gas數

gasUsed:QUANTITY - 由該交易獨立所消耗的gas量

contractAddress:DATA - 長20個位元組,當一個合約被建立時,該合約位址被建立;否則為null

logs:Array - log對象數字,它是由該交易生成的

logsBloom:DATA - 長256位元組,表示輕用戶端的布隆過濾器用于快速擷取相關log

它還傳回如下:

root:DATA - 表示post-transaction狀态根的32個位元組長(每Byzantium)

status:QUANTITY - 為1(成功)或0(失敗)

執行個體:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'

// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {
     transactionHash: '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238',
     transactionIndex:  '0x1', // 1
     blockNumber: '0xb', // 11
     blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
     cumulativeGasUsed: '0x33bc', // 13244
     gasUsed: '0x4dc', // 1244
     contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was created
     logs: [{
         // logs as returned by getFilterLogs, etc.
     }, ...],
     logsBloom: "0x00...0", // 256 byte bloom filter
     status: '0x1'
  }
}
           

eth_getUncleByBlockHashAndIndex

通過哈希和叔父索引位置傳回一個區塊的叔父資訊

參數

1.DATA - 32位位元組長,表示區塊哈希

2.QUANTITY - 叔父的索引位置

params: [
   '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
   '0x0' // 0
]
           

傳回值

參考eth_getBlockByHash

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'
           

結果參考 eth_getBlockByHash

注意:一個叔父區塊不包含個人交易。

叔父區塊:

在比特币中,叔父區塊由于不在最長的鍊上,是以被認為是一個孤兒,它是一個與父區塊具有相同高度的可選區塊。

在以太坊中,當礦工挖一個區塊時,會激勵礦工去打包一系列叔父區塊,這起到兩個作用:

1). 仍然獎勵産生舊的或孤兒區塊(這些區塊非大池的一部分)的礦工,以便減輕中心化激勵。這是由于網絡傳播延遲導緻的。

2).通過增加主鍊上的工作量來增加鍊的安全性。是以幾乎沒有,甚至非常少的工作量會耗費在舊區塊上。

但是叔父區塊引入額外的經濟複雜性,比如挖到空叔父的獎勵。詳細參考文檔

eth_getUncleByBlockNumberAndIndex

通過區塊号和叔父索引位置傳回一個叔父區塊的資訊。

參數

1.QUANTITY|TAG - 一個區塊号,或字元串"earliest","latest"或"pending",正如在預設區塊參數中所示一樣。

2.QUANTITY - 叔父的索引位置

params: [
   '0x29c', // 668
   '0x0' // 0
]
           

傳回值

參考eth_getBlockByHash

注意:一個叔父區塊不包含個人交易

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'
           

結果參考e th_getBlockByHash

eth_getCompilers

用戶端内傳回一個可用編譯器清單

參數

none

傳回值

Array - 可用編譯器清單

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCompilers","params":[],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": ["solidity", "lll", "serpent"]
}
           

eth_compileSolidity

傳回已編譯的solidity代碼

參數

String - 源代碼

params: [
   "contract test { function multiply(uint a) returns(uint d) {   return a * 7;   } }",
]
           

傳回值

DATA - 已編譯的源代碼

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) {   return a * 7;   } }"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": {
      "code": "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056",
      "info": {
        "source": "contract test {\n   function multiply(uint a) constant returns(uint d) {\n       return a * 7;\n   }\n}\n",
        "language": "Solidity",
        "languageVersion": "0",
        "compilerVersion": "0.9.19",
        "abiDefinition": [
          {
            "constant": true,
            "inputs": [
              {
                "name": "a",
                "type": "uint256"
              }
            ],
            "name": "multiply",
            "outputs": [
              {
                "name": "d",
                "type": "uint256"
              }
            ],
            "type": "function"
          }
        ],
        "userDoc": {
          "methods": {}
        },
        "developerDoc": {
          "methods": {}
        }
      }

}
           

eth_compileLLL

傳回已編譯的LLL代碼

參數

1.String - 源代碼

params: [
   "(returnlll (suicide (caller)))",
]
           

傳回值

DATA - 已編譯好的源代碼

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileLLL","params":["(returnlll (suicide (caller)))"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code
}
           

eth_compileSerpent

傳回已編譯的serpent代碼

參數

1.String - 源碼

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSerpent","params":["/* some serpent */"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code
}
           

eth_newFilter

基于過濾器選項,建立一個過濾器對象,以便通知狀态何時改變(logs),要檢測狀态是否已經改變,可調用函數eth_getFilterChanges。

指定條目過濾器的注意事項:

條目是依賴于順序的,一個帶參數[A,B]的條目log可比對如下條目過濾器:

[] - 任何條目

[A] - A為首位置條目,其後可為任何詞

[null, B] - 首位置可為任何詞 且 在第二個位置必須為B,其後可以為任何詞

[A, B] - 首位置必須為A 且 第二個位置必須為B,其後可為任何詞

[[A, B],[A, B]] - 在首位置為A或B,第二個位置為A或B,之後可為任何詞

參數

1.Object - 過濾器選項

fromBlock:QUANTITY|TAG - 可選的,預設為latest,區塊号,整型,若為latest,則表示最近被挖到的區塊,或若為pending,earliest表示還沒有被挖到的交易

toBlock:QUANTITY|TAG - 可選的,預設latest,區塊号,整型,若為latest,則表示最近被挖到的區塊,或若為pending,earliest表示還沒有被挖到的交易

address:DATA|Array,長20個位元組 - 可選的,合約位址或位址清單,log應該從此位置開始發出。

topics:DATA的數組, 可選的,長32個位元組的DATA條目數組,條目是依賴順序的,每個條目也可能是一個DATA數組或選項。

params: [{
  "fromBlock": "0x1",
  "toBlock": "0x2",
  "address": "0x8888f1f195afa192cfee860698584c030f4c9db1",
  "topics": ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", null, ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc"]]
}]
           

傳回值

QUANTITY - 一個過濾器id

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
           

eth_newBlockFilter

在節點内建立一個過濾器,以便通知一個新節點的到來,可調用eth_getFilterChanges以便檢測狀态改變。

參數

none

傳回值

QUANTITY - 一個過濾器id

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}
           

eth_newPendingTransactionFilter

在節點内建立一個過濾器,以便當新挂起交易到達時發出通知。可調用eth_getFilterChanges以便檢測狀态改變。

參數

none

傳回值

QUANTITY - 一個過濾器id

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}
           

eth_uninstallFilter

解除安裝一個給定id的過濾器,當不再需要監視時應該調用它。另外,在一段時間後當它們沒有被函數eth_getFilterChanges請求

時,過濾器會逾時。

參數

1.QUANTITY - 過濾器id

params: [
  "0xb" // 11
]
           

傳回值

Boolean - 若過濾器被成功解除安裝,則傳回true,反之傳回false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": true
}
           

eth_getFilterChanges

過濾器的一個輪詢方法,它時最近輪詢傳回的log數組。

參數

1.QUANTITY - 過濾器id

params: [
  "0x16" // 22
]
           

傳回值

Array - long對象的數組,或當最後一次輪詢發現狀态沒有改變時它為一個空數組。

1.對使用eth_newBlockFilter函數建立的過濾器,傳回值為區塊哈希值(DATA,長32位元組),比如:

["0x3454645634534..."]
           

2.對使用eth_newPendingTransactionFilter建立的過濾器,傳回值為交易哈希(DATA,長32位元組),比如:

["0x6345343454645..."]
           

3.對使用eth_newFilter建立的過濾器,其log對象攜帶如下參數:

removed:TAG - 當log被删除時,由于鍊重組,它為true,若它時一個有效log,則為false

logIndex:QUANTITY - 區塊内的log索引位置,整數型,當它是挂起log時為null

transactionIndex:QUANTITY - 交易索引位置,log從該位置建立的,整型,當為挂起log時為null

transactionHash:DATA - 長32位元組,交易哈希,log從該hash建立,當為挂起log時為null

blockHash:DATA - 長32位元組,log所在區塊的哈希,當為挂起時為null

blockNumber:QUANTITY - log所在區塊号,當挂起時為null

address:DATA - 長20位元組,該log原生位址

data:DATA - 包含一到多個32位元組長的log非索引參數

topics:DATA的數組 - 被索引的log參數的0到4個32位元組長的DATA。在solidity内:首個條目為事件簽名的哈希(比如,Deposit(address, bytes32, uint256)),當聲明帶參數anonymous 訓示器的事件除外。

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": [{
    "logIndex": "0x1", // 1
    "blockNumber":"0x1b4", // 436
    "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
    "transactionHash":  "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
    "transactionIndex": "0x0", // 0
    "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
    "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
    },{
      ...
    }]
}
           

eth_getFilterLogs

傳回給定過濾器id比對的log數組

參數

1.QUANTITY - 過濾器id

params: [
  "0x16" // 22
]
           

傳回值

參考eth_getFilterChanges

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'
           

結果參考eth_getFilterChanges

eth_getLogs

傳回一個與給定過濾器對象比對的log數組

參數

1.Object - 過濾器項:

fromBlock:QUANTITY|TAG - 可選的,預設為latest,區塊号,整型,若為latest,則表示最近被挖到的區塊,或若為pending,earliest表示還沒有被挖到的交易

toBlock:QUANTITY|TAG - 可選的,預設latest,區塊号,整型,若為latest,則表示最近被挖到的區塊,或若為pending,earliest表示還沒有被挖到的交易

address:DATA|Array,長20個位元組 - 可選的,合約位址或位址清單,log應該從此位置開始發出。

topics:DATA的數組, 可選的,長32個位元組的DATA條目數組,條目是依賴順序的,每個條目也可能是一個DATA數組或選項。

blockhash:DATA,長32個位元組,可選的future,在EIP-234情形下,blockHash是一個新過濾項,用于限制傳回到帶32位元組長哈希的blockHash的log。使用blockHash相當于fromBlock = toBlock = 帶blockHash的區塊号,若blockHash在過濾标準中出現,則fromBlock與toBlock都不會允許出現。

params: [{
  "topics": ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]
}]
           

傳回值

參考eth_getFilterChanges

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'
           

結果參考eth_getFilterChanges

eth_getWork

傳回目前區塊的哈希,種子哈希seedHash以及邊界條件要滿足"target"

參數

none

傳回值

Array - 數組包含以下屬性:

1.DATA, 長32個位元組,表示目前區塊頭部pow-hash

2.DATA,長32個位元組,表示在DAG中使用的種子哈希

3.DATA,長32個位元組,表示邊界條件"target",2^256/difficulty

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": [
      "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
      "0x5EED00000000000000000000000000005EED0000000000000000000000000000",
      "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000"
    ]
}
           

eth_submitWork

用于送出一個工作量方案

參數

1.DATA, 8位元組長,表示發現的nonce值(64位)

2.DATA,32位元組長,表示頭部的pow-hash(256位)

3.DATA,32位元組長,表示混合消化(256位)

params: [
  "0x0000000000000001",
  "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"
]
           

傳回值

Boolean - 若提供的方案有效,則傳回true,反之傳回false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}'

// Result
{
  "id":73,
  "jsonrpc":"2.0",
  "result": true
}
           

eth_submitHashrate

用于送出挖礦哈希率

參數

1.Hashrate,一個表示哈希率的十六進制字元串,32個位元組長

2.ID,字元串,一個随機十六進制ID辨別用戶端 32位元組長。

params: [
  "0x0000000000000000000000000000000000000000000000000000000000500000",
  "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"
]
           

傳回值

Boolean - 若送出成功,傳回true,反之傳回false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":73}'

// Result
{
  "id":73,
  "jsonrpc":"2.0",
  "result": true
}
           

db_putString

将一個字元串存儲在本地資料庫

注意,該函數被廢棄且會在未來被删除

參數

1.String - 資料庫名

2.String - 鍵名

3.String - 要存儲的字元串

params: [
  "testDB",
  "myKey",
  "myString"
]
           

傳回值

Boolean - 若值被存儲,則傳回true,反之為false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": true
}
           

db_getString

從本地資料庫傳回字元串

注意,該函數在将來被廢棄删除

參數

1.String - 資料庫名

2.String - 鍵名

params: [
  "testDB",
  "myKey",
]
           

傳回值

String - 前面所存儲的字元串

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": "myString"
}
           

db_putHex

存儲二進制資料到本地資料庫

注意,将來會廢棄删除該函數

參數

1.String - 資料庫名

2.String - 鍵名

3.DATA - 要存儲的資料

params: [
  "testDB",
  "myKey",
  "0x68656c6c6f20776f726c64"
]
           

傳回值

Boolean - 若資料被存儲,則傳回true,反之,傳回false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","myKey","0x68656c6c6f20776f726c64"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": true
}
           

db_getHex

從資料庫讀出返二進制資料

注意,該函數在将來會被廢棄删除

參數

1.String - 資料庫名

2.String - 鍵名

params: [
  "testDB",
  "myKey",
]
           

傳回值

DATA - 之前存儲的資料

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","myKey"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": "0x68656c6c6f20776f726c64"
}
           

shh_version

傳回目前whisper協定版本

參數

none

傳回值

String - 目前whisper協定版本

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}'

// Result
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "2"
}
           

shh_post

發送一個whisper消息

參數

1.Object - whisper送出對象

from:DATA,60位元組長,可選的,發送者辨別符

to:DATA,60位元組長,可選的,接收者辨別符。若whisper對消息加密,則隻有接收者能對它解密

topics:DATA數組,DATA條目數組,以便接收者辨識消息

payload:DATA - 消息負載

priority:QUANTITY - 優先級範圍從...(?)開始,整型

ttl:QUANTITY - 存活時長,以秒為機關,整型

params: [{
  from: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",
  to: "0x3e245533f97284d442460f2998cd41858798ddf04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a0d4d661997d3940272b717b1",
  topics: ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  payload: "0x7b2274797065223a226d6",
  priority: "0x64",
  ttl: "0x64",
}]
           

傳回值

Boolean - 若消息被發送出去,則傳回true,反之傳回false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_post","params":[{"from":"0xc931d93e97ab07fe42d923478ba2465f2..","topics": ["0x68656c6c6f20776f726c64"],"payload":"0x68656c6c6f20776f726c64","ttl":0x64,"priority":0x64}],"id":73}'

// Result
{
  "id":1,
  "jsonrpc":"2.0",
  "result": true
}
           

shh_newIdentity

在用戶端建立新whisper

參數

none

傳回值

DATA,60位元組長,新辨別符位址

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newIdentity","params":[],"id":73}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xc931d93e97ab07fe42d923478ba2465f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca9007d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"
}
           

shh_hasIdentity

檢測用戶端是否為給定辨別儲存私鑰

參數

1.DATA,60位元組長,要檢測的辨別位址

params: [
  "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"
]
           

傳回值

Boolean - 若用戶端為辨別儲存私鑰,則傳回true,反之false

執行個體

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"shh_hasIdentity","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": true
}
           

參考網址

繼續閱讀