スマートコントラクトアダプタの作成 その2
スマートコントラクトアダプタ作成の第2回目です。
前回は、参照系のスマートコントラクトアダプタを作成しました。
今回は、更新系のスマートコントラクトアダプタの実装例を紹介します。
なにをやるか
スマートコントラクトアダプタに更新系の処理を実装するクラスを追加します。
1つのjarに参照系と更新系のクラスを含めて実装します。
実装方針
更新系に必要なオブジェクトをこの親Factoryクラスに実装し、コンストラクタにフラグを渡し、参照系と更新系画面に必要なオブジェクトをそれぞれ描画するようにします。
画面描画部分もFactoryクラスとして新設することも検討しましたが、今回は同一の親クラスで条件で分岐させる形で実装を行いました。
クラスの関連図 ※ はこちらを参照ください。
※ コンポーネントSDK 4.2 開発ガイドより抜粋
クラス構成
今回は、更新系処理を実装するためPostTronOperationおよびPostTronOperationFactoryクラスを追加しました。
実装イメージ
TronAdapterModuleComponent.java
TRONアダプタのメインとなるクラス
public class TronAdapterModuleComponent extends AdapterModuleComponent {
@Override
public ResourceFactory[] getResourceFactories() throws Exception {
return new ResourceFactory[] {
new BlockchainTronGlobalResourceFactory()
};
}
@Override
public OperationFactory[] getOperationFactories() throws Exception {
return new OperationFactory[] {
new GetTronOperationFactory(0), // 参照系のFactoryクラス
new PostTronOperationFactory(0) // 更新系のFactoryクラス
};
}
}
PostTronOperationFactory.java
TronOperationFactoryを継承し、TronOperationFactoryコンストラクタにTRON_WRITE_FUNCフラグを渡します。
:
:
public class PostTronOperationFactory extends TronOperationFactory {
public PostTronOperationFactory(int flag) {
super(TRON_WRITE_FUNC);
}
@Override
public String getOperationName() {
return "tron_write";
}
:
:
TronOperationFactory.java
functionFlagにフラグをセットし、後続のUIを描画するオブジェクトの表示条件に使用します。
:
:
public abstract class TronOperationFactory implements OperationFactory {
protected int functionFlag;
public TronOperationFactory(int flag) {
this.functionFlag = flag;
}
:
@Override
public OperationConfigurator createOperationConfigurator(
OperationConfiguration conf,
OperationContext context) throws Exception {
/*
* 必須設定
*/
// 接続先設定
configurator.addResourceParameter(KEY_BASIC_GROUP, createGlocalResourceTronParameter());
if (this.functionFlag == TRON_WRITE_FUNC) {
configurator.addSimpleParameter(KEY_BASIC_GROUP, createSelectingSmartContractWritableFunctionParameter()); //関数名を直接入力もしくは選択選択
configurator.addSimpleParameter(KEY_BASIC_GROUP, createSelectWritableFunctionNameParameter(conf)); //更新系選択
configurator.setObserver(KEY_SELECTING_SMARTCONTRACT_WRITABLE_FUNCTION, new SmartContractWritableFunctionsObserver()); // 関数名を直接入力もしくは選択選択
} else {
configurator.addSimpleParameter(KEY_BASIC_GROUP, createSelectingSmartContractReadableFunctionParameter()); //関数名を直接入力もしくは選択選択
configurator.addSimpleParameter(KEY_BASIC_GROUP, createSelectReadableFunctionNameParameter(conf)); //参照系選択
configurator.setObserver(KEY_SELECTING_SMARTCONTRACT_READABLE_FUNCTION, new SmartContractReadableFunctionsObserver()); // 関数名を直接入力もしくは選択選択
}
:
:
}
:
:
DataSpiderスクリプト実装イメージ
スクリプトのシナリオは、名簿一覧のユーザにTRONアドレスを発行し、そのユーザをNFT登録可能なユーザとしてスマートコントラクトに登録します。登録時のトランザクションIDを実行結果としてCSVファイルに出力するというものです。
スクリプト内の「更新系呼出」が今回作成した更新系スマートコントラクトアダプタのアイコンです。
プロパティ画面イメージ
画面は基本的に参照系スマートコントラクトアダプタと同じ構成です。
次回は
今回までTRONネットワークのスマートコントラクトアダプタとして参照用および更新用を作成しました。
次回から、プライベートネットワークで利用されるHyperledger Fabricとの連携を検証していきたいと思います。