トランザクション

一般的にトランザクションとはデータベースシステム内での作業単位を表します。ブロックチェーンにおいては、 アカウント によって署名されたアクションが、それ自身の状態を変えるときを指します。

トランザクションはネットワークに受理され、 ブロック に恒久的に保存されます。

トランザクションタイプ

異なる種類のトランザクションがあります。例えば、 モザイク をアカウント間で転送できたり、アカウントの所有権を転送または構築( マルチシグ ルールも含めて)などたくさんあります。

Id タイプ 説明
モザイク    
0x414D Mosaic Definition Transaction 新しい モザイク を登録します。
0x424D Mosaic Supply Change Transaction 既存モザイク供給量の変更をします。
ネームスペース    
0x414E Register Namespace Transaction あなたの資産を編成するために ネームスペース を登録する。
0x424E Address Alias Transaction アカウントにネームスペースをアタッチする。
0x434E Mosaic Alias Transaction ネームスペースをモザイクにアタッチする。
Transfer    
0x4154 Transfer Transaction モザイクとメッセージを2つのアカウント間で送信します。
Multisignature    
0x4155 Modify Multisig Account Transaction マルチシグコントラクト の作成または変更。
0x4141 Aggregate Complete Transaction 異なるアカウントにトランザクションをバッチ送信します。
0x4241 Aggregate Bonded Transaction 異なるアカウント間でたくさんのトランザクションを提案します。
0x4148 Hash Lock Transaction アグリゲートボンドトランザクションをアナウンスする前のデポジットをします。
Cosignature Transaction アグリゲートボンドトランザクションへ連署します。
Account filters    
0x4150 Account Properties Address Transaction 与えられたアドレスを含む受信トランザクションの許可/ブロックします。
0x4250 Account Properties Mosaic Transaction 与えられたモザイクを含む受信トランザクションの許可/ブロックします。
0x4350 Account Properties Entity Type Transaction トランザクションタイプによる送信トランザクションの許可/ブロックします。
クロスチェーンスワップ    
0x4152 Secret Lock Transaction 異なるチェーン間での トークンスワップ の開始。
0x4252 Secret Proof Transaction 異なるチェーン間でのトークンスワップの完結。
リモートハーベスティング    
0x414C Account Link Transaction Delegates the account importance to a proxy account to enable delegated harvesting.

トランザクションの定義

すべてのトランザクションは共通のプロパティを共有しています。各トランザクションは transaction schema definition を継承し、タイプごとのプロパティを追加して拡張されています。

Transactions are defined in a serialized form. We recommend to use the NEM2-SDK to define transactions.

手数料

トランザクションには関連コストがあります。コストはネットワークを安全に保ち、インフラを運用している ハーベスタ へのインセンティブの提供として必須です。

トランザクションに関連する手数料は、主としてトランザクションのサイズにより異なります。実効手数料は、トランザクションのサイズと、ハーベスタによって設定された手数料の乗数の積です。ノードの所有者はこの後者の値を、ゼロを含む正の値に設定できます。

effective_fee = transaction::size * block::fee_multiplier

トランザクションの送信者は、トランザクションの定義中に max_fee を指定しなければならず、これはアカウントがこのトランザクションに費やすことのできる最大手数料を意味します。

effective_feemax_fee 以下の場合、ハーベスタはトランザクションをブロックに含めることを選択できます。 fee_multiplierブロックヘッダ に格納され、含まれているすべてのトランザクションに対して支払われた実効手数料がどれであるかを解決することができます。

ハーベスティングノードはトランザクション包含ストラテジーを決定することができます。

  • Prefer-oldest:高いトランザクションスループットが要求されるネットワークに適しています。最も古いトランザクションを最初に含めます。
  • Minimize-fees: 慈善事業なノード。他のノードが含めたくない最初のトランザクションを含めます。
  • Maximize-fees: パブリックネットワークで最も一般的です。より高い手数料の最初のトランザクションを含みます。

デフォルトでは、手数料はNEMネットワークの基軸通貨である XEM で支払われます。プライベートチェーンでは、手数料を無くすためにネットワークの設定を編集したり、ニーズに合った別の モザイク定義 を使用したりできます。

トランザクションへの署名

アカウントはトランザクションをネットワークにアナウンスする前に、トランザクションに署名する必要があります。 トランザクションに署名 することは、定義されたとおりにネットワークの状態を変更することにアカウントが同意したと示されます。

例えば、転送トランザクションには受信者が誰であるかと、転送するモザイクの量が記述されます。この場合、トランザクションに署名するということは、それらのモザイクをあるアカウントの残高から他方のアカウントに移動することに同意することを意味します。

アカウントは、その秘密鍵で 定義されたトランザクションの前 100 バイトへ署名した 署名を生成します。すると署名がトランザクションの本文に追加され、署名付きトランザクションが生成されます。

シリアライズされたトランザクションに sha3-256 アルゴリズム が適用されると、トランザクションのハッシュが生成されます。

トランザクションのアナウンス

署名済みトランザクションはネットワークへアナウンスする準備ができています。

../_images/transaction-cycle.png

トランザクションサイクル

トランザクションのアナウンス をすると、REST API は常にOKをすぐに返します。この時点ではトランザクションが正当かどうかは不明です。

バリデーションの初回ステージは API ノードで行われます。トランザクションが何らかのエラーを含んでいる場合、WebSocket はステータスチャンネルへ通知を投げます。良いケースの場合、トランザクションは P2P ネットワークへ 未承認 ステータスとして到達します。未承認状態のトランザクションを信頼してはいけません。2つ目のバリデーションを通過しないといけないので、これがブロックに取り込まれるかどうかは不明です。

トランザクションがハーベストされたブロックに追加される前に、2つ目のバリデーションは完了します。妥当な場合、ハーベスターはブロックにトランザクションを保存し、それは 承認済み のステータスとなります。

前述した事例の続きとして、そのトランザクションが処理され、設定された総量が署名者のアカウントから受信者のアカウントへ振り込まれた状態になります。さらに、トランザクション手数料は署名者のアカウントから差し引かれます。

この時点でトランザクションの 承認数はゼロ です。ブロックチェーンに別のブロックが追加されると、トランザクションは1つ目の承認を得ます。チェーンに追加された次のブロックが2つ目の承認を与え、続いていきます。

ロールバック

ブロックチェーンは特定の状況下において、最近のブロックをロールバックする必要があるように設計されています。これらはブロックチェーンのフォークを解決するために不可欠なものです。

「書き換え制限」 とはロールバック可能なブロックの最大数です。したがって、フォークは特定の深さまでしか解決できません。

NEMの書き換え限界は 360 ブロックです。トランザクションが 360 ブロック以上の承認を得ると、それを元に戻すことはできません。

経験上、コードや攻撃のバグによりブロックチェーンに重大な問題がない限り、20ブロックよりも深いフォークは起こりません。

ガイド

スキーマ

トランザクション

インライン

プロパティ タイプ 説明
max_fee uint64 トランザクションに最大の手数料を支払うことが許可されています。
deadline uint64 トランザクションがブロックチェーンに取り込まれるまでの最大時間

EmbeddedTransaction

インライン

SizePrefixedEntity

プロパティ タイプ 説明
size unit32 トランザクションのサイズ