BLOCKCHAIN INTEGRATION ブロックチェーン統合

Integration Overview
This section contains documentation and examples which demonstrate how to install and run the Theta Blockchain Node software on a Linux machine. It also include...

統合の概要

このセクションには、Linux マシンに Theta Blockchain Node ソフトウェアをインストールして実行する方法を示すドキュメントと例が含まれています。また、ブロックチェーン RPC API リファレンスと Java/Javascript 統合の例も含まれています。


ドキュメンテーション

  • セットアップとインストール:セットアップとインストールのガイドでは、Linux マシンに Theta ブロックチェーン ノード ソフトウェアをビルドしてインストールし、テスト用にローカル プライベート ネットを起動する手順を説明しています。
  • CMD ツール:コマンド ライン ツール ガイドは、Theta コマンドライン インターフェイスを介して Theta ブロックチェーン ノードとやり取りする方法を示しています。
  • テストネット/メインネット: テストネットとメインネットの統合ガイドには、 Thetaノードを起動し、テストネットとメインネットにそれぞれ接続する手順が含まれています。
  • RPC API : API リファレンスには、Theta ブロックチェーン ノードの RPC API がリストされています。
  • Explorer API : Explorer API リファレンスには、Theta Explorer によって提供される API がリストされています。
  • 構成:構成ガイドでは、Theta ブロックチェーン ノードの構成に関する詳細を提供します。

デモ

また、GitHub でいくつかの統合デモを提供しています。

  • keypair : keypair デモは、バッチでキー ペア (秘密キーと対応するアドレス) をすばやく生成する方法を示す Java プログラムです。
  • tx : Java と JavaScript の両方でtx デモを提供しています。1) トランザクションを構築する方法、2) オフラインでトランザクションに署名してシリアル化する方法、3) 署名されたトランザクションを Theta ブロックチェーンにブロードキャストする方法を示します。
  • api : api デモは、RPC インターフェイスを介して Theta ブロックチェーン ノードと対話する方法を示す Java プログラムです。

セットアップとインストール

準備

Go をインストールし、環境変数、、およびを設定します。現在のコード ベースは、Linux のようなシステム (つまり、Ubuntu、Mac OS X) 上の Go 1.14.1 でコンパイルする必要があります。以下は、Go 1.14.1 をインストールし、Ubuntu で環境をセットアップする手順です。GOPATHGOBINPATHシェル

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install gccsudo apt-get install makesudo apt-get install gitsudo apt-get install -y bzr
sudo apt-get install jq
sudowget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.1.linux-amd64.tar.gz
echo'export GOROOT=/usr/local/go' >> ~/.bashrc
echo'export GOPATH=$HOME/go' >> ~/.bashrc
echo'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc
echo'export THETA_HOME=$GOPATH/src/github.com/thetatoken/theta' >> ~/.bashrc
source ~/.bashrc

次に、次のコマンドを使用して、Theta Ledger リポジトリhttps://github.com/thetatoken/theta-protocol-ledgerのブランチをクローンします。パスは次のようになります。release$GOPATH$GOPATH/src/github.com/thetatoken/thetaシェル

git clone --branch release https://github.com/thetatoken/theta-protocol-ledger.git $GOPATH/src/github.com/thetatoken/theta

特記事項

上記のコマンドは、コード ベースのブランチを複製します。ブランチには、Theta Mainnet に接続するための特別な設定があります。代わりにTestnet に接続する場合は、ブランチを複製してください。ローカル プライベート ネットを立ち上げたい場合は、ブランチをクローンしてください。releasereleasetestnetprivatenet

ビルドとインストール

以下のコマンドを実行してください。これにより、バイナリがビルドされ、. 2 つのバイナリとが生成されます。Theta Ledger ノードのランチャーと見なすことができ、台帳と対話するためのコマンド ライン ツールを備えたウォレットです。$GOPATH/binthetathetaclithetathetacliシェル

exportGO111MODULE=on
cd$THETA_HOMEmake install

ローカル プライベート ネットを起動する

編集を提案

ステップ 1. セットアップ

セットアップとインストールの手順に従って、Theta ブロックチェーン ノード ソフトウェアをビルドしてインストールします。特記事項に記載されているように、最新のブランチをコンパイルしていることを確認してください。次に、以下のコマンドを実行して環境をセットアップします。privatenetシェル

cd$THETA_HOMEcp-r ./integration/privatenet ../privatenet
mkdir ~/.thetacli
cp-r ./integration/privatenet/thetacli/* ~/.thetacli/
chmod700 ~/.thetacli/keys/encrypted

ステップ 2. ローカル プライベート ネットを起動する

次に、次のコマンドを使用して、単一のバリデータ ノードでプライベート ネットを起動します。シェル

theta start--config=../privatenet/node

プロンプトでパスワードを要求されたら、単純に入力します。この単純なパスワードは、ローカル プライベート ネットのデモ用であることに注意してください。ノードをTheta メインネット用にセットアップするときは、強力なパスワードを使用してください。qwertyuiop

: または、次のオプションを使用してパスワードを渡すこともできます。--passwordシェル

theta start--config=../privatenet/node --password=qwertyuiop

テストネットに接続する

Theta Labs は、パートナーのテストを容易にするために、メインネットに似たテストネット環境を維持しています。テストネットに接続するには、ターミナルを開き、次の手順に従います。

ステップ 1. セットアップ

セットアップとインストールの手順に従って、Theta ブロックチェーン ノード ソフトウェアをビルドしてインストールします。特記事項に記載されているように、最新のブランチをコンパイルしていることを確認してください。次に、以下のコマンドを実行して環境をセットアップします。testnetシェル

cd$THETA_HOMEmkdir ../testnet
cp-r ./integration/testnet/walletnode ../testnet

ステップ 2. テストネットを起動して接続する

screen または tmux セッションを開始し、次のコマンドを使用してノードを起動し、Theta テストネットに接続します。ブロックチェーン データをダウンロードしてネットワークと同期するには、時間がかかる場合があります。シェル

theta start--config=../testnet/walletnode

注: testnet Theta Node を初めて起動するときは、ノードのアドレスを生成するためのパスワードを選択する必要があります。安全なパスワードを選択し、安全な場所に保管してください。次にノードを再起動するときに、ロックを解除するためにパスワードが必要になります。

メインネットに接続する

Theta メインネットは 2019 年 3 月 15 日にローンチされました。メインネットに接続するには、ターミナルを開き、以下の手順に従います。

ステップ 1. セットアップ

セットアップとインストールの手順に従って、Theta ブロックチェーン ノード ソフトウェアをビルドしてインストールします。特記事項に記載されているように、最新のブランチをコンパイルしていることを確認してください。次に、次のコマンドを実行して、構成ファイルとTheta メインネットの最新のスナップショットをダウンロードします。release

注:これが初めてでない場合は、フォルダーにキー ファイルのバックアップがあることを確認してください。../mainnet/walletnode/key/encryptedシェル

exportTHETA_HOME=$GOPATH/src/github.com/thetatoken/theta
cd$THETA_HOMEmkdir-p ../mainnet/walletnode
curl-k--output ../mainnet/walletnode/config.yaml `curl -k 'https://mainnet-data.thetatoken.org/config?is_guardian=true'`wget-O ../mainnet/walletnode/snapshot `curl -k https://mainnet-data.thetatoken.org/snapshot`

ステップ 2. メインネットを起動して接続する

screen または tmux セッションを開始し、次のコマンドを使用してノードを起動し、Theta メインネットに接続します。ブロックチェーン データをダウンロードしてネットワークと同期するには、時間がかかる場合があります。シェル

theta start--config=../mainnet/walletnode

注:メインネットの Theta ノードを初めて起動するときは、ノードのアドレスを生成するためのパスワードを選択する必要があります。

  1. 安全なパスワードを選択し、安全な場所に保管してください。
  2. フォルダ ../mainnet/walletnode/key/encrypted にキー ファイルのバックアップを作成し、安全な場所に保管してください。

次にノードを再起動するときに、ロックを解除するためにパスワードが必要になります。

次のコマンドを使用して、次回メインネットを起動して接続します。シェル

exportTHETA_HOME=$GOPATH/src/github.com/thetatoken/theta
cd$THETA_HOME
theta start--config=../mainnet/walletnode

コマンド ライン ツール

Theta 台帳ソフトウェアは、ユーザーが Theta 台帳を操作するためのコマンド ライン ウォレット ツールを提供します。以下は、2 つのアドレス間でトークンを送信する例です。thetacli

トークンの送受信

Theta 台帳を構築すると、2 つのバイナリとが生成されます。Theta Ledger ノードのランチャーと見なすことができ、台帳と対話するためのコマンド ライン ツールを備えたウォレットです。コマンド ライン ツールを使用して、あるアドレスから別のアドレスに Theta トークンを送信できます。thetathetaclithetathetaclithetacli

以下の例は、ローカル プライベート ネットに対して使用して Theta/TFuel トークンを送信する方法を示しています。ターミナルを開き、次のコマンドを実行します。プロンプトでパスワードを要求されたら、単純に入力します。この単純なパスワードは、送信者のデモ用であることに注意してください。独自のウォレットを生成するときは、強力なパスワードを使用してください。thetacliqwertyuiop2E833968E5bB786Ae419c4d13189fB081Cc43babシェル

thetacli tx send --chain="privatenet"--from=2E833968E5bB786Ae419c4d13189fB081Cc43bab --to=9F1233798E905E173560071255140b4A8aBd3Ec6 --theta=10--seq=1

アドレスの残高は、トランザクションがブロックチェーンに含まれた後、次のクエリ コマンドで取得できます (数秒かかる場合があります)。シェル

thetacli query account --address=9F1233798E905E173560071255140b4A8aBd3Ec6

次に、さらに 20 個の Theta トークンを送信します。パラメータを 2にインクリメントする必要があることに注意してください。パラメータは、イーサリアム トランザクションのパラメータと同様に、各アカウントのトランザクション カウンタです。アカウントからトークンを送信するたびに、 を1 ずつ増やす必要があります。seqseqnonceseqシェル

thetacli tx send --chain="privatenet"--from=2E833968E5bB786Ae419c4d13189fB081Cc43bab --to=9F1233798E905E173560071255140b4A8aBd3Ec6 --theta=20--seq=2

受取人アドレスを再度照会して、口座残高の変更を確認できます。シェル

thetacli query account --address=9F1233798E905E173560071255140b4A8aBd3Ec6

アカウント/ウォレット管理

Theta コマンド ライン ツールは、暗号化されたキーで複数のアカウントを管理できるウォレットとして使用できます。以下は、関連するコマンドです。

  • thetacli key newパスワード付きの新しいアカウントを作成します。新しく作成されたキーは暗号化され、デフォルトで ~/.thetacli/keys/encrypted/ に保存されます
  • thetacli key list ウォレットで管理されているすべてのアカウントを一覧表示します。
  • thetacli key passwordアカウントのパスワードをリセットします。リセットには現在のパスワードが必要です。
  • thetacli key deleteアカウントを削除します。削除にはアカウントのパスワードが必要です。

CLI コマンドのドキュメント

コマンドラインツールの詳しい使い方は以下のリンクを参照してください。

RPC API リファレンス

Theta は 2 セットの RPC API を提供します。この分割の理論的根拠は、すべてのユーザーがアクセスできるパブリック インターフェイスと、特定のユーザーのプライベート ウォレットを管理する個人用インターフェイスを分離することです。

Theta APIはTheta Node によって提供されます。これは、ユーザーがシータ ノードと直接やり取りできる RPC インターフェースです。セットアップ ガイドに記載されているように、Theta Node は次のコマンドで起動できます。デフォルトでは、Theta ノードは RPC サーバーをポート 16888 で実行します。

theta start --config=<path/to/config/folder>

ThetaCli APIは、ThetaCli Daemon によって提供されます。これにより、ユーザーは RPC 呼び出しを介して個人の Theta ウォレットと対話できます。ウォレットは複数のアカウントを同時に管理できます。アカウントの暗号化された秘密鍵は、デフォルトで ~/.thetacli/keys/encrypted/ に保存されます。RPC API は、アカウントの作成、ロック/ロック解除、および Theta/TFuel の送信をサポートしています。ThetaCli Daemon は、次のコマンドで実行できます。ポート パラメータが指定されていない場合、デフォルトではポート 16889 で実行されます。ThetaCli デーモンの機能の一部は、Theta ノードに依存することに注意してください。したがって、ThetaCli デーモンを起動するときに、Theta ノードを実行する必要があります。

thetacli daemon start --port=

以下の例では、読者がセットアップ ガイドに従って、ローカル マシンのポート 16888 とポート 16889 で Theta Node と ThetaCli Daemon の両方を起動したことを前提としています。

また、DApp 開発を容易にする JavaScript SDK Theta.js も実装しました。詳しくはこちらをご覧ください

シータ API

クエリ API

GetVersion

この API は、ブロックチェーン ソフトウェアのバージョンを返します。

RPC メソッド: theta.GetVersion

戻り値

  • version: バージョン番号
  • git_hash: コードベースの git commit ハッシュ
  • タイムスタンプ: ビルドのタイムスタンプ

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetVersion","params":[],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "version": "1.0",
        "git_hash": "9d7669a735063a283ae8b6f0826183e3830c00a5",
        "timestamp": "Tue Feb 19 23:31:32 UTC 2019"
    }
}

アカウントを取得

この API は、照会されているアカウントの詳細を json 形式で返します。

RPC メソッド: theta.GetAccount

クエリ パラメータ

  • address: アカウントのアドレス

戻り値

  • code: スマート コントラクト バイトコードのハッシュ (スマート コントラクト アカウント用)
  • コイン: ネイティブのトークン残高
  • reserved_funds: オフチェーンのリソース指向の支払いプールを通じてマイクロペイメント用に予約された資金
  • root: データ Merkle-Patricia トライのルート ハッシュ (スマート コントラクト アカウント用)
  • sequence: アカウントの現在のシーケンス番号

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetAccount","params":[{"address":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab"}],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "sequence": "1",
        "coins": {
            "thetawei": "994999990000000000000000000",
            "tfuelwei": "4999999979999999000000000000"
        },
        "reserved_funds": [],
        "last_updated_block_height": "0",
        "root": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "code": "0x0000000000000000000000000000000000000000000000000000000000000000"
    }
}

GetBlock

この API は、クエリされているブロックを json 形式で返します。

RPC メソッド: theta.GetBlock

クエリ パラメータ

  • hash: ブロックハッシュ
  • include_eth_tx_hashes: 応答にスマート コントラクト トランザクションの ETH tx ハッシュを含めるかどうか。

戻り値

  • chain_id: チェーンの ID
  • epoch: ブロックのエポック
  • 高さ: ブロックの高さ
  • parent: 親ブロックのハッシュ
  • transactions_hash: トランザクション Merkle-Patricia トライのルート ハッシュ
  • state_hash: 州のマークル パトリシア トライのルート ハッシュ
  • タイムスタンプ: ブロックが提案されたときのタイムスタンプ
  • 提案者: 提案者バリデーターのアドレス
  • 子: 子ブロック
  • hash: ブロックハッシュ
  • transactions: ブロックに含まれるトランザクションの json 表現
  • raw: トランザクションの詳細
  • type: トランザクションのタイプ (以下のトランザクション タイプの注を参照)
  • hash: トランザクションのハッシュ
  • status: ブロックのステータス (以下のブロック ステータスの注記を参照)
取引の種類

文章

0: coinbase transaction, for validator/guardian reward
1: slash transaction, for slashing malicious actors
2: send transaction, for sending tokens among accounts
3: reserve fund transaction, for off-chain micropayment
4: release fund transaction, for off-chain micropayment
5: service payment transaction, for off-chain micropayment
6: split rule transaction, for the "split rule" special smart contract
7: smart contract transaction, for general purpose smart contract
8: deposit stake transaction, for depositing stake to validators/guardians
9: withdraw stake transaction, for withdrawing stake from validators/guardians
ブロック ステータス

文章

0: pending 
1: valid
2: invalid
3: committed
4: directly finalized
5: indirectly finalized
6: trusted (the first block in a verified snapshot is marked as trusted)

ブロックのステータスが 4、5、または 6 の場合、ブロックとブロックに含まれるすべてのトランザクションは、バリデーターによってファイナライズ済みと見なされます。文章

Block status transitions:

+-------+          +-------+                          +-------------------+
|Pending+---+------>Invalid|                    +----->IndirectlyFinalized|
+-------+   |      +-------+                    |     +-------------------+
            |                                   |
            |      +-----+        +---------+   |     +-----------------+
            +------>Valid+-------->Committed+---+----->DirectlyFinalized|
                   +-----+        +---------+         +-----------------+
GetBlock の例

この例では、 hash を使用してブロックをクエリしました。このブロックには 2 つのトランザクションが含まれています。1 つ目は「coinbase」トランザクション (タイプ 0) で、2 つ目は「send」トランザクション (タイプ 2) です。特に、「送信」トランザクションでは、 addressは 10 個の Theta トークンと 20 個の TFuel トークンを address に送信しましたが、これには 1000000000000 TFuelWei トランザクション手数料がかかりました。0x9f1e77b08c9fa8984096a735d0aae6b0e43aee297e42c54ce36334103ddd67a70x2e833968e5bb786ae419c4d13189fb081cc43bab0x9f1233798e905e173560071255140b4a8abd3ec6シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetBlock","params":[{"hash":"0x9f1e77b08c9fa8984096a735d0aae6b0e43aee297e42c54ce36334103ddd67a7", "include_eth_tx_hashes":false}],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "chain_id": "privatenet",
        "epoch": "5",
        "height": "3",
        "parent": "0x724b0f68d8e45f930b95bac224fa7d67eef243307b4e84f0f666198d1d70e9d7",
        "transactions_hash": "0x2bf2c62185fceed239a55bd27ada030cf75970f09122addb2e419e70cafebdf0",
        "state_hash": "0xd41742c2b0d70e3bac1d88b2af69a2491d8c65c650af6ec4d2b8873897f8becc",
        "timestamp": "1548102762",
        "proposer": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
        "children": ["0x21d3c2bb25d0c85a1f5c3ff81bc7eeae998bf98db1dba461fb3f69a434feb90c"],
        "status": 4,
        "hash": "0x9f1e77b08c9fa8984096a735d0aae6b0e43aee297e42c54ce36334103ddd67a7",
        "transactions": [{
            "raw": {
                "proposer": {
                    "address": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
                    "coins": {
                        "thetawei": "0",
                        "tfuelwei": "0"
                    },
                    "sequence": "0",
                    "signature": "0x31af035f0dc47ded00eb5139fd5e4bb76f82e89e29adae60df1277a25b0c7b135b097502ff0aa66249a423d22f291804a9e178af59c24ccbf1af2f58b83964ef00"
                },
                "outputs": [{
                    "address": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
                    "coins": {
                        "thetawei": "0",
                        "tfuelwei": "0"
                    }
                }],
                "block_height": "2"
            },
            "type": 0,
            "hash": "0x642f7d70680eefcc34f750cd6e03b57035f197baeabfa8e8420f55d994f5265f"
        }, {
            "raw": {
                "fee": {
                    "thetawei": "0",
                    "tfuelwei": "1000000000000"
                },
                "inputs": [{
                    "address": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
                    "coins": {
                        "thetawei": "10000000000000000000",
                        "tfuelwei": "20000001000000000000"
                    },
                    "sequence": "1",
                    "signature": "0x2f8f17b13c07e57d4c5d2c89e87d9e608f0eff22ef1f96eed5647b063265450216ef4f7a8578bf702cf26db00fb2e758521873bb1b68528325c84b59a2debc7400"
                }],
                "outputs": [{
                    "address": "0x9f1233798e905e173560071255140b4a8abd3ec6",
                    "coins": {
                        "thetawei": "10000000000000000000",
                        "tfuelwei": "20000000000000000000"
                    }
                }]
            },
            "type": 2,
            "hash": "0xf3cc94af7a1520b384999ad106ade9738b6cde66e2377ceab37067329d7173a0"
        }]
    }
}

GetBlockByHeight

この API は、指定された高さのファイナライズされたブロックを返します。指定された高さのブロックが (直接的または間接的に) ファイナライズされていない場合、API は単に空の結果を返します。

RPC メソッド: theta.GetBlockByHeight

クエリ パラメータ

  • 高さ: ブロックの高さ (整数ではなく文字列として渡す必要があります)
  • include_eth_tx_hashes: 応答にスマート コントラクト トランザクションの ETH tx ハッシュを含めるかどうか。

戻り値

GetBlock API のリターンに似ています。上記をご覧ください。

この例では、高さ 3 のブロックをクエリします。結果は、GetBlock API の結果に似ています。シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetBlockByHeight","params":[{"height":"3", "include_eth_tx_hashes":false}],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "chain_id": "privatenet",
        "epoch": "5",
        "height": "3",
        "parent": "0x724b0f68d8e45f930b95bac224fa7d67eef243307b4e84f0f666198d1d70e9d7",
        "transactions_hash": "0x2bf2c62185fceed239a55bd27ada030cf75970f09122addb2e419e70cafebdf0",
        "state_hash": "0xd41742c2b0d70e3bac1d88b2af69a2491d8c65c650af6ec4d2b8873897f8becc",
        "timestamp": "1548102762",
        "proposer": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
        "children": ["0x21d3c2bb25d0c85a1f5c3ff81bc7eeae998bf98db1dba461fb3f69a434feb90c"],
        "status": 4,
        "hash": "0x9f1e77b08c9fa8984096a735d0aae6b0e43aee297e42c54ce36334103ddd67a7",
        "transactions": [...]
    }
}

GetTransaction

この API は、照会されているトランザクションを json 形式で返します。

RPC メソッド: theta.GetTransaction

クエリパラメータ

  • hash: トランザクション ハッシュ*

戻り値

  • block_hash: トランザクションを含むブロックのハッシュ
  • block_height: トランザクションを含むブロックの高さ
  • status: トランザクションのステータス
  • hash: トランザクション自体のハッシュ
  • transaction: トランザクションの詳細

GetTransaction の例 1

この例では、照会されているトランザクションは「送信トランザクション」です (つまり、タイプ 2、トランザクション タイプを参照してください。このトランザクションでは、アドレスは 10 シータ トークンと 20 TFuel トークンをアドレス に送信しました。これには 1000000000000 TFuelWei トランザクション手数料がかかります。0x2e833968e5bb786ae419c4d13189fb081cc43bab0x9f1233798e905e173560071255140b4a8abd3ec6シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetTransaction","params":[{"hash":"0xf3cc94af7a1520b384999ad106ade9738b6cde66e2377ceab37067329d7173a0"}],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "block_hash": "0x9f1e77b08c9fa8984096a735d0aae6b0e43aee297e42c54ce36334103ddd67a7",
        "block_height": "3",
        "status": "finalized",
        "hash": "0xf3cc94af7a1520b384999ad106ade9738b6cde66e2377ceab37067329d7173a0",
        "transaction": {
            "fee": {
                "thetawei": "0",
                "tfuelwei": "1000000000000"
            },
            "inputs": [{
                "address": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
                "coins": {
                    "thetawei": "10000000000000000000",
                    "tfuelwei": "20000001000000000000"
                },
                "sequence": "1",
                "signature": "0x2f8f17b13c07e57d4c5d2c89e87d9e608f0eff22ef1f96eed5647b063265450216ef4f7a8578bf702cf26db00fb2e758521873bb1b68528325c84b59a2debc7400"
            }],
            "outputs": [{
                "address": "0x9f1233798e905e173560071255140b4a8abd3ec6",
                "coins": {
                    "thetawei": "10000000000000000000",
                    "tfuelwei": "20000000000000000000"
                }
            }]
        }
    }
}

GetTransaction の例 2

スマート コントラクト トランザクションは、TFuel の送信に使用できます。たとえば、ここの手順に従って Metamask を使用して TFuel を送信する場合、TFuel はスマート コントラクト トランザクションを通じて送信されます。トランザクションの詳細で、受信者アドレスに送信された TFuel の量 (Wei で) を指定します (詳細については以下を参照してください)。ETH と同様に、一部のスマート コントラクト トランザクションは、スマート コントラクトとやり取りするだけです。彼らはコントラクトにTFUELを送ることはできません。これは、TFuel を送信しなかったスマート コントラクト トランザクションです。一方、これはゼロ以外の TFuel 値を持つスマート コントラクト トランザクションです。この例では、トランザクションは 702.8783 TFUEL を受信者アドレスに送信します。transaction.from.coins.tfuelwei0x8366537d56cf2b86ca90e9dbc89450207a29f6e3

次の例は、”スマート コントラクト トランザクション” (つまり、タイプ 7、トランザクション タイプを参照) の詳細を照会する方法を示しています。このタイプのトランザクションは、イーサリアム トランザクションに似ています。

  • transaction.from.addressトランザクションの送信者アドレスです
  • transaction.to.addressトランザクションの受信者アドレスです。通常のウォレットでもスマートコントラクトアドレスでもかまいません
  • transaction.from.coins.tfuelwei受信側アドレスに送信される TFuel の量 (単位は wei、つまり 10e-18 TFuel) です。これは、イーサリアム トランザクションのフィールドに対応します。以下の例では、送信者は 250000000000000000000 TFuelWei (つまり 250 TFuel) を受信者アドレスに送信しています。value
  • transaction.gas_limitおよびは、イーサリアム トランザクションの対応するフィールドと同様に、トランザクションのガス制限とガス価格です。transaction.gas_price
  • transaction.dataEthereum トランザクションのフィールドと同様に、任意のデータを含めるためのオプション フィールドです。data
  • receiptEthereum トランザクションの領収書と同様に、イベント ログを含む、トランザクションによって生成された領収書です。

: を使用して、ブロック内のすべてのトランザクションを取得することもできます。応答のトランザクションの詳細には、上記のフィールドも含まれている必要があります。theta.GetBlocktheta.GetBlockシェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetTransaction","params":[{"hash":"0x191b8da0fce91430b6b430405323d26025cb8602c5485c4a259c113f860725ab"}],"id":1}' http://localhost:16888/rpc

// Result
{
    "block_hash": "0xb404521b57caec85449f9e328e8c93e418ffd69b6b22da42f040e1b906491dc0",
    "block_height": "13594165",
    "hash": "0x191b8da0fce91430b6b430405323d26025cb8602c5485c4a259c113f860725ab",
    "receipt": {
        "ContractAddress": "0xc357a28c0285f6c45a7ff7e8c4cc92fad0b34114",
        "EvmErr": "",
        "EvmRet": "",
        "GasUsed": 182650,
        "Logs": [
            {
                "address": "0xc357a28c0285f6c45a7ff7e8c4cc92fad0b34114",
                "data": "",
                "topics": [
                    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                    "0x0000000000000000000000000000000000000000000000000000000000000000",
                    "0x00000000000000000000000029917bf58d80815e3dd93b7e4441b405e3d41588",
                    "0x00000000000000000000000000000000000000000000000000000000000000cb"
                ]
            }
        ],
        "TxHash": "0x191b8da0fce91430b6b430405323d26025cb8602c5485c4a259c113f860725ab"
    },
    "status": "finalized",
    "transaction": {
        "data": "QNCXwwAAAAAAAAAAAAAAACmRe/WNgIFePdk7fkRBtAXj1BWI",
        "from": {
            "address": "0x29917bf58d80815e3dd93b7e4441b405e3d41588",
            "coins": {
                "tfuelwei": "250000000000000000000",
                "thetawei": "0"
            },
            "sequence": "21",
            "signature": "0xc9fb1b288bb68adca3d8516e5c7de73a803b93f72bec7562ca531814f195cbca379ecdc4758f57a8e72702a5967177e597fa0d892239eac6555c81d589a4811a1b"
        },
        "gas_limit": "200915",
        "gas_price": "4000000000000",
        "to": {
            "address": "0xc357a28c0285f6c45a7ff7e8c4cc92fad0b34114",
            "coins": {
                "tfuelwei": "0",
                "thetawei": "0"
            }
        }
    },
    "type": 7
}

GetPendingTransactions

この API は、mempool 内の保留中のトランザクションを返します。

RPC メソッド: theta.GetPendingTransactions

戻り値

  • tx_hashes: mempool* で保留中のトランザクションのハッシュ

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.GetPendingTransactions","params":[],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "tx_hashes": ["0x61ed06b78fededbbd262f95f321d7e48dee81e9b1e493b7f4d42c6bf7afd4b27", "0xc4162541f5e9f283bd9c3beb2798a4a2539b567dd35f52edefde7063f985ab17", "0xc63f2a5bbdc9bc34acde6b800ffd795e7794faa8c07c7c5606fa6cb16513779e", "0xce31bd8d44b1747e8c727bf54aafc7886a0c219d4c79f1245926d4d1244fed8c", "0x2fd317b7c35ea9d1775defd332edc0194c541042090884b4c1d06813b9fe601a", "0x98f3f180abdc756c6443b204b79fcb468bed8e6924da0004159ba686f47d4bd9", "0x6546f2c83405178821d88f1649d7b9f0ebbcde2d9dea59df55bfc7a5e5774267", "0x4a638c8ac1e926447258934be1766f24450856482375a8b7da2f902a4975d28a", "0x8ddc181dd80732961f2886402120ba1568deacbc55ecbfc26b1cf1bddd78c664", "0x14d430ca0c0a208e6bce3c89fcc8664fd4421ce72231ae161672b1b9d575c4e8"]
    }
}

送信 API

BroadcastRawTransaction

この API は、指定された生のトランザクションをブロックチェーンに送信し、トランザクションがブロックチェーンに含まれるか、タイムアウトになった後にのみ返されます (つまり、同期呼び出し)。

RPC メソッド: theta.BroadcastRawTransaction

クエリ パラメータ

  • tx_bytes: 署名されたトランザクション バイト

戻り値

  • hash: トランザクションのハッシュ
  • block: トランザクションを含むブロックの詳細

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.BroadcastRawTransaction","params":[{"tx_bytes":"02f8a4c78085e8d4a51000f86ff86d942e833968e5bb786ae419c4d13189fb081cc43babd3888ac7230489e800008901158e46f1e875100015b841c2daae6cab92e37308763664fcbe93d90219df5a3520853a9713e70e734b11f27a43db6b77da4f885213b45a294c2b4c74dc9a018d35ba93e5b9297876a293c700eae9949f1233798e905e173560071255140b4a8abd3ec6d3888ac7230489e800008901158e460913d00000"}],"id":1}' http://localhost:16888/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "hash": "0x0a495698654ff5372ef8936eca727c25b975ea0f7e5ebea282e3c86017dfe521",
        "block": {
            "ChainID": "privatenet",
            "Epoch": 40186,
            "Height": 20094,
            "Parent": "0x6797d42ff724a47e9dfd3aa425e2a4f06f40b64fd347ca8c9ebb43d08cb58847",
            "HCC": {
                "Votes": {},
                "BlockHash": "0x6797d42ff724a47e9dfd3aa425e2a4f06f40b64fd347ca8c9ebb43d08cb58847"
            },
            "TxHash": "0xbed5492c96d8251c2f0846a2d12d7a17eb88966a736fa0e8f96af36ed3ffaa74",
            "ReceiptHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
            "Bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
            "StateHash": "0xd2b1fa73461fe80d266933033df073a2eb5b82d16cad46f2f74fa2b575adbc88",
            "Timestamp": 1548272003,
            "Proposer": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
            "Signature": "0x514b731086640c79122f81db1ac1a142d39a92393affb3cbaa09df395dbb441a4b735a66d0da1a52887b66a155033e51b36584dd14b68616fe30b0f2a3f434fa01"
        }
    }
}

BroadcastRawTransactionAsync

この API は、指定された生のトランザクションをブロックチェーンに送信し、すぐに返します (つまり、非同期呼び出し)。

RPC メソッド: theta.BroadcastRawTransactionAsync

クエリ パラメータ

  • tx_bytes: 署名されたトランザクション バイト*

戻り値

  • hash: トランザクションのハッシュ*

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"theta.BroadcastRawTransactionAsync","params":[{"tx_bytes":"02f8a4c78085e8d4a51000f86ff86d942e833968e5bb786ae419c4d13189fb081cc43babd3888ac7230489e800008901158e46f1e875100016b841393e2eba6241482098cf11ef4dd869209d7ebd716397f3c862ca5b762bbf403006b1fa009786102383c408cabdf7450c1c73d4dd4a20d3b48a39a88ffe0ecb0e01eae9949f1233798e905e173560071255140b4a8abd3ec6d3888ac7230489e800008901158e460913d00000"}],"id":1}' http://localhost:16888/rpc

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

スマートコントラクトを呼び出す

この API は、スマート コントラクト トランザクションをブロックチェーンに送信することなく、スマート コントラクトの実行をローカルでシミュレートします。実行結果の評価、ガス代の計算などに役立ちます。

RPC メソッド: theta.CallSmartContract

クエリ パラメータ

  • sctx_bytes: 署名されたトランザクション バイト

戻り値

  • vm_return: 仮想マシンの復帰
  • contract_address: 対応するスマート コントラクトのアドレス
  • gas_used: スマート コントラクトの実行に使用されるガスの量
  • vm_error: 仮想マシンから返されたエラー (存在する場合)

アカウント API

新しいキー

この API は新しいアカウント (つまり、秘密鍵とアドレスのペア) を作成し、デフォルトで ~/.thetacli/keys/encrypted/ の下にある秘密鍵を暗号化します。

RPC メソッド: thetacli.NewKey

クエリ パラメータ

  • password: 新しいアカウントのパスワード

戻り値

  • address: 新しく作成されたアカウントのアドレス

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.NewKey","params":[{"password":"qwertyuiop"}],"id":1}' http://localhost:16889/rpc

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

リストキー

この API は、ローカル マシン上のすべてのアカウントのアドレスを一覧表示します (つまり、~/.thetacli/keys/encrypted/ の下)。

RPC メソッド: thetacli.ListKey

クエリ パラメータ

  • なし

戻り値

  • アドレス: アカウントのアドレス*

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.ListKeys","params":[],"id":1}' http://localhost:16889/rpc

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "addresses": ["0x0d2fD67d573c8ecB4161510fc00754d64B401F86", "0x21cA457E6E34162654aDEe28bcf235ebE5eee5De", "0x2E833968E5bB786Ae419c4d13189fB081Cc43bab", "0x36Cb7E4dFBbE9508B3A2a331f171E4F6254E213f", "0x636524F8318bCE66C2D2d3159980ad487DF0eC2D", "0x70f587259738cB626A1720Af7038B8DcDb6a42a0", "0x8318dd49f83A2684E30d5fB50cD0D3D69aA82EAd", "0x8fc9fB79a8aa0F9D13156A3CDD74200F75895468", "0xA47B89c94a50C32CEACE9cF64340C4Dce6E5EcC6", "0xa5cdB2B0306518fb37b28bb63A1B2590FdE9b747", "0xcd56123D0c5D6C1Ba4D39367b88cba61D93F5405"]
    }
}

ロック解除キー

この API は、アカウントのロックを解除します。アンロックされたアカウントのみが、Theta/TFuel トークンの送信を許可されます。

RPC メソッド: thetacli.UnlockKey

クエリ パラメータ

  • address: ロックを解除するア​​カウントのアドレス
  • password: アカウントのパスワード

戻り値

  • unlocked: アカウントが実際にロック解除されているかどうかを示すブール値

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.UnlockKey","params":[{"address":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab", "password":"qwertyuiop"}],"id":1}' http://localhost:16889/rpc

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

ロックキー

この API はアカウントをロックします。ロックされたアカウントは、Theta/TFuel トークンを送信できません。

RPC メソッド: thetacli.LockKey

クエリ パラメータ

  • address: ロックするアカウントのアドレス

戻り値

  • unlocked: アカウントがまだロック解除されているかどうかを示すブール値

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.LockKey","params":[{"address":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab"}],"id":1}' http://localhost:16889/rpc

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

IsKeyUnlocked

この API は、アカウントが現在ロック解除されているかどうかを返します。

RPC メソッド: thetacli.IsKeyUnlocked

クエリ パラメータ

  • address: チェックするアカウントのアドレス

戻り値

  • unlocked: アカウントがまだロック解除されているかどうかを示すブール値

シェル

// Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.IsKeyUnlocked","params":[{"address":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab"}],"id":1}' http://localhost:16889/rpc

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

送信 API

この API は、Theta/TFuel トークンを送信します。API 呼び出しでは、Theta トークンまたは TFuel トークンのいずれか、または両方を 1 回で送信できることに注意してください。

RPC メソッド: thetacli.Send

クエリ パラメータ

  • chain_id: チェーンの ID
  • from: トークンの送信元アカウントのアドレス
  • to: 受取人のアカウントのアドレス
  • thetawei: 送信される Theta トークンの量 (ThetaWei で、1 Theta = 10^18 ThetaWei)
  • tfuelwei: 送信される TFuel トークンの量 (TFuelWei で、1 TFuel = 10^18 TFuelWei)
  • 手数料: TFuelWei での取引手数料
  • sequence: from アカウントの予期されるシーケンス番号
  • async: ブール値のフラグ。async が false に設定されている場合、RPC 呼び出しは、トランザクションがブロックに含まれるか、タイムアウトになるまで待機します。それ以外の場合、RPC 呼び出しはトランザクション ハッシュと共にすぐに返されます。

戻り値

  • hash: トランザクションのハッシュ
  • block: トランザクションを含むブロックの詳細

シェル

// Async Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.Send","params":[{"chain_id":"privatenet", "from":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab", "to":"0xA47B89c94a50C32CEACE9cF64340C4Dce6E5EcC6", "thetawei":"99000000000000000000", "tfuelwei":"88000000000000000000", "fee":"1000000000000", "sequence":"6", "async":true}],"id":1}' http://localhost:16889/rpc

// Async Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "hash": "0xe3e82ae1e08ca49f85842729bd3c70ba0874d59cca3812fe0807506463851d22",
        "block": null
    }
}

// Sync Request
curl-X POST -H'Content-Type: application/json'--data'{"jsonrpc":"2.0","method":"thetacli.Send","params":[{"chain_id":"privatenet", "from":"0x2E833968E5bB786Ae419c4d13189fB081Cc43bab", "to":"0xA47B89c94a50C32CEACE9cF64340C4Dce6E5EcC6", "thetawei":"99000000000000000000", "tfuelwei":"88000000000000000000", "fee":"1000000000000", "sequence":"7", "async":false}],"id":1}' http://localhost:16889/rpc

// Sync Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "hash": "0xd4dfa1b763cac0c18c816e31ff585c01f2c4f2604dfff01cb6638d6d19e1bd1e",
        "block": {
            "ChainID": "privatenet",
            "Epoch": 170511,
            "Height": 170472,
            "Parent": "0xe36483c52eeee44634038252bb33dfe6b70c439c94c89236c6f18c1a4a676e01",
            "HCC": {
                "Votes": {},
                "BlockHash": "0xe36483c52eeee44634038252bb33dfe6b70c439c94c89236c6f18c1a4a676e01"
            },
            "TxHash": "0xff0d7f1bd6aa699369a935de46c287b30917958c6dbd2d542d31548eaf279525",
            "ReceiptHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
            "Bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
            "StateHash": "0x49374ccea64633a51358816d29a55f372d0fbe7e2f9cb1447ddd2c7519fc17e5",
            "Timestamp": 1550129583,
            "Proposer": "0x2e833968e5bb786ae419c4d13189fb081cc43bab",
            "Signature": "0x96dad1ff2ccc4eb2e18ca99f488cb9d6e6f3333c53a3347d7f8ded5f7301b613763bf0301a85b8f8e7342858c29dd1b262b1b6bdb9552fa5c9b6b61a9b4f6d5c01"
        }
    }
}

構成

Theta ブロックチェーン ノードの構成

以下のコマンドに示すように、パラメータを使用してブロックチェーン ノードを起動できます。theta--config=path/to/config/folderシェル

theta start--config=../privatenet/node

パラメータが指定されていない場合、ノードはデフォルトの設定フォルダとして使用します。このノードは、config ディレクトリを使用して他の重要なデータも保存します。たとえば、暗号化されたキーはフォルダーの下に格納され、ブロックチェーン データは db フォルダーの下に格納されます。--configtheta~/.thetathetakey

ノードの構成は、path/to/config/folder の下のファイルによって定義されます。以下はオプションですthetaconfig.yamlYAML

storage:  statePruningEnabled: true # true by default, when set to true the node will perform state pruning which can effectively reduce the disk space consumption  statePruningInterval: 16 # the purning interval (in terms of blocks) which control the frequency the pruning procedure is activated  statePruningRetainedBlocks: 2048 # the number of blocks prior to the latest finalized block whose corresponding state tree need to be retainedp2p:  address: 127.0.0.1 # the binding address of the RPC service, 0.0.0.0 by default  port: 50001 # the p2p port that the Theta node listens on, 50001 by default  seeds: 3.20.109.241:21000,18.223.165.134:21000,35.184.232.41:21000 # the IP addresses of the seed nodesrpc:  enabled: true # false by default, when set to true the RPC API is enabled  port: 16888 # the PRC API port, 16888 by default  maxConnections: 100 # max number of simultaneous RPC connections, 200 by defaultlog:  levels: "*:info"# level of logs to be printed, "*:debug" by default
タイトルとURLをコピーしました