2
1

More than 1 year has passed since last update.

symbol-sdk@3.0.7で作る別名(エイリアス・アライアス)トランザクション

Last updated at Posted at 2023-07-11

はじめに

こんにちは。

symbol-sdkの3系、トランザクションシリーズ第三弾です。

今回は別名(エイリアス・アライアス)をやっていきます。

注意事項

書いてあるコードについて、正確性や完全性を保証するものではありません。あくまで参考程度として頂き、最新情報は公式ドキュメンテーションをご確認ください。

共通(前半)

まずはアドレス別名とモザイク別名で共通となる個所について。デッドラインと鍵ペアです。

import symbolSdk from 'symbol-sdk';

const network = symbolSdk.symbol.Network.TESTNET;
const deadline = network.fromDatetime(new Date(Date.now() + 7200000)).timestamp;

const facade = new symbolSdk.facade.SymbolFacade(network.name);

const privateKey = new symbolSdk.PrivateKey(PRIVATE_KEY);
const keyPair = new facade.constructor.KeyPair(privateKey);

アドレスの別名トランザクション

トランザクションにはネームスペースのIDが必要となります。

ネームスペースの文字列からIDにする場合はこちら。これはBigInt型。

const namespaceId = symbolSdk.symbol.generateMosaicAliasId('name1.child1');

IDがすでに分かっている場合はこちら。これはNamespaceId型。

const namespaceId = new symbolSdk.symbol.NamespaceId(0xFBE54EC2AAA8EFDFn);

次に、アドレスです。

文字列型。

const address = "TARDV42KTAIZEF64EQT4NXT7K55DHWBEFIXVJQY";

Address型。

const address = new symbolSdk.symbol.Address("TARDV42KTAIZEF64EQT4NXT7K55DHWBEFIXVJQY");

秘密鍵や公開鍵からAddressへの変換。こちらはAddress型。

const address = network.publicKeyToAddress(keyPair.publicKey);

トランザクションを作ります。

const transaction = facade.transactionFactory.create({
  type: 'address_alias_transaction_v1',
  signerPublicKey: keyPair.publicKey.toString(),
  fee: 1000000n,
  deadline,
  namespaceId,
  address,
  aliasAction: symbolSdk.symbol.AliasAction.LINK,
});

別名を削除するには、 AliasAction をこうします。

symbolSdk.symbol.AliasAction.UNLINK

モザイクの別名トランザクション

ネームスペースのIDが必要ですが、これはアドレスのときと同様です。

const namespaceId = symbolSdk.symbol.generateMosaicAliasId('name1.child1');
const namespaceId = new symbolSdk.symbol.NamespaceId(0xFBE54EC2AAA8EFDFn);

次いで、モザイクのID。

BigIntで指定する場合。

const mosaicId = 0x13A98C75D38B2D59n;

MosaicId型。

const mosaicId = new symbolSdk.symbol.MosaicId(0x13A98C75D38B2D59n);

トランザクションを作ります。

const transaction = facade.transactionFactory.create({
  type: 'mosaic_alias_transaction_v1',
  signerPublicKey: keyPair.publicKey.toString(),
  fee: 1000000n,
  deadline,
  namespaceId,
  mosaicId,
  aliasAction: symbolSdk.symbol.AliasAction.LINK,
});

別名を削除するには、 AliasAction をこうします。(再掲)

symbolSdk.symbol.AliasAction.UNLINK

共通(後半)

署名して、署名済みトランザクションを作ります。また、ハッシュも計算しておきます。

const signature = facade.signTransaction(keyPair, transaction);
const jsonPayload = facade.transactionFactory.constructor.attachSignature(transaction, signature);
const hash = facade.hashTransaction(transaction).toString();

console.log(jsonPayload);
console.log(hash);

そして、署名済みトランザクションを送信。ここでは、 axios を使います。

const sendRes = await axios.put(`${NODE_URL}/transactions`, jsonPayload).then((res) => res.data);
console.log(sendRes);

送信後、1秒程度待ってから、ステータスを確認。

const statusRes = await axios.get(`${NODE_URL}/transactionStatus/${hash}`).then((res) => res.data);
console.log(statusRes);

おわりに

今回は、別名のトランザクションを作りました。

シリーズ

2
1
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
2
1