区块链blockchain Task 3

一、以太坊客户端

1.1、什么是以太坊客户端

以太坊客户端是一个软件应用程序,它实现以太坊规范并通过p2p网络与其他以太坊客户端进行通信。如果不同的以太坊客户端符合参考规范和标准化通信协议,则可以进行相互操作。
以太坊是一个开源项目,由“黄皮书”正式规范定义。除了各种以太坊改进提案之外,此正式规范还定义了以太坊客户端的标准行为。
因为以太坊有明确的正式规范,以太网客户端有了许多独立开发的软件实现,它们之间又可以彼此交互。

1.2、基于以太坊规范的网络

存在各种基于以太坊规范的网络,这些网络基本符合以太坊“黄皮书”中定义的形式规范,但它们之间可能相互也可能不相互操作。
这些基于以太坊的网络中有:以太坊,以太坊经典,Ella,Expanse,Ubiq,Musicoin等等。
虽然大多数在协议级别兼容,但这些网络通常具有特殊要求,以太坊客户端软件的维护人员、需要进行微小更改、以支持每个网络的功能或属性

1.3、太坊的多种客户端

go-ethereum ( Go ) 官方推荐,开发使用最多

parity ( Rust ) 最轻便客户端,在历次以太坊网络攻击中表现卓越

cpp-ethereum (C++)

pyethapp (python)

ethereumjs-lib ( javascript )

EthereumJ / Harmony ( Java )

1.4、以太坊全节点
全节点是整个主链的一个副本,存储并维护链上的所有数据,并随时验证新区块的合法性。
区块链的健康和扩展弹性,取决于具有许多独立操作和地理上分散的全节点。每个全节点都可以帮助其他新节点获取区块数据,并提供所有交易和合约的独立验证。
运行全节点将耗费巨大的成本,包括硬件资源和带宽。
以太坊开发不需要在实时网络(主网)上运行的全节点。我们可以使用测试网络的节点来代替,也可以用本地私链,或者使用服务商提供的基于云的以太坊客户端;这些几乎都可以执行所有操作。

1.5、远程客户端和轻节点
远程客户端

不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到现有网络,MetaMask 就是一个这样的客户端。
轻节点

不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证。
全节点的优缺点

优点
为以太坊网络的灵活性和抗审查性提供有力支持
权威地验证所有交易
可以直接与公众区块链上的任何合约交互
可以离线查询区块链状态(账户、合约等)
可以直接把自己的合约部署到公共区块链中
缺点
需要巨大的硬件和带宽资源,而且会不断增长
第一次下载往往需要几天才能完全同步
必须及时维护、升级并保持在线状态以同步区块
公共测试网络节点的优缺点
优点

一个testnet节点需要同步和存储更少的数据,大约10GB,具体取决于不同的网络
一个testnet节点一般可以在几个小时内完成同步
部署合约或进行交易只需要发送测试以太,可以从”水龙头“免费获得
测试网络是公共区块链,有许多其他用户和合约运行(区别于私链)
缺点
测试网络上使用测试以太没有价值。因此无法测试交易对手的安全性,因为没有任何利害关系
测试网络上的测试无法涵盖所有真实主网特性。例如:交易费用虽然是发送交易所必需的,但由于gas免费,因此 testnet上往往不会考虑。而且一般来说,测试网络不会像主网一样经常拥堵
本地私链的优缺点
优点

磁盘上几乎没有数据,也不同步别的数据,是一个完全干净的环境
无需获取测试以太,可以分配任意以太,也可以随时自己挖矿获得
没有其他用户与合约,无外部干扰
缺点
没有其他用户意味与公链的行为不同,发送的交易并不存在空间或交易顺序的竞争
除自己之外没有矿工意味着挖矿更容易预测,因此无法测试公链上发生的某些情况
没有其他合约意味着必须部署要测试的所有内容,包括所有的依赖项和合约库
JSON-RPC

以太坊客户端提供了API 和一组远程调用(RPC)命令,这些命令被编码为 JSON。这被称为 JSON-RPC API。本质上,JSON-RPCAPI 就是一个接口,允许我们编写的程序使用以太坊客户端作为网关,访问以太坊网络和链上数据。
通常,RPC 接口作为一个 HTTP 服务,端口设定为 8545。出于安全原因,默认情况下,它仅限于接受来自localhost 的连接。
要访问JSON-RPC API,我们可以使用编程语言编写的专用库,例如JavaScript的 web3.js。
或者也可以手动构建HTTP请求并发送/接收JSON编码的请求,如:

curl -X POST -H "Content-Type:application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' http://127.0.0.1:8545

3、Geth 控制台命令

Geth Console 是一个交互式的 JavaScript 执行环境,其中 > 是命令提示符,里面内置了一些用来操作以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。
这些对象主要包括:
eth:主要包含对区块链进行访问和交互相关的方法;
net:主要包含查看 p2p 网络状态的方法;
admin:主要包含与管理节点相关的方法;
miner:主要包含挖矿相关的一些方法;
personal:包含账户管理的方法;
txpool:包含查看交易内存池的方法;
web3:包含以上所有对象,还包含一些通用方法。
常用命令有:
personal.newAccount():创建账户;
personal.unlockAccount():解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.getTransaction():获取交易;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
admin.addPeer():连接到其他节点
。。。好难,学不动了o(╥﹏╥)o
尚硅谷的全套链接https://www.bilibili.com/video/BV1NJ411D7rf?from=search&seid=2622726291242027832

上一篇:[Blockchain] 安装 Cosmos Starport 的三种方式


下一篇:通过实践学习区块链知识