LoginSignup
1
0

More than 1 year has passed since last update.

TRONアドレス生成処理のDataSpiderアダプタ化

Last updated at Posted at 2022-12-17

DataSpiderとブロックチェーン その3

TRONアドレス生成アダプタのブラッシュアップ

前回は、DataSpiderSDKを使用したTRONアドレスの生成アダプタの概要を紹介しました。
今回は、TRONアドレスの生成アダプタのブラッシュアップした点を説明したいと思います。

なにをするか

  • INPUTの改良
    レコード単位のIDをうけとるようにします。
  • OUTPUTの改良
    INPUTのIDに紐づく公開鍵と秘密鍵を出力するようにします。

シナリオと利用シーンのイメージ

管理者名簿CSVファイルを読み込み、TRONアドレス発行後、TRONアドレス名簿としてCSVファイルを出力する。
tron_address_list.png

アダプタの実装

入力側データを取得し、出力側バッファに出力します。

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 {
		// オペレーション終了処理
	}
}

スクリプト実装イメージ

script3.PNG

入力データと出力データ

script4.PNG

次回は

スマートコントラクトに焦点を充ててDataSpiderからスマートコントラクを呼び出すための実装を紹介したいと思います。
概要は以下:

  • MetaCoinの発行
  • MetaCoinのスマートコントラクト呼び出し
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0