Ⅰ 搭建geth私有链和联盟链网络
操作系统:linux或Mac OS
安装geth执行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum
直接创建两个geth的工作目录,用于之后的组建联盟链的使用:
mkdir eth-private1
mkdir eth-private2
首先 cd eth-private1 进入节点1的工作目录该目录下执行下面命令
geth --datadir data --nodiscover console (data是之后geth节点的数据目录,可自行修改)
使用geth自带的工具 puppeth 用于生成创世区块,过程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, please)
输入私链名称后,会出现二级菜单,现在2:配置一个新的创世快
What would you like to do? (default = stats)
再次出现二级菜单,让你选择共识机制(这里采用poa共识)
Which consensus engine to use? (default = clique)
Ethash - proof-of-work(PoW) :工作量证明,通过算力达成共识 (以太坊就是使用这种方式)
Clique - proof-of-authority(PoA): 权威证明、通过预先设定的权威节点来负责达成共识 (不消耗算力,一般用于私有链测试开发)
如果选择Pow的共识方法,直接输入1,回车即可。
如果选择PoA的共识方法,输入2后会提示让你选择处快的间隔时间,一般测试开发使用可以设置相对的将处快时间设置较少5秒即可,然后会让你选择哪个账户来作为权威生成区块(至少有一个,输入刚才创建的账户,若只是单节点就输入那个节点目录生成的地址,若想组建联盟链就填写生成的两个地址)
How many seconds should blocks take? (default = 15)
选择好共识机制后会让你指定给那些账号初始化ether(至少有一个),输入我们刚才创建的账户地址回车即可。
Which accounts should be pre-funded? (advisable at least one)
选择输入私有链的网络ID,任意数字即可(不能为1,1是公链),也可以不输入会给定一个随机数作为私有链的网络ID
Specify your chain/network ID if you want an explicit one (default = random)
选择导出创世区块配置文件
选择导出创世区块配置文件的保存路径,可以保存到当前目录,直接按回车即可
Which file to save the genesis into? (default = my-private-chain.json)
INFO [02-09|14:56:33] Exported existing genesis block
这样就完成了创世区块文件的配置了,直接退出puppeth即可。
输入命令 geth --datadir data init private.json 其中data自己制定,private.json就是刚才生成的创世区块
若出现如图错误:
输入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 进入控制台
--datadir data:节点的数据目录
--syncmode full:块同步的方式(若只是单节点可不填)
--port 2001: 网卡监听端口
--networkid 1234:网络标识符
--rpc:开启rpc服务
--rpcport "8545":rpc服务的端口
--rpccorsdomain "*":允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--rpcaddr "0.0.0.0" :HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcapi "db,eth,net,web3,personal,admin,clique":基于HTTP-RPC接口提供的API(私有链可以任意开发,公有链需要谨慎)
--nodiscover:不允许节点自动加入
若想搭建联盟链,必须保证创世区块一致,进入到刚才创建的eth-private2的目录
将之前生成的创世区块拷贝过来,初始化创世区块,然后使用启动命令启动分别启动两个节点,进入控制台,使用 admin.nodeInfo 命令获取节点的信息
总结:
两个服务器部署两个节点是可以联通的,但是只能使用两个节点对应的地址进行挖矿,所以只能是两个节点对应两个地址进行挖矿,使用poa共识,当一个节点挂掉,挖矿停止,因为poa共识挖矿必须超过50%的节点进行钱增,现在只是两个节点,挂掉一个节点挖矿就会停止等待另一个节点的确认,停掉的节点可以通过正常运作的节点信息重新连接到网络中。
问题:
同步块有可能报错情况:
1:Synchronisation failed "retrieved hash chain is invalid" 解决目前找到的方法是removedb 数据目录 ,重新init创世区块
2:内存溢出初步确认为开启rpc服务造成的,有可能服务器恶意被黑,暴力破解密码,占有内存,解决,将服务器的ip设置一条防火墙
若存在问题可给本人留言或访问本人的github: https://github.com/qi-shuo/geth-document 记录了一些本人搭建使用的命令
Ⅱ Go-Ethereum: 编译运行
go-ethereum 需要go版本不低于 1.7 , 文章最后介绍了如何卸载低版本的举蔽go
sudo ln -s /usr/lib/go-1.10/bin/go /usr/bin/go 通过软链的方式把go 放到全局戚滚环境变量中
查看go版本 go version
生成 执行文件 ./build/bin/geth
nohup ./build/bin/geth --datadir /mnt/eth &
sudo mv ./build/bin/geth /usr/local/bin/
eth有三种同步方正仔州式:
默认是 fast , 如果同步全部数据 geth --syncmode full
geth Ethereum node to run automatically on Ubuntu
sudo supervisorctl reload
参考:
https://github.com/golang/go/wiki/Ubuntu
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
Ⅲ geth以太坊客户端轻节点模式启动怎么与全节点启动的geth连接
一般来说,Undefined index就是自己编写过程中出现了的的确确的写法问题notice一般提示关于与执行代码没有直接关系的错误,但不要忘记,notice有时会返回一些多余的错误信息
Ⅳ 什么是ZK-Rollup(零知识汇总)
ZK-Rollup(零知识汇总)基于zero-knowledge proof(零知识证明),在发往主链的交易包里包含了一个对应的零知识证明,主链上的rollup(汇总)智能合约只需验证这个零知识证明。
这个零知识证明不会透露任何交易细节,但能通过与智能合约不断交互,证明上链的所有数据的有效性和真实性。
优点:
l高度的去中心化
l隐私性好:零知识证明不会透露任何交易细节
l上链效率高:一次性提交多笔操作的结果,节约时间和gas fee
l验证效率高:无需等待期,快速完成资产取出动作
l安全性极高:zk技术保证了提交给主链的数据真实有效,同时主链可随时还原侧链发生的交易细节(即拥有主链的数据可用性),因此拥有以太坊级别的安全性
缺点:
l技术开发难度大
l难兼容不同智能合约
l需要大量运算
代表项目:
l路印:成熟的zk技术运用,获得4500万美元私募,当前市值超8亿美元
lZKSync:旨在为以太坊带来 Visa 级别、每秒数千笔交易的吞吐量
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
Ⅳ 轻用户是什么意思
什么是轻客户端?为什么你需要了解它
播报文章
在以太坊的案例中,过去只有一种类型的节点,现在称为全节点。这个软件负责验证和转播网络上的交易和区块。由于无信任环境(开放的互联网)和区块链的性质,每个全节点需要下载并验证每个区块,所以就是在每个区块中验证每一笔交易。
Parity Ethereum 和 Geth 这两个最受欢迎的以太坊客户端,今天都可以在一台中等功率的笔记本电脑上运行。然而,下载和验证整个区块链的区块是需要时间和资源的。例如,现在需要使用 SSD 来完全同步以太坊区块链。HDD 无法跟上每秒所需的输入/输出操作。
全节点使用案例
现在,组织和个人运行全节点是因为他们的业务需要。想想矿工、区块浏览器、交易所。个人用户可能希望运行全节点,因为这是与区块链交互的最安全方式。在一个更小的范围内,他们也可能是纯粹的利他主义来帮助网络。7*24 小时全天候的运行一个全节点需要良好的知识和资源水平,大多数用户不愿意投资是可以理解的。除了矿工,没有什么内置的激励来运行一个全节点,尽管这部分基础设施对网络至关重要。
因此,大多数与区块链交互的用户,不管是否自愿,都会使用一个中心的基础设施。最流行的软件钱包默认依赖于第三方托管的节点。这些客户端连接到远程节点,并以非密码验证的方式完全信任其响应。它的积极方面显然是增强了用户体验,因为这些钱包的用户不需要运行自己的节点。但是,它们被迫信任第三方节点。默认情况下,Metamask、MyEtherWallet 和 MyCrypto 连接到远程节点,但如果用户愿意,仍然允许他们连接到自己的本地节点。这不是 Jaxx 或 Exos 钱包的情况,它们默认连接到远程节点,而没有连接到用户自己的本地节点的选项。这里没有提到移动钱包,因为手机无法运行全节点。
像 Infura 这样的公司致力于运行全节点,并免费提供给那些需要它们的人。抽象出同步一个全节点的麻烦,允许任何用户轻松地访问区块链。这样的解决方案有助于让更多用户能够访问以太坊。然而,尽管这一举措是对生态系统的一个重大补充,但它代表了一个中心化的单一失败点,与去中心化的区块链理念背道而驰。直到几个月前,钱包开发商还没有其他选择。
“我们的目标是创建一个兼容不同程度‘轻’的协议,从几乎不存储任何内容的客户端到几乎存储所有内容的客户端。”
— PIP, Parity Light Protocol(https://wiki.parity.io/The-Parity-Light-Protocol-%28PIP%29)
轻量级替代方案:轻客户端
轻客户端或轻节点是连接到全节点与区块链交互的软件。与全节点对应节点不同,轻节点不需要运行 24/7 或读写区块链上的大量信息。事实上,轻客户端并不直接与区块链交互,而是使用全节点作为中介。轻客户端依赖于全节点去执行许多操作,从请求最新的区块头到请求帐户中的余额。
轻客户端协议的设计方式允许它们以最小信任的方式与全节点交互。这是一个需要理解的关键方面,因此让我们回顾一下以太坊区块链的基础知识:
1. 普通用户使用全节点、轻节点或受信任的远程节点在网络上发送交易。
2. 全节点从网络上的对等节点接收交易,检查这些交易的有效性,并将它们广播到网络。
3. 矿工是连接到特定软件的全节点。他们像一个普通的全节点一样从网络上接收和验证交易,但是会额外投入大量的精力来寻找问题的解决方案,才会被允许生成下一个区块。矿工使用的全节点通过应该将哪个区块添加到区块链并构建在其上达成共识。任何在其上构建了至少 10 个块的块都被认为是安全的,因为它包含的交易被还原的概率非常低。
现在,回到我们的轻客户端。作为起点,轻客户端需要下载区块链的区块头。轻客户端不需要为它对全节点的每个请求去信任全节点。这是因为区块头包含一个名为 Merkle 树根的信息。Merkle 树根就是区块链上有账户余额和智能合约存储的所有信息的指纹。如果有任何微小的信息改变,这个指纹也会改变。假设大多数矿工都是诚实的,那么区块头和他们所包含的指纹就被认为是有效的。轻客户端可能需要从全节点请求信息,例如特定帐户的余额。轻客户端知道每个区块的指纹,就可以验证全节点给出的答案是否与其拥有的指纹匹配。这是一个强有力的工具,可以在事先不知情的情况下证明信息的真实性。
由于轻客户端需要发送多个请求来执行简单的操作,因此所需的总体网络带宽高于全节点的带宽。另一方面,所需的资源和存储量比全节点的资源和存储量低几个数量级,同时实现了非常高的安全级别。只需要大约 100MB 的存储空间和较低的计算能力,轻节点就可以在移动设备上运行!这意味着手机可以以去中心化的方式访问区块链。
因为只需要一个全节点的一小部分信息,所以一个轻节点可以更快地与区块链同步。目前,将整个以太坊主网区块链同步,轻客户端大约只需要一个小时,但节点同步超过几秒对任何应用程序来说都太多了。为轻客户端开发的解决方案可以快速与区块链顶部同步,尽管这些解决方案通常需要权衡。目前,轻客户端在其代码中内置了一个可信的区块链检查点。正因为如此,客户端只需要下载最新的区块头文件,就可以在几秒钟内实现同步。轻客户端用户信任客户端开发人员集成有效的检查点。这种折衷被认为是可以接受的,因为用户已经需要信任客户端实现的开发人员。为了以去中心化的方式快速执行同步,Parity Technologie 目前开发了一种替代解决方案,允许轻客户端以与全节点类似的方式执行扭曲同步(https://wiki.parity.io/Warp-Sync)。
未来,轻客户端会遍布各地。 — Marty McFly
轻客户端的挑战
轻客户端非常适合主流应用,例如发送一些交易和验证帐户余额。对轻客户端的主要批评是,轻客户端不能直接帮助网络。它们不验证除自己需要的信息以外的任何其他信息,也不从网络向其他对等节点提供或转播信息,它们使用来自全节点的资源,而不提供任何的回报。
与全节点相比,轻客户端提供了更好的最终用户体验,同时允许最终用户以去中心化的和安全的方式访问区块链。关键是要找到一种激励个人和机构的方式去运行全节点、服务轻节点、惩罚服务坏数据的恶意全节点。使轻客户端可持续发展的一种方法是让他们对全节点发出的每个请求执行小额支付。在不久的将来,轻客户端将在以太坊分片中扮演重要角色,让验证节点快速同步不同的分片。轻客户端还可用于报告恶意参与者(验证节点或 plasma 权限)。轻客户端对全节点的激励是一个活跃的研究领域,因为激励是生态系统稳定的关键。
有一些很有前途的想法可以让轻客户端快速同步,同时避免前面提到的折衷方案。一种想法是允许全节点提供最新的已知区块头的零知识证明(例如,zk-STARK https://eprint.iacr.org/2018/046.pdf)。然后,轻客户端可以验证它并与链的顶部同步,而无需事先知道区块链的状态。
总之,在短期内,轻客户端将成为去中心化应用程序的骨干,这对用户友好的分布式生态系统来说是一个非常好的消息。