8.ロック
Symbol ブロックチェーンにはハッシュロックとシークレットロックの2種類のロック機構があります。
8.1 ハッシュロック
ハッシュロックは後でアナウンスされる予定のトランザクションを事前にハッシュ値で登録しておくことで、 該当トランザクションがアナウンスされた場合に、そのトランザクションを API ノード上で処理せずにロックさせて、署名が集まってから処理を行うことができます。 アカウントが所有するモザイクを操作できないようにロックするわけではなく、ロックされるのはハッシュ値の対象となるトランザクションとなります。 ハッシュロックにかかる費用は 10XYM、有効期限は最大約 48 時間です。ロックしたトランザクションが承認されれば 10XYM は返却されます。
アグリゲートボンデッドトラ ンザクションの作成
bob = sym.Account.generateNewAccount(networkType);
tx1 = sym.TransferTransaction.create(
undefined,
bob.address, //Bobへの送信
[
//1XYM
new sym.Mosaic(
new sym.NamespaceId("symbol.xym"),
sym.UInt64.fromUint(1000000),
),
],
sym.EmptyMessage, //メッセージ無し
networkType,
);
tx2 = sym.TransferTransaction.create(
undefined,
alice.address, // Aliceへの送信
[],
sym.PlainMessage.create("thank you!"), //メッセージ
networkType,
);
aggregateArray = [
tx1.toAggregate(alice.publicAccount), //Aliceからの送信
tx2.toAggregate(bob.publicAccount), // Bobからの送信
];
//アグリゲートボンデッドトランザクション
aggregateTx = sym.AggregateTransaction.createBonded(
sym.Deadline.create(epochAdjustment),
aggregateArray,
networkType,
[],
).setMaxFeeForAggregate(100, 1);
//署名
signedAggregateTx = alice.sign(aggregateTx, generationHash);
tx1,tx2 の 2 つのトランザクションを aggregateArray で配列にする時に、送信元アカウントの公開鍵を指定します。 公開鍵はアカウントの章を参考に事前に API で取得しておきましょう。 配列化されたトランザクションはブロック承認時にその順序で整合性を検証されます。 例えば、tx1 で NFT を Alice から Bob へ送信した後、tx2 で Bob から Carol へ同じ NFT を送信することは可能ですが、tx2,tx1 の順序でアグリゲートトランザクションを通知するとエラーになります。 また、アグリゲートトランザクションの中に 1 つでも整合性の合わないトランザクションが存在していると、アグリゲートトランザクション全体がエラーとなってチェーンに承認されることはありません。