階層
※Layersの翻訳です
ネットワークの守護神(daemon)
目的:
Ethereumネットワークの基幹として、ネットワークの守護神は他のEthereumのノードに接続し、データを受け入れて共有することができなければならない。守護神は可能な限り手続き(plotocol)に関して中立的であるべきである。守護神をEthereum以外の任意の貨幣や暗号学的な手続きの実装のために転用しようとした際には何も修正しなくても転用できるのが理想的である。守護神は分散型サービス拒否攻撃(DDoS attack:distributed denial of service attack)を抑止する機能を有するべきである。可能ならばネットワーク上での活動に対する採点をIP毎に行い、単一のIPが1秒間に1回以上の要求を行えないようにすべきである。
界面(interface):
1.守護神が新しい通信文(message)を受信した場合(すなわち、受信した通信文のハッシュ値が従前に受信した全ての通信文のハッシュ値と異なる場合)には、必ずlocalhostの出力ポートに向けてデータを含めてPOST要求を送信すべきである。出力ポート番号はファイル~/.ethereum/ethereum.confの中で設定することができる(設定されなかった場合の既定値は1242である)。
2.守護神は入力ポートにおいて待ち受けを行うべきである。入力ポート番号はファイル~/.ethereum/ethereum.confの中で設定することができる(設定されなかった場合の既定値は1243である)。POST要求形式の通信文を受信した場合には、ネットワーク上で接続している全てのノードに向けてデータを転送すべきである。
依存関係:
インターネット、初期ノード(bootstrapping node)
Ethereumの核
通信層
1.Process_network_message(string) -> msg 又は transaction 又は block
2.Create_network_message
入出力層(通常はデータベース)
1.Insert object(value) (key = sha256(value))
2.Get object (key) -> value
データ層
1.get_transaction
2.get_block
3.get_address_balance / nonce
4.get_contract_memory_at_index
5.get_contract_root
6.get_object (Merkle木の節など)
7.blockクラス
8.transactionクラス
管理者
1.get_latest_block
2.add_block(有効性の確認及び完全な難易度(difficulty)の計算)
3.apply_transactions_to_block(採掘者用)
施用層
1.財布
2.完全決済検証
3.簡易決済検証(simplified payment verification:SPV)
4.図式的なブロックの調査手段
5.採掘器
クラス
ブロッククラス
目的:
ブロッククラスはブロックのデータを構文解析し、ブロックを直列化し、ブロックに対する幾つかの更新操作を実行できるべきである。
界面:
1.deserialize: string -> void(コンストラクタ)
2.get_balance: number address -> number
3.get_contract_state: number address, number index -> number
4.update_balance: number address, number newbalance -> void
5.update_contract_state: number address, number index, number newvalue -> void
6.get_contract_size: number address -> number
7.serialize: void -> string
取引クラス
目的:
取引クラスは取引のデータを構文解析し、取引に署名し、取引を直列化できるべきである。署名のされていない取引に対する直列化は失敗するべきであるということに注意しなければならない。ブロックの内部で作成され、逆直列化されていない取引は実際には決して格納されたり、任意の形式によって直列化されたりするべきではない。
界面:
1.deserialize: string -> void(コンストラクタ)
2.sign: privkey -> void
3.serialize: void -> string
4.create: number address, number value, number fee, array[number] data -> void(コンストラクタ)
5.hash: void -> number
6.to, from, value, fee, data(取得及び設定が可能なメンバ変数)