4.4デプロイされたスマートコントラクトインスタンスをリンクする

スマートコントラクトを新しいアドレスにデプロイすることに加えて、スマートコントラクトをすでに存在するインスタンスにリンクすることもできます。

MultiBaasでスマートコントラクトをアドレスにリンクすることにより、MultiBaasに「ブロックチェーンのそのアドレス上にあるバイトコードとスマートコントラクトにあるメソッドを利用してやり取りできる」ということを伝えることになります。

MultiBaasの機能の1つとして複数のスマートコントラクト(実際はそのABIですが)が1つのブロックチェーンアドレスにリンクさせられるというものがあります。これによってスマートコントラクト開発者はデプロイしたコントラクトのインスタンスからどのコントラクトのABIにアクセスするかを選択できるという機能の階層化ができます。

C言語のヘッダ(.h)ファイルのようにヘッダファイルにメソッドを含むコントラクトとは、追加の機能が特定のヘッダファイル(例えば特定のABI)において明言されていなくても、やり取りが可能です。

例えば、ERC20トークンスタンダードはスマートコントラクトが実装しなくてはならない一連のソリディティメソッドを定義していますが、他の機能を追加で実装することを制限していません。

UIを通してリンクする

1つないし複数のスマートコントラクトを含むソリディティファイルをアップロードすると、ブロックチェーンにデプロイするかすでに存在するコンパイル済みのコントラクトにリンクするかを聞かれます。

以下の手順に従ってデプロイ、リンクツールを利用する事もできます:

  1. コントラクトをメインメニューから選択
  2. コントラクトのサイドメニューか特定のコントラクトを選択します
  3. コントラクトウィンドウの上部からコントラクトのデプロイ/リンク をクリックします

デプロイ/リンクからさらに:

  1. リンクタブを選択
  2. リンクしたいコントラクトのバージョンを選択します。
    • バージョン番号はコントラクトアップロード時に選択されたものです
    • デフォルトでは選択されたバージョンは辞書式順序的に最新のバージョンであり、最も遅くアップロードさればバージョンではありません
  3. リンクしたコントラクトのラベルを選択します
    • これはデプロイしたアドレスに対応するインスタンスラベルになります
  4. 実在するコントラクト住所を入力(ラベルまたはエイリアスではありません)
  5. ネットワークにデプロイをクリックします。ネットワークとはMultiBaasの接続しているネットワークです

成功すればトランザクションの確認を示唆するメッセージとトランザクションハッシュが表示されます。デプロイダイアログは同じコントラクトのインスタンスを更に作成する時のために利用可能になったままです。デプロイされたコントラクトインスタンスはデプロイされたコントラクトのタイプの下にあるコントラクトメニューの下から利用可能です。

APIを通してリンクする

デプロイされたスマートコントラクトをあるアドレスにリンクすることは下記のREST API呼び出しによっても実行可能です。

リクエスト
PUT /chains/ethereum/addresses/mltitoken/contracts/mltitoken
レスポンス
{
    "status": 200,
    "message": "Success",
    "result": {
        "label": "mltitoken",
        "address": "0xB98e9bFF193adB14f75821D638F8Fc34F07E6c1C",
        "balance": 0,
        "chain": "ethereum",
        "isContract": true,
        "modules": [],
        "contracts": [
            {
                "name": "",
                "label": "mltitoken",
                "conflict": false,
                "version": "1.0"
            }
        ]
    }
}

レスポンスからmltitokenのアドレスmltitokenのコントラクトにリンクしていることがわかり、したがってやり取りするためのABIも含んでいます。