Inside IOST #02: iwalletで情報を取得する
Inside IOST for Developers
1. 情報取得コマンドを使う
iwalletを利用してIOSTから情報を取得してみましょう。
IOSTローカルサーバーとiwalletの準備がまだの人は先に#1を参考にして、準備をしてください。
1.1 情報取得系コマンド一覧
IOSTブロックチェーンから情報を取得するためのコマンドを紹介します。
1.2 ブロックチェーンとノードの情報の表示
--iserver
でノードサーバーを変更することができます。ここでは、127.0.0.1 でローカルサーバーですが、指定を変えれば実際のメインネットのノードの情報も取得できます。テスト用のチェーンということで、chainId が1020になっています。
$ docker exec -t iserver iwallet --server 127.0.0.1:30002 state
Connecting to server 127.0.0.1:30002 ...
{
"buildTime": "20220316_162717+0000",
"gitHash": "560ab682eac02b307074fd2a8c89258a337a9dcc",
"mode": "ModeNormal",
"network": {
"id": "12D3KooWKiTEDwhNDN6yp2dFNAnuuMRKjFQQCtpmY8wgFfTYQK9e",
"peerCount": 0
},
"codeVersion": "3.8.0",
"serverTime": "1655530091537746673",
"netName": "debugnet",
"protocolVersion": "1.0",
"chainId": 1020,
"headBlock": "4758",
"headBlockHash": "BnWon8h8ArWeymxaQrKZLxVmrc6DJgUmdnYr2jfp5Dij",
"libBlock": "4758",
"libBlockHash": "BnWon8h8ArWeymxaQrKZLxVmrc6DJgUmdnYr2jfp5Dij",
"witnessList": [
"6sNQa7PV2SFzqCBtQUcQYJGGoU7XaB6R4xuCQVXNZe6b"
],
"libWitnessList": [
"6sNQa7PV2SFzqCBtQUcQYJGGoU7XaB6R4xuCQVXNZe6b"
],
"pendingWitnessList": [
"6sNQa7PV2SFzqCBtQUcQYJGGoU7XaB6R4xuCQVXNZe6b"
],
"headBlockTime": "1655530091007481048",
"libBlockTime": "1655530091007481048"
}
ちなみに、実際のノードの例として、私が所属する会社の立てているノードの情報はこんな感じになっています。こちらはメインネットですので、chainId が1024になっています。上と比べると、ブロック数を表す headBlock もかなり大きな値になっていることが見て取れます。
{
"buildTime": "20220607_090845+0000",
"gitHash": "66fbcaefd34ec54328d925648c7f120bd3aad1d3",
"mode": "ModeNormal",
"network": {
"id": "12D3KooWJ5UTgXD47LvVAhUQPibdzwqm8Ax37Z59Wfx9aE382gYa",
"peerCount": 28
},
"codeVersion": "3.8.2",
"serverTime": "1655530521008869708",
"netName": "mainnet",
"protocolVersion": "1.0",
"chainId": 1024,
"headBlock": "205260947",
"headBlockHash": "2fexZfm3x2eqxuXzgY2HNB1Zs5KYZBKhCxhicNynG2cs",
"libBlock": "205260881",
"libBlockHash": "UAfym7EAg8F1jTM97qK6E1x8QtN9VXFmVz1MoqB6sG6",
"witnessList": [
"Ee37yz1MkrjvNQPyo7wX4fg6jEt4BLTg1ox2qAKegWPK",
"48GPqW3Wr6AAjVWVTkdwWYhBJqeiNRKDh4hja4BY8iQV",
"5TdgBDKV9FRk8Zt1LxLwswbZfUDBXQVgfJ9kDHM9t9do",
"6frvjXKU1Etv41sqyBjCHv3WeUhP21VR9PL4emJteFRX",
"GiUzmFkgK7ofvuxjSLMeL8nK46UXALDDeSPh31C18FRZ",
"EwF526EwcjSCZdGGeNpmXGmjeoQsRacGsPWUrCvcJ1MT",
"AfPVtfvJ3T4EEiiC1cScz4FVe2bATgK5CDC8bGVCRLwG",
"GGJWd9oBZAoojYQWppirzNDWADcCzCPLWeqe4VqgWMFU",
"8fDgTkb7spKSVLwwjX43HSpYkvMPrTMbW6z9Fq7qJDpP",
"QYht5Xpsb5tWwcP2asC6FRY7THy3SkBVr8vY8KshBHE",
"9PRK3iD2EhF2A9bFnnZWfUFw1cVQt3Rt6f8EDKhS2EcP",
"DCivSqzENUCrkcZ2sPaaGLKAhbP6n8wYfVoK9eSTxr3a",
"G5DPSoGy4J4y5ZzGQ5uPXbddJFCyzBzva2r5XjFSsNVa",
"2ex8BBQyempJT14QVzbWSCUYrPfUNJ3F6KMZcCnAMVbA",
"GpmxqAjTJZxc5eMVKuDSsG4thCH8KNfYVZQEhyodHWtZ",
"4GZhnzok6ameFjsa4ewVB72vN5Tg7MsbWJrorhAGgu2k",
"44QTEb7yNUJo7rZBHyuriEAZkdQPPZVp787Em6akr8m3"
],
"libWitnessList": [
"Ee37yz1MkrjvNQPyo7wX4fg6jEt4BLTg1ox2qAKegWPK",
"48GPqW3Wr6AAjVWVTkdwWYhBJqeiNRKDh4hja4BY8iQV",
"5TdgBDKV9FRk8Zt1LxLwswbZfUDBXQVgfJ9kDHM9t9do",
"6frvjXKU1Etv41sqyBjCHv3WeUhP21VR9PL4emJteFRX",
"GiUzmFkgK7ofvuxjSLMeL8nK46UXALDDeSPh31C18FRZ",
"EwF526EwcjSCZdGGeNpmXGmjeoQsRacGsPWUrCvcJ1MT",
"AfPVtfvJ3T4EEiiC1cScz4FVe2bATgK5CDC8bGVCRLwG",
"GGJWd9oBZAoojYQWppirzNDWADcCzCPLWeqe4VqgWMFU",
"8fDgTkb7spKSVLwwjX43HSpYkvMPrTMbW6z9Fq7qJDpP",
"QYht5Xpsb5tWwcP2asC6FRY7THy3SkBVr8vY8KshBHE",
"9PRK3iD2EhF2A9bFnnZWfUFw1cVQt3Rt6f8EDKhS2EcP",
"DCivSqzENUCrkcZ2sPaaGLKAhbP6n8wYfVoK9eSTxr3a",
"G5DPSoGy4J4y5ZzGQ5uPXbddJFCyzBzva2r5XjFSsNVa",
"2ex8BBQyempJT14QVzbWSCUYrPfUNJ3F6KMZcCnAMVbA",
"GpmxqAjTJZxc5eMVKuDSsG4thCH8KNfYVZQEhyodHWtZ",
"4GZhnzok6ameFjsa4ewVB72vN5Tg7MsbWJrorhAGgu2k",
"44QTEb7yNUJo7rZBHyuriEAZkdQPPZVp787Em6akr8m3"
],
"pendingWitnessList": [
"Ee37yz1MkrjvNQPyo7wX4fg6jEt4BLTg1ox2qAKegWPK",
"48GPqW3Wr6AAjVWVTkdwWYhBJqeiNRKDh4hja4BY8iQV",
"5TdgBDKV9FRk8Zt1LxLwswbZfUDBXQVgfJ9kDHM9t9do",
"6frvjXKU1Etv41sqyBjCHv3WeUhP21VR9PL4emJteFRX",
"GiUzmFkgK7ofvuxjSLMeL8nK46UXALDDeSPh31C18FRZ",
"EwF526EwcjSCZdGGeNpmXGmjeoQsRacGsPWUrCvcJ1MT",
"AfPVtfvJ3T4EEiiC1cScz4FVe2bATgK5CDC8bGVCRLwG",
"GGJWd9oBZAoojYQWppirzNDWADcCzCPLWeqe4VqgWMFU",
"8fDgTkb7spKSVLwwjX43HSpYkvMPrTMbW6z9Fq7qJDpP",
"QYht5Xpsb5tWwcP2asC6FRY7THy3SkBVr8vY8KshBHE",
"9PRK3iD2EhF2A9bFnnZWfUFw1cVQt3Rt6f8EDKhS2EcP",
"DCivSqzENUCrkcZ2sPaaGLKAhbP6n8wYfVoK9eSTxr3a",
"G5DPSoGy4J4y5ZzGQ5uPXbddJFCyzBzva2r5XjFSsNVa",
"2ex8BBQyempJT14QVzbWSCUYrPfUNJ3F6KMZcCnAMVbA",
"GpmxqAjTJZxc5eMVKuDSsG4thCH8KNfYVZQEhyodHWtZ",
"4GZhnzok6ameFjsa4ewVB72vN5Tg7MsbWJrorhAGgu2k",
"44QTEb7yNUJo7rZBHyuriEAZkdQPPZVp787Em6akr8m3"
],
"headBlockTime": "1655530520500457737",
"libBlockTime": "1655530487500631327"
}
1.3 ブロック情報の表示
ブロックを表示するには、次のようにします。オプション —-method
で num ならブロック番号、hash ならブロックハッシュ値で指定ができます。methodを省略するとブロック番号指定になります。
iwallet block --method num <ブロック番号>
または
iwallet block --method hash <ブロックハッシュ>
ここでは、0 で先頭のブロックの情報を表示しています。
$ docker exec -t iserver iwallet block --method num 0
Connecting to server localhost:30002 ...
{
"status": "IRREVERSIBLE",
"block": {
"hash": "AqjYPgnNFgNuZBUe6z49xWUVCi6JsQku7GFaX3k9XRnP",
"version": "0",
"parentHash": "",
"txMerkleHash": "4Y3HrMWu3z8XrbrvPSk7rSxoJxtfausJCHQS9VMr9kS1",
"txReceiptMerkleHash": "CNcQ8PWEZAbBwPxvHQ4icsRWVQB3kBgUATirVza6DbCA",
"number": "0",
"witness": "0",
"time": "1541847845000000000",
"gasUsage": 0,
"txCount": "1",
"info": null,
"origInfo": "",
"transactions": []
}
}
同じ情報をブロックハッシュで表示してみます。
$ docker exec -t iserver iwallet block --method hash AqjYPgnNFgNuZBUe6z49xWUVCi6JsQku7GFaX3k9XRnP
Connecting to server localhost:30002 ...
{
"status": "IRREVERSIBLE",
"block": {
"hash": "AqjYPgnNFgNuZBUe6z49xWUVCi6JsQku7GFaX3k9XRnP",
"version": "0",
"parentHash": "",
"txMerkleHash": "4Y3HrMWu3z8XrbrvPSk7rSxoJxtfausJCHQS9VMr9kS1",
"txReceiptMerkleHash": "CNcQ8PWEZAbBwPxvHQ4icsRWVQB3kBgUATirVza6DbCA",
"number": "0",
"witness": "0",
"time": "1541847845000000000",
"gasUsage": 0,
"txCount": "1",
"info": null,
"origInfo": "",
"transactions": []
}
}
status では、次の状態を表しています。
- PENDING — 処理中
- PACKED — パックされたが未確認
- IRREVERSIBLE — パックされたブロックがファイナライズ済み(元に戻せない)
1.4 トランザクション情報の表示
処理したトランザクションの情報を表示します。
iwallet transaction <トランザクションハッシュ>
- <トランザクションハッシュ> : トランザクションのハッシュ値を指定
実際の例を挙げておきます。
$ docker exec -t iserver iwallet transaction 5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU
Connecting to server localhost:30002 ...
{
"status": "IRREVERSIBLE",
"transaction": {
"hash": "5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU",
"time": "1655560642339995424",
"expiration": "1655560732339995424",
"gasRatio": 1,
"gasLimit": 1000000,
"delay": "0",
"chainId": 1020,
"actions": [
{
"contract": "system.iost",
"actionName": "setCode",
"data": "[\"{\\\"info\\\":{\\\"lang\\\":\\\"javascript\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"abi\\\":[{\\\"name\\\":\\\"say\\\",\\\"args\\\":[\\\"string\\\"]}]},\\\"code\\\":\\\"class Hello {\\\\n init() {}\\\\n say(to) {\\\\n return \\\\\\\"Hi, \\\\\\\" + to + \\\\\\\".\\\\\\\"\\\\n }\\\\n}\\\\nmodule.exports = Hello;\\\\n\\\"}\"]"
}
],
"signers": [],
"publisher": "admin",
"referredTx": "",
"amountLimit": [
{
"token": "*",
"value": "unlimited"
}
],
"txReceipt": {
"txHash": "5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU",
"gasUsage": 243792,
"ramUsage": {
"admin": "497"
},
"statusCode": "SUCCESS",
"message": "",
"returns": [
"[\"Contract5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU\"]"
],
"receipts": []
}
},
"blockNumber": "31158"
}
1.5 レシート情報の表示
トランザクションのレシートを表示します。
iwallet receipt <トランザクションハッシュ>
- <トランザクションハッシュ> : トランザクションのハッシュ値を指定
実際の例を挙げておきます。
$ docker exec -t iserver iwallet receipt 5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU
Connecting to server localhost:30002 ...
{
"txHash": "5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU",
"gasUsage": 243792,
"ramUsage": {
"admin": "497"
},
"statusCode": "SUCCESS",
"message": "",
"returns": [
"[\"Contract5dfmdqjqn1uYN3EcbvVWoZZ4wCS3TVAKSNEimRvjtMVU\"]"
],
"receipts": []
}
1.6 ストレージ情報の表示
iwallet table <コントラクト> <キー> <フィールド>
- <コントラクト> : コントラクトを指定します。自作のこのコントラクトでもシステムコントラクトでもかまいません。
- <キー>: ストレージの保存されているキーを指定します。キーに値がある場合は、この値だけで結果が表示できます。
- <フィールド>: キーに複数の値がある場合のフィールドを指定します。その場合は、キーもフィールドも指定しなければなりません。
次はキーのみの例で、システムコントラクトの auth.iost の キー adminID の値を表示しています。取得できるのは、チェーンの管理者アカウント名です。
$ docker exec -t iserver iwallet table auth.iost adminID
Connecting to server localhost:30002 ...
{
"data": "admin",
"blockHash": "9TZMSkiH9PNZryk4eDk3gaYimDyz9f3yrRXoHJwSgiMr",
"blockNumber": "10938"
}
次はキーとフィールドを指定する例で、システムコントラクトの auth.iost の キー auth のフィールドadminを表示しています。取得できるのは、ストレージに保存されているアカウント情報です。
$ docker exec -t iserver iwallet table auth.iost auth admin
Connecting to server localhost:30002 ...
{
"data": "{\"id\":\"admin\",\"referrer\":\"deadaddr\",\"permissions\":{\"active\":{\"name\":\"active\",\"groups\":[],\"items\":[{\"id\":\"Gcv8c2tH8qZrUYnKdEEdTtASsxivic2834MQW6mgxqto\",\"is_key_pair\":true,\"weight\":100}],\"threshold\":100},\"owner\":{\"name\":\"owner\",\"groups\":[],\"items\":[{\"id\":\"Gcv8c2tH8qZrUYnKdEEdTtASsxivic2834MQW6mgxqto\",\"is_key_pair\":true,\"weight\":100}],\"threshold\":100}},\"groups\":{}}",
"blockHash": "98vNNoxyvWECv1as8fg5kHPGqYfrB5R6pjLfxw4W3W6p",
"blockNumber": "10234"
}