【译】以太坊网络守护进程

By | 2018年7月14日

Networking daemon(以太坊网络守护进程)

原则:作为以太坊网络的支柱,守护进程必须能连接上其他的以太坊节点,并接收和分享数据。而守护进程自己在这个过程中又应该尽可能地保持中立,并应该可在不进行改动的情况下成为任何货币或加密协议的一部分。它还需要能够抵抗DDoS的能力。

接口:

  1. 每当守护进程收到一个新消息时(即,H(M)与之前收到的任何Mpriv的H(Mpriv)都不相等),他都要发送一个POST请求到http://localhost:端口号(可以在~/.ethereum/ethereum.conf 文件中进行配置,默认值为1242)
  2. 守护进程需要监听被监听端口(这个输入端口可以在~/.ethereum/ethereum.conf 文件中进行设置,默认值为1243),如果在这个端口收到了一个包在post请求里的信息(message),这个进程需要把信息推送到网络中的所有其他节点。

依赖:互联网,bootstrapping 节点

 

Ethereum Core(以太坊核心)

Communication layer(通信层)

  1. Process_network_message(string) -> 信息(msg)或交易(transaction)或区块(block)
  2. Create_network_message

IO Layer(输入输出层,通常是数据库)

  1. Insert object(value) (key = sha256(value))
  2. Get object(key) -> value

Data layer(数据层)

  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 trie nodes, etc)
  7. block class
  8. transaction class

Manager

  1. get_latest_block
  2. add_block(including validation and total difficulty calculation)
  3. apply_transactions_to_block(for miners);

Application Layer

  1. Wallet
  2. Full
  3. SPV
  4. Graphical block explorer
  5. Miner

 

Classes

Block class(区块类)

意图:区块类需要能够解析区块、序列化区块、处理对区块进行的某些更新操作

接口:

  1. deserialize(反序列化):string -> void(constructor)
  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

Transaction class(交易类):

意图:交易类需要能够解析交易、对交易签名、序列化交易。注意,序列化方法无法序列化没有签名的交易;在一个区块内创建的没有反序列化的交易永远不能被实际存储或序列化为任何格式。

接口:

  1. deserialize: string->void(constructor)
  2. sign: privkey -> void
  3. serialize: void-> string
  4. create: number address, number value, number fee, array[number] data -> void(constructor)
  5. hash: void -> number
  6. to, from, value, fee, data(accessible and settable member variables)

点击量:305

发表评论

邮箱地址不会被公开。 必填项已用*标注