Ethereum JSON-Api 的使用

NO IMAGE

Ethereum的API介面型別

Ethereum官方提供了Go、python、C 和Parity四種語言的版本。四種語言都提供了JSON-RPC API,供使用者呼叫,可以通過geth RPC終端開啟。

在開啟geth的時候可以增加 --${interface}api新選項來選擇開啟哪一個api。${interface}的型別可以為 rpc開啟HTTP, ws開啟Web Scocket, ipc開啟Unix socket(Unix)或者named pipe(Windows)。

例如,geth --ipcapi admin, eth, miner --rpcapi eth,web3 --rpc

表示:開啟了admin,eth,miner功能的ipcAPI,開啟eth,web3功能的HTTP API。

其中HTTP RPC功能需要加上--rpc來啟用。


Ethereum JSON RPC的使用

開啟JSON RPC

預設的JSON-RPC埠

Cliet 1Url 2
Chttp://localhost:8545
Gohttp://localhost:8545
Pyhttp://localhost:4000
Parityhttp://localhost:8545

以go-ethereum為例,開啟JSON-RPC服務

開啟預設介面:

geth --rpc

自定義監聽埠和地址

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

如果需要從瀏覽器訪問RPC,則需要用適當的域名配置CORS。[這個好像是說跨域的。。。。]

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

同時,在geth consle裡面也可以通過輸入命令來開啟RPC服務 
>startRPC(addr,port)

呼叫Ethereum JSON RPC

介面型別

除了DApp Api的名稱空間(ethshhweb3)之外,geth還提供瞭如下API名稱空間

NamespaceUsage
adminGeth node management
debugGeth node debugging
minerMiner and DAG management
personalAccount management
txpoolTransaction pool inspection

呼叫格式

cur addr:port -X POST --data '{"jsonrpc":"2.0","id":id, "method":"${method}","params":"${params}"}'

ethereum-php

下載lib

git clone https://github.com/btelle/ethereum-php.git

deamon

// include the class file
require 'ethereum.php';
// create a new object
$ethereum = new Ethereum('127.0.0.1', 8545);
// do your thing
echo $ethereum->net_version();

常用操作

新建account

Ethereum的Account長度為20位元組,40個16進位制數字。

  • curl
cur -X POST --data {"id":${id}, "jsonrpc":"2.0","method":"personal_newAccount", "params":[${passphrase}]}
  • php

通過自己新增函式

echo $ethereum->personal_newAccount('passphrase');

查詢賬號

  • curl
curl addr:port -X POST --data '{"id":${id},"jsonrpc":"2.0","method":"eth_accounts", "params":[]}'

或者

curl addr:port -X POST --data '{"id":${id},"jsonrpc":"2.0","method":"personal_listAccounts", "params":[]}'
  • php
echo json_encode($ethereum->eth_accounts());

或者

echo json_encode($thereum->personal_listAccounts());

查詢餘額

  • curl

params:

@DATA, 20 bytes, address to check for balance

@Qutantity|TAG, int of block number, or “latestearliestpending

curl -X POST --data    '{"id":${id},"jsonrpc":"2.0","method":"eth_getBalance", "params":["0xb75b32047b7a9018964867a8bc6ef294659859c3","latest"]}' addr:port 
  • php
echo $ethereum->eth_getBalance('0xb75b32047b7a9018964867a8bc6ef294659859c3','latest',True);

傳送ETH 
– [x] tx: Transaction 
– [x] from: 發出的Account 
– [x] to: 接收的Account 
– [x] amount: 數量 
– [x] passphrase: tx.from的passphrase

  • curl
curl -X POST --data '{"id":${id}, "jsonrpc":"2.0", "method": "personal_sendTransaction", "params": [tx, string]}'

可用資源

https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sendtransaction

https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_protocolversion

https://ethereum.org/token#the-code

https://steemit.com/ethereum/@maxnachamkin/how-to-create-your-own-ethereum-token-in-an-hour-erc20-verified