コントラクト認証チュートリアル
このチュートリアルはVisual Studio 2017に基づいています。Visual Studioが2017バージョンにアップグレードされていることを確認してください。さらに、このチュートリアルはSmart Contract 2.0のデモに基づいており、GitHubからテストネットワークをダウンロードして実行してください。
このドキュメントを作成する時点で、最新のテストネットワーククライアント(Neo-GUI-v2.0.1)をダウンロードして下さい。
コントラクトスクリプトをコンパイル
using NEO.SmartContract.Framework;
using NEO.SmartContract.Framework.Services.NEO;
using NEO.SmartContract.Framework.Services.System;
namespace NEO.SmartContract
{
public class Test : VerificationCode
{
public static bool Verify(byte[] signature)
{
return true;
}
}
}
[!注意] スマートコントラクトスクリプトを生成する方法がわからない場合は、C#を使用してNeoスマートコントラクトを作成する方法 を参照してください。
上記のコントラクトはTest.avmにコンパイルされ、コントラクトスクリプト(Test.avmバイナリデータ)は次のようになります:52c56b6c766b00527ac461516c766b51527ac46203006c766b51c3616c7566
このチュートリアルの後半で.avmファイルのコントラクトスクリプトを取得する方法を学習します。
ウォレットを作成する
次のチュートリアルに従って新しいウォレットを作成します。
コントラクトスクリプトの入手
コントラクトスクリプトを入手するには多くの方法がありますが、1つの方法は以下のC#コードを使用して.avmファイルから直接読み取る方法です。
byte[] bytes = System.IO.File.ReadAllBytes("Test.avm");
for (int i = 0; i < bytes.Length; i++)
Console.Write(bytes[i].ToString("x2"));
コーディングによってコントラクトスクリプトを取得したくない場合、クライアントのDeploy Contract
機能はコントラクトコードを取得する簡単な方法を提供します。
クライアントのPC版では、 "Advanced" - "Deploy Contract ..."をクリック、右下隅にある "Load"をクリックし、Test.avmファイルを選択します。 "Code"ボックスには、下図のようなコントラクトスクリプトが表示されます。後の手順で使用しますので、コードスクリプトをコピーします。
コントラクトアドレスを作成する
独自のウォレットを作成したら、マウスの右ボタンをクリックし、生成されたコントラクトスクリプトを使用してコントラクトアドレスを作成します。
コントラクトアドレスをアカウントに関連付けし、対応するパラメータを入力します。コントラクトには署名のパラメータがあるため、"Parameter List"に「00」を記入し(詳細はこのドキュメントを参照してください)、前のステップのコントラクトスクリプトを"Code"ボックスに入力する必要があります。
アカウントを関連付ける理由は、コントラクトを公開鍵と秘密鍵のペアで関連付けするため、コントラクトに署名する必要がある場合、クライアントは自動的に関連付けされたアカウントの秘密鍵で署名します。
[OK]をクリックすると、スマートコントラクト認証アカウントが正常に作成されます。
テスト
以下はスマートコントラクト認証アカウントのテストです。スマートコントラクト認証アカウントがアセットを転送してからコンセンサスノードがスマートコントラクトを検証して実行するまでのプロセスです。コントラクトの検証が成功した場合(結果「true」を返す)、取引が承認されます。結果「真」が受信されるまで、トランザクションのステータスは未承認です。テスト方法は、最初にアセットをコントラクト認証アカウントに転送してから展開することです。
[!注意] テストの正確さを保証するために、ウォレットには他のアセットを持たないことをお勧めします。そうでない場合は、クライアントの
change finding
アルゴリズムを理解した上で、どの取引がコントラクトアドレスから来ているのかを把握出来ないと、アセットが標準アドレスまたはコントラクトアドレスから来ているかどうかを知ることができません。
アセットをコントラクトアドレスに転送する
設定された金額のアセットをコントラクトアカウントに転送する;
コントラクトアセットを転送する
スマートコントラクトアカウントからアセットを転送する:
[!注意] クライアントのアセット残高は、標準勘定の残高とコントラクトアドレスの残高の合計、つまりすべてのアドレスのアセットを合計したものです。コントラクトアドレスでアセットを使用するかどうかは、スマートコントラクトの実行結果によって異なります。コントラクトが成功した場合(結果が真である場合)、アセットは転送され、そうでない場合は転送されません。