乾物|超詳しい解説、Thunderchain導入アプリ初体験
星球君的朋友们
2018-10-17 09:41
本文约4295字,阅读全文需要约17分钟
Thunderchainを初めて知りましたが、Thunderchainは良い選択だと思います。 Thunderchainではテスト用のサンドボックス環境が提供されており、公式ドキュメントにもより詳しく書かれています。た

Thunderchainを初めて知りましたが、Thunderchainは良い選択だと思います。 Thunderchainではテスト用のサンドボックス環境が提供されており、公式ドキュメントにもより詳しく書かれています。ただし、このサンドボックス環境で関連するデプロイメントを行ったので、呼び出しに関するチュートリアルを提供します。

テスト環境を使用するには、テスト用の開発者アカウントやテスト用の LinkToken ウォレットなどのテスト環境を準備する必要があります。公式ドキュメントには、開発者のニーズを満たすために多くの API が提供されています。 ThunderChain を使用して独自の契約アプリケーションを開発するための最初のステップは、開発者の電子メールを登録することです。


開発者が自分のアプリで ThunderChain オープン プラットフォームのコントラクト サービスを使用したい場合は、構築 URL を呼び出すだけでよく、関連するインターフェイスは公式ドキュメントから確認できます。たとえば、コマンド ラインのcurlコマンドは電子メールに使用できます。登録すると、json メール アドレスを自分で入力できます。メール アドレスは次のことを行います。

curl -H "Content-Type:application/json" -X POST -d 

'{"email":"1191094115@qq.com"}' https://sandbox-

walletapi.onethingpcs.com/api/linktest/email_code

メールボックスが登録されていない場合は、次の値が返されます。

{"code":0,"data":{},"msg":""}

同時に、メールボックスは次の電子メールを受信します。

これは Thunderchain 開発の最初のステップにすぎません。もちろん、コマンド ラインにコマンドを直接入力するだけでなく、公式の API 呼び出し Web ページから API を呼び出すこともできます。

ウェブサイトへのリンク:

https://thunderchain.docs.apiary.io/#reference/0

ページを開いて以下を確認してください。

[メール認証コードを取得] をクリックしてコードを入力します。

Web ページを使用して API を呼び出すか、コマンドライン経由で呼び出すかは、設定​​によって異なります。

「メール認証コードを取得」ボタンをクリックすると、ページが変わります。


このとき、本文とその他のオプション URL パラメーターを入力する必要があります。ヘッダーは無視できます。

入力後、「リソースを呼び出す」ボタンをクリックすると、投稿リクエストが正常に送信されます。

この時点で、応答ウィンドウに関連情報が表示されます。

API の基本的な呼び出し操作は上記でよくわかりましたが、プロセス全体をより簡単に説明するために、Web ページを通じて完全にデプロイし、コントラクトを呼び出してみましょう。もちろん、実際のアプリケーションは、開発者がネットワーク ライブラリを使用してソフトウェア内で API 呼び出しを行うことにより、コントラクトのデプロイメントと呼び出しを実装することです。

メール認証コードを取得したら、メールアドレスを登録します。

前の Web ページで、開発者の電子メール アドレスで登録された登録ボタンをクリックします。

 

このとき、先ほど登録したメールアドレスと、メールに届いた認証コードを入力します。

登録後、メールを受信できるようになります。

これらは、契約のさまざまな操作のための 2 つの署名です。

コントラクトを呼び出すには、ThunderChain コントラクト仮想マシンに燃料 (トランザクション手数料) を提供する必要があります。また、テスト アカウント リチャージ インターフェイスを通じていくつかのテスト環境トークンを取得できます (このインターフェイスは 1 日に 10 回のみ呼び出すことができます)。ここで、契約開発者と ThunderChain 開発プラットフォームが呼び出さなければならないロジックを理解していない子供もいるかもしれませんが、これが公式ドキュメントのフローチャートです。

 

上の図は比較的明確ですが、明確にする必要があります。

まず、LinkToken ポケットはコントラクト呼び出し全体から切り離すことはできず、ポケットに保存された LinkToken 秘密鍵がトランザクションを発行し、その LinkToken アドレスがコントラクトの送信者として使用されます。

したがって、最初のステップは、テストのために LinkToken ポケットをリチャージすることです。リチャージ用のテスト インターフェイスは次のとおりです。

https://sandbox-walletapi.onethingpcs.com/api/linktest/recharge。

パラメータの説明:


リチャージするには、まず LinkToken アドレスを取得し、LinkToken ポケットを通じてアカウントを生成する必要があります。

 


jsonデータを構築します。アカウントはアドレスです

一方、署名は次のとおりです。

md5(email=xxx&address=xxx&secret=xxx)

ここで、xxx は個人情報に置き換えられます。下図に示すように、個人情報はモザイク化されています。これにより、署名を取得できます。このとき、API インターフェイスを呼び出してインターフェイス呼び出しを行うことができます。

 


図に示すように json をビルドします。

 

 

開発者の 1 人は、このインターフェイスを 1 日に 10 回しか呼び出すことができません。呼び出した後、LinkToken Pocket を更新します。

 

この時点で、LinkToken が 1 つ到着しました。

LinkToken を取得したら、Thunder Chain にコントラクトをデプロイできます。コントラクトを正常にデプロイするには、基本的なガスを提供する必要があります。

上記のフローチャートと同様に、コントラクトをデプロイするには、まず対応する json データを構築し、それを送信する必要があります。

https://sandbox-walletapi.onethingpcs.com/api/linktest/contract/deploy インターフェイス

パラメータの説明:

上記のものを準備したら、契約を開発してデプロイできます。トリュフでの受託開発も可能です。


トリュフを使用して Simplestore コントラクトを開発します。ここでのバイトコードは 16 進数であることに注意してください。コントラクトが Library コントラクトを参照している場合は、Library コントラクトを Thunder チェーンにデプロイし、実際のコントラクトの参照されている Library フィールドを図書館のアドレス。このように、バイトコードはすべてバイナリであり、ビルド フォルダーは truffle コンパイル コマンドを通じて取得できます。呼び出す必要があるコントラクト内のバイトコード フィールド情報を見つけます。


ここでの契約は次のとおりです。

pragma solidity ^0.4.21;

 contract SimpleStorage {

     uint myVariable;

 

     function set(uint x) public {

         myVariable = x;

     }

 

     function get() constant public returns (uint) {

         return myVariable;

     }

 }

看板を建てたあとは

 

jsonを取得します:

{

    "email": "1191094115@qq.com",

    "bytecode": "0x608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820101eb74d2d65698a7fd1e63666842673ffb013a500c768f84643fc6b896519430029",

    "params": "",

    "sign": "0d0734ca430c7b79d332d700b0b44cd9"

}


答えが得られました:

 

ID を取得したら、その ID を使用して契約のアドレスを照会できます。

要求される情報は次のとおりです。

メソッド: POST
URL: /api/linktest/contract/address
BODY: JSON

パラメータの説明:

パラメータ名

パラメータの種類

説明する

説明する

Email

string

はい

テストに使用される電子メールは、主にテスト メッセージを受信するために使用されます。

Id

int

はい

コントラクトのデプロイメントによって返される ID

Sign

string

はい

署名 md5(email=xxx&id=xxx&secret=xxx)、xxx にはリクエストの実際の値が入ります


応答

パラメータ名

パラメータの種類

説明する

説明する

Code

int

はい

エラーコード、0: 成功、0 以外: 失敗

Msg

string

はい

エラーメッセージ

Data

object

いいえ

戻りデータを要求する


サインを取得:

 


契約アドレスは後で取得できます

 


コントラクトアドレスを取得したら、コントラクトを呼び出すことができます。

 

 

上記のフローチャートによると、契約通話を行うには、まずサードパーティで LinkToken Pocket を使用するための prepay_id を取得する必要があります。ここではサードパーティが prepay_id を取得するプロセスを示しますが、これは単なるデモンストレーション。


テスト環境:

https://sandbox-walletapi.onethingpcs.com/getPrepayId


リクエスト方法:郵送

prepay_id を取得するときに入力される秘密キーは、前の電子メールで送信されたシークレットです。

 


このようなサインをもらいます

パラメータが同じであるため、各リクエストの json も同じであり、この時点でレスポンスが得られます。


契約方法は常時方式とガスが必要な方式の2つがあります。今回は、Simplestore の get() メソッドを呼び出します。次に、次の条件を満たす必要があります。

メソッド: POST
URL: /call
BODY: JSON

パラメータの説明:

 

パラメータの詳細

オブジェクトの詳細

オブジェクト - トランザクション呼び出しオブジェクト

ここで、 data は呼び出し元の関数のハッシュ文字列です。

その計算方法は次のとおりです。

メソッド function bar(fixed[2] x,bool y) を仮定します。ここで、x は 1、y は 2 です。

このとき、計算されたデータは次のようになります。

1. bar(fixed[2], bool) の ASCII コードに対して sha3 を実行し、結果の 16 進数表現の最初の 8 桁を取得します。

2. x の値を uint32 数値に変換し、y の値を uint32 数値に変換します。

3. 手順1と2で取得した文字列を結合してデータを取得します

get() の sha3-256 値を取得できます。

6d4ce63caa65600744ac797760560da39ebd16e8240936b51f53368ef9e0e01f

最初の 8 桁を取得します

パラメータがないのでjsonをビルドすることができます

 

この時点での結果は、

 

コントラクトがデプロイされると get メソッドは 0 を取得するため、0 を返します。

定数メソッドを呼び出した後、ガスを必要とするメソッドを呼び出すことができます

今回は set(uint x) 関数を呼び出します。uint と書かれていますが、uint256 に変換されるため、

json 形式に従って、この時点で set(uint256) の sha3-256 のハッシュ値を取得し、最初の 8 ビットを取得する必要があります。

cccdda2c

 

この時点で、json を構築できます。

 

x 256 を作ると同時に、256 の 16 進数の 100 を 10 進数で計算し、100 を 32 ビットに埋めて次の値を取得します。

0x00000000000000000000000000000100

もう一度一緒にします

0x60fe47b100000000000000000000000000000100

これをデータと呼びます。

ここにアドレスがあります。LinkToken Pocket のコールバック アドレスを直接選択できます。 json の Gas_limit については、このようなリクエストを通じて取得できますが、コントラクトが成功する場合は、ガスを可能な限り大きくすることができます。

 

戻り値は 16 進数なので、10 進数に変換するだけです。

 

10 進数に変換すると 26477 ですが、実際には契約では 41605 が使用されているため、より大きなガスを用意するのが正しいです。

jsonをビルドする


答えが得られました:

 

このとき取得されるコールバックはLinkToken PocketのコールバックURLとなります。 URLをQRコードに変換します。

 

次に、LinkToken Pocket を使用してスキャンします。

成功した場合:

 


契約が正常に履行された場合

 

失敗した場合: ここでは間違ったメソッドを呼び出しています (間違ったデータを構築しています)

ここまでで、契約電話のプロセスは終了しました。

コントラクトの変数を0から256に変更したので、getメソッドで確認してみましょう。

以前の定数メソッドによるこの時点の応答は次のとおりです。 ps 定数メソッドは、仮想マシンを介してトランザクション手数料を使用して実行することもできますが、これは必須ではありません。

16 進数を 10 進数に変換すると、256 になります。

以上、Thunder Chain導入契約プロセスの初体験でしたが、今後の子供たちの靴に少しでもお役に立てれば幸いです^.^ 学生の皆さん。

 


星球君的朋友们
作者文库