中文
  • English
世链APP
Download Now
首页 > 世链号 > 在以太坊 P2P 网络中寻找 Dapp 服务节点
以链之名  

在以太坊 P2P 网络中寻找 Dapp 服务节点

摘要:Dapp 服务节点即开启了 RPC 的以太坊节点,对于钱包来说,只需要能把用户签名的交易发送出来,自己搭建节点和使用别人的节点发送数据是一样的,目前不管是快速同步还是轻节点都需要好长时间才可以达到可用的要求,为此很有必要通过 P2P 网络查找可用的 RPC 节点。

此文主要介绍如何从分布式网络中获取节点,然后尝试 RPC 连接,连接上后做 chainId 和 networkId 判断,尝试获取多个和以太坊主网一致的节点做备用服务节点。

P2P

这两个模块最先接触到的是 P2P, 记得那时候对区块链只是了解皮毛,有个面试官问了我什么是 KAD,多节点连接的时候如何判断对方 是否在线。对于从未接触这方面内容的我,支支吾吾随便说了一些。后来了解到他们是基于 以太坊 二次开发的,而以太坊 Devp2p 中的节点发现使用了 KAD,一种结构化的分布式网络,不过以太坊只利用 KAD 中节点距离做 节点分类,对获得的数据并没有 有效利用

ENODE

以太坊通过节点发现获得了很多 邻居节点,每个邻居节点的数据都以 Enode 展示的,Enode 中含有 公钥+IP 和端口,p2p 连接中会使用节点公钥做数据加密。

用法

p2p 一般对系统安全性要求较高,涉及到节点的随机加密连接,网络中收到的信息都需要验证。目前网络中发布的有 3 类信息。

  • 节点发现

    • pingpong,finnode,neighbor
  • 加密连接

    • rlpx,协议验证
  • 上层消息

    • 握手,发交易,发区块,区块 hash,获取区块

RPC

RPC 中的 api 想必做 Dapp 开发的一定特别熟悉,最常用的发送交易 eth_sendTransaction,查询收据 eth_getTransactionReceipt,查询余额 eth_getBalance,这些一定如数家珍。刚开始接触 RPC 是通过 nodejs 学习的,需要配置 web3 Provider, 以至于后来用 Go 发交易的时候写出来的代码跟以太坊 Go 客户端的完全不一样,Go 里面表示余额的 big.int 都用 string 表示,Go 客户端里有 ethclient,这个可以很方便的调用,根本不需要写蹩脚的代码。

开放 API

以太坊默认开放了如下 api,eth:1.0 net:1.0 rpc:1.0 web3:1.0 只要对方开启 rpc,并设置 rpcaddr 为 0.0.0.0,外部节点即可连接查询。Go 客户端在 web3.js 和 web3ext.go 中定义了 js 代码如何调用 rpc。

RPC 和 P2P

区别是一个面对 Dapp 用户需要对外提供某种服务,一个是区块链中的验证程序,需要保证网络的安全性。联系是 JSON RPC 的实现基于 TCP,而目前大多数 P2P 网络是基于 TCP 连接的。

站在用户的角度考虑,肯定要尽快的同步数据,并将交易发出去。

  • 快速同步,需要服务器,存储 20G,同步时间较长。

  • 轻节点同步 需要半小时以上,提供轻节点服务的节点较少

  • 此方案 几分钟内可查找到多个可用节点

此方案默认节点使用 8545 端口 , 如果使用是其他端口,目前没有较好方法获取,可使用 nmap 获取,尚未实现 IP 端口扫描。

p2p 的节点管理中当连 接数低于 8 个,会一直节点发现,我们可以拿到 源源不断的新节点 做 RPC 连接,直到找到满足要求的节点。

NetworkID

以太坊中 networkID 在 节点握手 的时候会判断,主网,测试网使用不同的配置,从而达到网络隔离。

ChainID

以太坊 EIP155 引入,在 The DAO 事件后,以太坊分叉出 ETC,为防止 重放攻击 引入,主网测试网的配置不一样。

syncing

RCP 查询 eth_syncing,只有同步完成的节点方可使用。

离线签名

离线签名可以将交易在 Dapp 端签名后发送到节点,由节点验证通过发送到区块链网络中,交易签名是用 账户私钥 签名交易的 TxHash,如果 交易被节点篡改,则签名验证无法通过,节点伪造签名和交易信息无意义。

来源链接:mp.weixin.qq.com
来源
科帆区块链

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。