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

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

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

2人の参加者間におけるアグリゲートトランザクションの例

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

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

要求されている参加者全員が署名をすると、アグリゲートトランザクションは コンプリート になります。

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

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

アグリゲートボンド

アグリゲートトランザクションは、他の参加者からの署名が必要な場合に ボンド となることを考慮してください。

注釈

アグリゲートボンドトランザクション を送信する前に、アカウントは ハッシュロックトランザクション をアナウンスして承認されており 10 cat.currency をロックしなければなりません。

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

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

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

アグリゲートボンドトランザクションサイクル

支払の送信

Dan は2つの転送トランザクションを集約したアグリゲートトランザクションをアナウンスします。

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

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

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

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

この例では、Alice はチケットを currency:euro モザイク で購入しています。チケット販売者はアグリゲートトランザクションに署名し、交換はアトミックに起こります。

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

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

他人の手数料を支払う

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

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

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

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

他人の手数料を支払う

ガイド

スキーマ

注釈

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

AggregateTransaction

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

バージョン: 0x01

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

インライン

Transaction

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

DetachedCosignature

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

インライン

プロパティ タイプ 説明
parentHash 32 bytes (binary) 署名するアグリゲートボンドトランザクションハッシュ

Cosignature

プロパティ タイプ 説明
signer 32 bytes (binary) 連署者の公開鍵
signature 64 bytes (binary) トランザクションの署名

HashLockTransaction

Alias: LockFundsTransaction

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

十分な資金がロックされた後、アグリゲートトランザクションをアナウンスして部分トランザクションキャッシュに追加することができます。

注釈

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

アグリゲートが完了すると、ロックされた資産は最初のハッシュロックトランザクションに署名したアカウントで利用可能になります。

すべての連署者によって署名されずにアグリゲートボンドトランザクションが期間に達した場合、ロックされた資産はブロックのハーベスタによってロックの有効期限が切れるブロック高でハーベストされ報酬となります。

バージョン: 0x01

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

インライン

プロパティ タイプ 説明
mosaic Mosaic ロックモザイク 10 cat.currency 以上必要です。
duration uint64 ロック期間。期間は 2 日までとすることができます。
hash 32 bytes (binary) モザイクをアンロックする前に、アグリゲートボンドトランザクションハッシュが承認されていなければなりません。