はじめに
こんにちは。
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);
モザイクグローバルリストリクション
対象のモザイクについて、グローバールなリストリクションルールを設定します。
モザイクとキー
対象のモザイクを指定します。BigIntか、 UnresolvedMosaicId
が使用できます。
const mosaicId = 0x2A3CB9A67A523DD4n;
const mosaicId = new symbolSdk.symbol.UnresolvedMosaicId(0x2A3CB9A67A523DD4n);
リストリクションキーを指定します。BigInt型で8バイトまで使えます。
const restrictionKey = 0x0000000012345678n;
リストリクションタイプ
モザイクリストリクションタイプを指定します。確か8種類あったと思います。
トランザクションでは、以前のタイプと次の新しいタイプを指定します。
const { MosaicRestrictionType } = symbolSdk.symbol;
const previousRestrictionType = MosaicRestrictionType.NONE;
const previousRestrictionType = MosaicRestrictionType.EQ;
const previousRestrictionType = MosaicRestrictionType.LT;
const previousRestrictionType = MosaicRestrictionType.LE;
const previousRestrictionType = MosaicRestrictionType.GT;
const previousRestrictionType = MosaicRestrictionType.GE;
const previousRestrictionType = MosaicRestrictionType.NE;
const newRestrictionType = MosaicRestrictionType.EQ;
トランザクション
トランザクションを作ります。
previousRestrictionValue
と newRestrictionValue
は、BigInt型で8バイトまで指定できます。
const transaction = facade.transactionFactory.create({
type: 'mosaic_global_restriction_transaction_v1',
signerPublicKey: keyPair.publicKey.toString(),
fee: 1000000n,
deadline,
mosaicId,
restrictionKey,
previousRestrictionType,
previousRestrictionValue: 0n,
newRestrictionType,
newRestrictionValue: 1n,
// referenceMosaicId: 0x2A3CB9A67A523DD4n,
});
referenceMosaicId
は、以下のようなシナリオで使用します。使用しない場合は、0が使われます。
モザイクの制限を第三者に委任する — Symbol Documentation
モザイクアドレスリストリクション
対象のモザイクについて、特定のアドレスにリストリクション値を設定していきます。
previousRestrictionValue
と newRestrictionValue
があり、BigInt型で8バイトまで指定できます。
以前のリストリクション値がなく、新規に値を設定する場合は、 previousRestrictionValue
は 0xFFFFFFFFFFFFFFFFn
でなければなりません。
const transaction = facade.transactionFactory.create({
type: 'mosaic_address_restriction_transaction_v1',
signerPublicKey: keyPair.publicKey.toString(),
fee: 1000000n,
deadline,
mosaicId,
restrictionKey,
// previousRestrictionValue: 0xFFFFFFFFFFFFFFFFn,
previousRestrictionValue: 1n,
newRestrictionValue: 2n,
targetAddress: ADDRESS_RECEIVER_1,
});
共通(後半)
こちらはトランザクションを作った後の、送信するコードになります。
署名をしてハッシュを計算して、送信して、ステータスを確認します。
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);
const sendRes = await axios.put(`${NODE_URL}/transactions`, jsonPayload).then((res) => res.data);
console.log(sendRes);
await axios
.get(`${NODE_URL}/transactionStatus/${hash}`).then((res) => res.data)
.then((statusRes) => {
console.log(statusRes)
})
.catch((e) => {
console.log(e.message, e.response.data)
});
おわりに
今回は、モザイクリストリクションについて書きました。Symbolの中でも、少し複雑な部類になりますので、何度もマニュアルを見返して理解していければと思います。
シリーズ