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

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

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

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

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

Symbol パブリックネットワーク1,000 までのインナートランザクションを内包し、 25 の連署者を参加させたアグリゲートトランザクションをサポートしています。他のアグリゲートトランザクションをインナートランザクションとして内包することはできません。

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

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

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

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

アグリゲートボンド

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

注釈

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

アグリゲートボンドがアナウンスされると、パーシャル状態— 2日間 まで存続可能—になり、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 へ支払うためにアプリで送ります。しかし彼女はブロックチェーンのトランザクション手数料を支払う分の symbol.xym を持っていません。

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

Since the app creator can put its own branding on the open source payment app, Alice and Bob may not even know they are using blockchain technology.

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

他人の手数料を支払う

ガイド

トランザクションスキーマ

AggregateTransaction

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

バージョン: 0x01

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

インライン

Transaction

プロパティ タイプ 説明
transactionsHash Hash256 アグリゲートトランザクションのハッシュの集約
payloadSize uint32 バイト単位のトランザクションのペイロードサイズ。つまりインナートランザクションすべてによって占有されている合計バイト数。
aggregateTransactionHeader_Reserved1 uint32 AggregateTransactionHeader の終わりを 8 バイト境界に揃えた予約パディング
transactions array(Transaction, size=payloadSize) インナートランザクションの配列。他のアグリゲートトランザクションはインナートランザクションとして許可されていません。
cosignatures array(Cosignature, __FILL__) 連署者 トランザクションの配列。トランザクションの後ろの残りの本体スペースを埋めます。

DetachedCosignature

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

インライン

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

Cosignature

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

HashLockTransaction

Alias: LockFundsTransaction

AggregateBondedTransaction を送信する前に HashLockTransaction で一定のブロック量で資産をロックします。このトランザクションは決して完了しないトランザクションで部分キャッシュをスパムすることを防止します。ロック期間は 2日 までで、この値は ネットワーク ごとに設定可能です。

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

注釈

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

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

バージョン: 0x01

EntityType: 0x4148

インライン

プロパティ タイプ 説明
mosaic UnresolvedMosaic ロックされたモザイク
duration BlockDuration ロックが有効なブロックの数。
hash Hash256 モザイクをアンロックする前に、AggregateBondedTransaction ハッシュが承認されていなければなりません。

次項: アカウント制限