アグリゲートトランザクション

アグリゲートトランザクションは複数のトランザクションを一つにまとめ、 トラストレスな交換 や高度なロジックを可能にします。NEM は一度きりの破棄可能なスマートコントラクトを生成することでこれを実現しています。

../_images/aggregate-escrow-1.png

2人の参加者間における AggregateTransaction の例

AggregateTransaction へ全ての アカウント が署名をすると、全てのインナートランザクションは同時に実行されます。

アグリゲートコンプリート

要求されている参加者全員が署名した場合、AggregateTransaction は コンプリート になります。

連署者はそのトランザクションに、ブロックチェーンを使うことなく署名することができます。必要な署名をすべて取得したら、彼らのうちの1人がネットワークにアナウンスできます。インナートランザクションのセットアップが正当で、バリデーションエラーがない場合、トランザクションは同時に実行されます。

アグリゲートコンプリートトランザクションは、複数のインナートランザクションを集めることで、ブロックへさらに多くのトランザクションを追加できます。

アグリゲートボンド

他の参加者からの署名が必要な場合、AggregateTransaction は ボンデッド になります。

注釈

AggregateBondedTransaction を送信する前に、アカウントは HashLockTransaction をアナウンスして承認されており 10 cat.currency をロックしなければなりません。

アグリゲートボンドがアナウンスされると、パーシャル状態になり、WebSocket または HTTP API 呼び出しによって状態を通知します。

連署者がトランザクションに署名し アグリゲートボンド連署をアナウンスする たびに、ネットワークは必要な連署者が署名しているかどうかをチェックします。すべての署名が取得されると、ネットワークがそれをブロックに含めるまで、トランザクションは未承認状態へ遷移します。

../_images/aggregate-bonded-transaction-cycle.png

AggregateBondedTransaction サイクル

複数のトランザクションを同時に送信

Dan は二つの転送トランザクションを集約した AggregateTransaction をアナウンスします。

Dan が唯一必須の署名者なので、署名した後にトランザクションはコンプリートと見なされます。これがネットワークへアナウンスされると、Alice と Bob は同時にモザイクを受け取るでしょう。

../_images/aggregate-sending-payouts.png

アグリゲート完了トランザクションによって支払を送信する

マルチアセットエスクロートランザクション

この例では Alice がチケットを currency:euro モザイク で購入しています。チケット販売者は AggregateTransaction に署名し、交換はアトミックに起こります。

../_images/aggregate-escrow-1.png

マルチアセットエスクロートランザクション

他人の手数料を支払う

Alice は 10 currency.euro を Bob へ支払うためにアプリで送ります。しかし彼女はブロックチェーンのトランザクション手数料を支払う分の cat.currency を持っていません。

AggregateBondedTransaction を作ることで、彼女は EUR を手数料のための cat.currency に替えることができます。これで Alice と Bob は cat.currency を購入したり保有することなく、ブロックチェーンを使うことができます。

アプリの製作者は、オープンソースの支払いアプリに独自ブランドを付けることができるので、Alice と Bob は彼らがブロックチェーンを使っていることすら知らないでしょう。

../_images/aggregate-paying-for-others-fees.png

他人の手数料を支払う

ガイド

スキーマ

注釈

設定パラメータは 編集可能 です。公開ネットワークでは異なる可能性があります。

AggregateTransaction

複数の転送トランザクションを集約するために AggregateTransaction をアナウンスします。

バージョン: 0x01

エンティティタイプ: 0x4141 (コンプリート), 0x4241 (ボンド)

インライン

Transaction

プロパティ タイプ 説明
payloadSize uint32 バイト単位のトランザクションのペイロードサイズ。つまりインナートランザクションすべてによって占有されている合計バイト数。
transactions array(Transaction, size=payloadSize) 内包されたトランザクションの配列です。AggregateTransaction は 1000 までのインナートランザクションを内包でき 15 までの連署者を設定できます。他のアグリゲートトランザクションをインナートランザクションとして内包することはできません。
cosignatures array(Cosignature, __FILL__) 連署者 トランザクションの配列。トランザクションの後ろの残りの本体スペースを埋めます。

DetachedCosignature

署名トランザクションは、まだ署名の揃っていない アナウンス済みの AggregateBondedTransactions への署名に使用します。

インライン

プロパティ タイプ 説明
parentHash Hash256 署名すべき AggregateBondedTransaction ハッシュ

Cosignature

プロパティ タイプ 説明
signerPublicKey Key 連署者の公開鍵
signature Signature トランザクションの署名

HashLockTransaction

Alias: LockFundsTransaction

AggregateBondedTransaction を送信する前に HashLockTransaction で資産をロックします。このトランザクションは決して完了しないトランザクションで部分キャッシュをスパムすることを防止します。

十分な資金 (デフォルトでは 10 cat.currency) がロックされた後、AggregateTransaction をアナウンスして部分トランザクションキャッシュに追加することができます。

注釈

アグリゲートとその HashLockTransaction に同じアカウントで署名する必要はありません。たとえば、ボブがアグリゲートをアナウンスしたいが HashLockTransaction をアナウンスするのに十分な資産がない場合、彼はアリスに署名された AggregateTransaction ハッシュを共有するハッシュロックファンドトランザクションを送信するように依頼できます。

アグリゲートが完了するとロックされた資金は最初の HashLockTransaction に署名したアカウントへ返還されます。すべての連署者によって署名されずに AggregateBondedTransaction が期限に到達した場合、ロックされた資産はブロックのハーベスタによってロックの有効期限が切れるブロック高でハーベストされて報酬となります。

バージョン: 0x01

エンティティタイプ: 0x4148

インライン

プロパティ タイプ 説明
mosaic UnresolvedMosaic Locked mosaic (10 cat.currency).
duration BlockDuration ロックを有効にするブロックの数。期間は 2 日までが許可されています。
hash Hash256 モザイクをアンロックする前に、AggregateBondedTransaction ハッシュが承認されていなければなりません。