全ての暗号通貨の中心となる要素は、ブロック同士がリンクした ブロックチェーン と呼ばれる公開台帳です。
チェーン内のブロックは順序付けられており、完了した トランザクション 履歴はブロックチェーンに保持されます。後に続くブロックは 1 づつ高さを増やしていきます。各ブロックには最大 6,000
のトランザクション (パブリックネットワーク) を含めることができ、この値は ネットワークごとに設定可能 です。
Symbol ブロックは 30
秒毎に完了し、日々の使用に対して十分にトランザクションを承認します。
ノードは次のようにブロックをシリアル化した形式で保存します:
Version: 0x01
EntityType: 0x8143
インライン
プロパティ |
タイプ |
説明 |
---|---|---|
height |
ブロックチェーンの高さ。各ブロックは一意な高さを持っています。後ろに続くブロックとは 1 だけ高さが異なります。 |
|
timestamp |
ネメシスブロックが生成されてから経過したミリ秒です。 |
|
difficulty |
以前のブロックに基づき、新しいブロックを見つけるのがどのくらい難しいかを決定します。 |
|
generationHashProof |
ジェネレーションハッシュプルーフ |
|
previousBlockHash |
前ブロックのハッシュ |
|
transactionsHash |
ブロック内トランザクションのハッシュ |
|
receiptsHash |
このブロックによって生成されたレシートのハッシュ |
|
stateHash |
このブロックでのグローバルチェーンステートのハッシュ |
|
beneficiaryAddress |
ハーベスタによって指定されたオプション受益者のアドレス。 |
|
feeMultiplier |
手数料乗数はブロックのトランザクションに適用されます。 |
|
blockHeader_Reserved1 |
uint32 |
BlockHeader の終わりを 8 バイト境界に揃えた予約パディング |
Symbol チェーンの原初ブロックを nemesis ブロック と呼びます。原初ブロックは新しいネットワークを起動する前に定義され、ネットワーク通貨モザイクの頒布を設定します。
後続する新しいブロックを生成するプロセスを ハーベスティング と呼びます。
ブロックは コンセンサスアルゴリズム により、インポータンススコアに基づいて選ばれた アカウント によって作成されます。コンセンサスアルゴリズムは各ブロックの作成後に後続ブロックをハーベストするための新しいアカウントを決定します。
ハーベスティングアカウントはブロックに追加されたトランザクションの 手数料 と インフレーション によって作成されたモザイクを受け取ります。これはハーベスタはできるだけ多くのトランザクションをブロックに追加するためのインセンティブを与えます。
速い応答時間を確保するために、Symbol ブロックチェーンは、ネットワーク障害またはパーティションが存在する場合でも、要求に応答し、トランザクションがブロックチェーンに追加されるように設計されています。
このことは当然のことながら フォーク を発生させます。つまり、ネットワークで切断された部分に異なるチェーンが作成されます。接続が回復すると フォーク解消 が行われ、分岐したチェーンがひとつにマージされます。
このプロセスでは一部のブロックを ロールバック する必要がある可能性があります。ブロックチェーンから削除されるブロックが存在するため、すべてのトランザクションは 未承認 状態に移行し、再び validated になる必要があります。この時に、それらの期限は再確認されることなく、期限切れになる可能性があります。
このため以下に示すように、ブロックが finalized になるまで 承認済み のトランザクション (ブロックチェーンへ追加されている) でも信頼できません。
これはブロックチェーン台帳の変更を永続的にするプロセスです。ブロックがファイナリティに到達する前に、ネットワーク障害またはパーティションが存在する場合、ブロックをロールバックする必要になる可能性があります。しかし、ブロックがファイナライズされると、それらは不変となります。
ファイナライズはラウンドで行われます。各ラウンドで ソートアルゴリズム は、ファイナライズを保留しているすべてのブロックの検証を担当するアカウントを選択します。提案されたブロックがアカウントのノードのレコードと一致する場合、そのアカウントは肯定的な票を投じます。
投票のために選出された ステークの67%以上 が賛成票を投じると、ブロックはファイナライズされます。その時点で、ブロックにリンクされたトランザクションはブロックチェーンへ永続的に記録されます。
注釈
有権者としての資格を得るには、アカウントが次の条件を満たしている必要があります:
ノードの所有者になります。
最低 minVoterBalance ネットワーク通貨単位が必要です。
VotingKeyLinkTransaction をネットワークに通知することで有権者として登録されます。
接続性が低い場合、または多くの不正なアクターがいる場合、ファイナライズは通常より時間がかかり、大きな ロールバック が作成される可能性があります。ただし、ファイナライズされたブロックはロールバックされません。
したがって、ブロックチェーン履歴の不変性に依存するクライアントは ファイナライズされたブロックのトランザクション のみを信頼するべきです。
ファイナライズラウンドは実際には エポック と呼び、 1440 ブロック または約 12 時間 ごとに発生します。(ネットワークプロパティ の votingSetGrouping
を参照) 各エポックは複数の ファイナライズポイント に分割されます。(詳細は Technical Reference セクション 15.2 を参照)