以太坊下链优化方案的探讨

由于其自身的特性,以太坊随着区块数只增加不减少。这就导致以太坊区块的规模随着交易的进行而越来越臃肿。越来越臃肿就会导致从以太上查询和读取数据(又称为“下链”)的难度越来越大,耗时越来越久,十分不方便。因此,设计出耗时较短的下链方法就显得很有必要和价值了。
本文主要讨论三种基于Python的下链方法。这三种下链方法目前只能用最后一种,因为前两种存在不同的问题和弊端。但是本着技术分享交流的视角,这里还是要分别展开讨论一下。

一、探索JSONRPC的底层调用方式以及Geth的源码

(一)、探索JSONRPC的底层调用方式

Python使用以太坊的方式是通过ethjsonrpc的包来实现的。其基本原理是Python通过RPC的方式使用curl命令来调用以太坊的接口。例如,使用eth_blockNumber()方法就能获得当前整个以太坊的区块总数。其运作原理如下:
// Python使用eth_blockNumber()方法后,该方法内部通过RPC执行以下请求

curl –X POST --data '{"jsonrpc": "2.0", "method":"eth_blockNumber", "params": [],"id": 83}'

// 执行上述的curl请求后,获得返回的JSON数据元,从中提取所需要的result并转换// 为十进制,就是eth_blockNumber()方法最终要返回的结果。

{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0x4b7" // 1207
}

搞懂JSONRPC的运行原理之后,我们就可以考虑寻找能够根据区块链固有属性——哈希表来寻找以太坊的JSONRPC方法库里是否有快速的查询检索方式。具体内容详见:
https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newblockfilter
经过寻找,遗憾的是我们只找到了eth_getTransactionCount()这一个只能获得某一个账户发出的所有交易的数目的方法,没有找到可以查询某一账户发出或收到的所有交易的数目、交易哈希码等重要信息的方法。
所以这个方式行不通,需要考虑更为底层的办法,即从Geth源码里寻找可以查询某一账户发出或收到的所有交易的数目、交易哈希码等重要信息的方法。

(二)、探索Geth的源码

因为要使用当下正在运行的以太坊,我们不能通过修改源码的方式自己创造一个实现快速查询检索功能的方法,只能在现实运行的以太坊版本对应的源码中找到并使用。依旧很遗憾,源码里没有提供实现我们需要的功能的方法。源码的链接如下:
https://github.com/ethereum/go-ethereum/blob/master/ethclient/ethclient.go
因此,我们需要另辟蹊径转换一下思考方向。

二、使用其他存储方式暂时存储上链信息

这是比较容易想到的办法。我们可以使用本地文件、本地数据库等方式把我们每次上链的信息例如交易发出方账号、交易接受方账号以及交易哈希码这三个信息存起来。之后下链的时候不从整个以太坊上遍历而是从存有上述信息的本地存储方式里读取数据并遍历。
这样能够节省很多不必要的时间开销,可是,这违背了使用以太坊的宗旨——避免上链信息的不可更改性。因为在本地存储的信息可以让使用者随意更改。
所以,这条方案在实现宗旨上行不通。

三、设置合理的区块查询区间

既然前两种方法都行不通,我们就需要再从其他途径考虑另外一种方法。通过实际上链操作,我们发现整个以太坊的总区块数增长速度不快。所以,我们完全可以考虑不从头到尾遍历整个以太坊而是从某个位置开始,这样能在一定程度上减少不少时间消耗。
虽然这个方案也有不完善的地方,但是它是目前三者中最可行的,而且也是最容易实现的。这个方法可以暂时地缓解问题,但不是长久之计。

最后,欢迎广大以太坊玩家和爱好者提出更好的、创新的、高效的方法,我们共同进步成长!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值