はじめに
こんにちは。
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);
おわりに
今回は、別名のトランザクションを作りました。
シリーズ