DataSpiderとブロックチェーン その3
TRONアドレス生成アダプタのブラッシュアップ
前回は、DataSpiderSDKを使用したTRONアドレスの生成アダプタの概要を紹介しました。
今回は、TRONアドレスの生成アダプタのブラッシュアップした点を説明したいと思います。
なにをするか
- INPUTの改良
レコード単位のIDをうけとるようにします。 - OUTPUTの改良
INPUTのIDに紐づく公開鍵と秘密鍵を出力するようにします。
シナリオと利用シーンのイメージ
管理者名簿CSVファイルを読み込み、TRONアドレス発行後、TRONアドレス名簿としてCSVファイルを出力する。
アダプタの実装
入力側データを取得し、出力側バッファに出力します。
GetTronGenerateAddressOperation.java
/**
Project Name : DataSpider fan community
Creation Date : 2022/09/01
Copyright 2022 kamomek2. All rights reserved.
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/
package com.jpn.linux.dp.modules.adapter.TronGenerateAddress;
import static com.jpn.linux.dp.modules.adapter.TronGenerateAddress.Constants.*;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import org.tron.trident.core.key.KeyPair;
import com.appresso.ds.common.fw.LoggingContext;
import com.appresso.ds.common.xmlfw.table.Column;
import com.appresso.ds.common.xmlfw.table.Row;
import com.appresso.ds.common.xmlfw.table.TableDataBuilder;
import com.appresso.ds.common.xmlfw.table.TableDataType;
import com.appresso.ds.common.xmlfw.table.TableRowIterator;
import com.appresso.ds.dp.spi.OperationConfiguration;
import com.appresso.ds.dp.spi.OperationContext;
import com.appresso.ds.xmlfw.DataBuilderFactory;
import com.appresso.ds.xmlfw.DataParserFactory;
public class GetTronGenerateAddressOperation extends TronGenerateAddressOperation {
public GetTronGenerateAddressOperation(
OperationConfiguration conf,
OperationContext context) {
super(conf, context);
}
@Override
public Map execute(Map inputData) throws Exception {
Map res = new HashMap();
String addressType = getAddressType();
Object data = inputData.get(KEY_INPUT);
LoggingContext log = getContext().log();
// 出力側TableDataBuilderを生成する。
TableDataBuilder builder = DataBuilderFactory.newTableDataBuilder(getColumnOutputTypes(), isLargeData());
log.info(builder.toString());
try (TableRowIterator rowIterator = DataParserFactory.newTableRowIterator(data)) {
// 出力側項目の出力開始を宣言する
builder.startConstruction();
// 入力側レコードの繰り返し処理
while (rowIterator.hasNext()) {
Row record = rowIterator.next();
builder.startRow(); // 出力側行単位のデータを格納するバッファ
for (int columnIndex = 0, columnCount = record.getColumnCount(); columnIndex < columnCount; columnIndex++) {
// 入力側の特定の列値を取得
Column column = record.getColumn(columnIndex);
String columnValue = getColumnValue(column);
log.debug("** record datas **");
log.debug("inputData = " + columnValue);
builder.column(columnValue); // KEY_OUTPUT_COLNAME_ADDRESS_ID
// TRONアドレス生成
KeyPair keyPairGenarate = KeyPair.generate();
String privateKey = keyPairGenarate.toPrivateKey();
log.debug("*******************");
// 画面から指定されたラジオボタンの値を参照
if(AddressTypeRadioButtonItems[0].equals(addressType)) {
// BASE58アドレス
String publicAddress =keyPairGenarate.toBase58CheckAddress();
log.info("** Generate toBase58CheckAddress TRON address **");
// 実行ログに生成したアドレスを表示する
log.debug(MultiLangMessage.getString("log.generate.address", publicAddress));
builder.column(publicAddress); // KEY_OUTPUT_COLNAME_ADDRESS
} else {
// HEXアドレス
String publicAddress =keyPairGenarate.toHexAddress();
log.info("** Generate publicAddress TRON address **");
// 実行ログに生成したアドレスを表示する
log.debug(MultiLangMessage.getString("log.generate.address", publicAddress));
builder.column(publicAddress); // KEY_OUTPUT_COLNAME_ADDRESS
}
builder.column(privateKey); // KEY_OUTPUT_COLNAME_PRIVATE_KEY
LocalDateTime now = LocalDateTime.now();
builder.column(now.toString()); //KEY_OUTPUT_COLNAME_PAYOUT_DATE
now = null;
}
builder.endRow();
}
builder.endConstruction();
Object result = builder.getResult();
res.put(KEY_OUTPUT, result);
}
return res;
}
private String getColumnValue(Column column) throws Exception {
switch (column.getType()) {
case TableDataType.TYPE_INT:
return String.valueOf(column.getIntegerValue());
default:
return column.getStringValue();
}
}
@Override
public void destroy() throws Exception {
// オペレーション終了処理
}
}
スクリプト実装イメージ
入力データと出力データ
次回は
スマートコントラクトに焦点を充ててDataSpiderからスマートコントラクを呼び出すための実装を紹介したいと思います。
概要は以下:
- MetaCoinの発行
- MetaCoinのスマートコントラクト呼び出し