マイニングと譲渡をHTTP経由で改めてやってみる（ethereum4）


前回はこちら。[マイニングと譲渡を改めてやってみる](http://qiita.com/joji/items/569eefea330eea95efe8 "マイニングと譲渡を改めてやってみる")

```bash
nohup geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /home/ubuntu/data_testnet --mine --minerthreads 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal, web3" 2>> /home/ubuntu/data_testnet/geth.log &
```

ユーザーのロックを外した状態で起動する場合は、こうします。

```bash
geth --networkid 4649 --nodiscover --maxpeers 0 --datadir /home/ubuntu/data_testnet --mine --minerthreads 1 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal, web3" --unlock 0 --verbosity 6 console 2>> /home/ubuntu/data_testnet/geth.log
```

パスワードを聞かれるので、入力しましょう

```shell-session
Unlocking account 0 | Attempt 1/3
Passphrase: 
Welcome to the Geth JavaScript console!
```


|サービスレベル|サービス名|
|:-----------|:------------|
|--rpc|HTTP-RPC サーバーを有効にします。|
|--rpcaddr "0.0.0.0"|HTTP-RPCサーバーの受け付けIPアドレスを指定します。デフォルトは、"localhost"です。"0.0.0.0"を指定すると、localhostだけでなく、どのインターフェースに対するアクセスも受け付けられます。|
|--rpcport 8545|HTTP-RPC サーバーの受け付けポートを指定します。デフォルトのポート番号は、8545です。|
|--rpccorsdomain "*"|あなたのノードにRPC接続する接続元のIPアドレスとポート番号を指定します。カンマ区切りで複 数指定できます。"*" を指定すると、全ての接続元からのアクセスを許可します。|
|--rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3"|RPCを許可するコマンドを指定します。カンマ区切りで複数指定できます。デフォルトは"eth,net,web3"です。|
|--unlock 0|アンロックするアカウントを指定します。eth.accounts[0] をアンロックする場合は、0を指定します。カンマ区切りで複数指定することもできます。|
|--verbosity 6|ログの出力レベルを指定します。0=silent, 1=error, 2=warn, 3=info, 4=core, 5=debug, 6=detail で、 デフォルトは、3です。ここでは、最も詳細な6を指定します。|


curlで、POSTを使って実行してみます。

|Geth command|API name|
|:-----------|:------------|
|personal.newAccount|personal_newAccount|
|eth.accounts|personal_listAccounts|
|eth.mining | eth_mining |
|eth.hashrate| eth_hashrate |
|eth.blockNumber|eth_blockNumber|
|eth.sendTransaction| eth_sendTransaction |
|personal.unlockAccount| personal_unlockAccount |

アカウント作成

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_newAccount","params": ["test1"],"id":1}' localhost:8545
```

アカウントのアドレスが、戻り値として返ってきます。

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8"}
```

現在のアカウントのリストの一覧を取得

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_listAccounts","params ":[],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":["0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b","0x32a39ca8fd074a9c1e49b77b6613ca5287592305","0x3b1a887c19bd3e39e926121db232f9376f2aebed","0xe2a98f7bfc8c08fffc8fdfbabc74e80a9ccb0c6f","0xa7732a8a03be095a4c51dd1174e1dc531b67751b","0x215f7b161e8708280ab8d31243045b9f3c442855","0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8"]}
```

マイニングを行う

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[], "id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":true}
```

ハッシュレートの確認

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[], "id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0xa1c4"}
```

10進数表記

```bash
printf '%d\n' "0xa1c4"
```

```shell-session
41412
```

ブロック番号の確認

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0x51c"}
```

10進数表記

```bash
printf '%d\n' "0x51c"
```

```shell-session
1308
```

残高の確認

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8", "latest"],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0x0"}
```
10進数で表記

```bash
printf '%d\n' "0x0"
```

```shell-session
0
```

送金をしてみる
残高があるか、他のアカウントを確認する。

```bash
 curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b", "latest"],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0x82ae2451964e199c000"}
```

送信側；"0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b"
受信側；"0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8"

送金する

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params": [{"from":"0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b","value":"0x1","to":"0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8"}],"id":1}' localhost:8545
```

アカウントがロックされている

```shell-session
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"account is locked"}}
```

ロックの解除

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_unlockAccount","params":["0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b", "test1", 300],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":true}
```

改めて送金

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params": [{"from":"0x127a0614d4f606460f3cb7e05f1b9f79fdf9191b","value":"0x1","to":"0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8"}],"id":1}' localhost:8545
```
トランザクションIDが返ってくる

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0xedbfe1eabfae28a29531a02c0ea3b6c61048d1b18b8287dd8fcdf35d2d0a667a"}
```

残高を改めて確認

```bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x165df023f3371858c1bd6fe27d6724a5f9ac5ab8", "latest"],"id":1}' localhost:8545
```

```shell-session
{"jsonrpc":"2.0","id":1,"result":"0x1"}
```