但是要是将这些数据变成可用的数据,就是将这写数据变成可用的查询字段,比如 Blockheader 包含的字段,Block Body 包含的字段,智能合约的 Log 的字段等,交易的 Trsaction 字段等,不同字段对应着不同类型。
Log 是非常重要的数据,因为以太坊的智能合约运行在 EVM 中,与外界隔离,EVM 发生的事件就是通过 Log 传输到外面并记录在区块链上。实际上,像 Etherscan 这样的浏览器就是用过 Parity 客户端回放 EVM,拿到智能合约交易的记录(内部交易)。 许多区块链的结构也可以存储非交易数据,但是容量有限。比如比特币的 output 中的 OP_RETURN 字段就可以存储不超过 40 字节的数据。限制的原因在于放大增加这部分会影响区块链的性能。以太坊的区块头也有 Extra 字段可以用来写入数据,如这样的:
区块链并不合适进行文件的存储,以 IPFS 作为存储底层和区块链结合的方式是比较认可的,比如数据储存在 IPFS 中,但是数据的 Hash 值存在以太坊的状态数据库中。 缓存除了上链的交易外,以太坊还有一个保存在缓存中的数据,即 mempool 里面的排队数据。各个节点提交的交易都会被放入 mempool 交易池中,经过序列化、交易验证、过滤等步骤,最终选择合适的交易被矿工打包。交易池中有 Queue 和 Pending 两个 map,用来存储未验证交易和已验证交易。Queue 和 Pending 清理结束后,根据不同节点提交的交易,交易池要进行重构(由于分布式的原因),防止出现分叉。 以前交易池的数据没有那么重要,但是随着智能合约的交易占比提升,交易的排序有了更多的经济意义,所以已经有项目开始做类似的工作。
访问如何访问以太坊上的数据呢?一般是两种方式 : 远程访问以太坊的节点 使用 web3 或者是 JSON-RPC 的方式。JSON-RPC 是无状态的轻量级跨语言远程调用协议,文本传输的数据是 JSON 格式,传入和传回都是 JSON 格式。使用 JSON-PRC, 客户端发送 PRC 请求,就可以直接通过以太坊客户端,传回相应数据,比如使用对应字段,eth_gasPrice, eth_blocknumber 等。 (责任编辑:admin) |