以太坊哈希数据上链
❶ 一条数据是如何完成上链的
区块链处理的流程大致分为三个阶段:
分别是上链前处理阶段、链上处理阶段和智能合约处理阶段。
上链前处理阶段
业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲线的签名工具来完成,不过更多的时候是通过将各种工具集成的SDK来完成,以太坊的web3就是比较典型的上链前处理的开发工具。
上链处理阶段
处理完成的数据发送到区块链节点后,就形成了一笔区块链交易并进入上链处理的阶段,链上处理大体可分为交易广播和区块共识流程。
智能合约处理阶段
上链处理完成后,业务数据已经记录在链上了,对于单纯存证的业务来说,将业务信息写入区块已经完成了这笔业务处理,只需记录存证业务的交易哈希并在取的时候通过交易哈希查询即可。但是大部分业务场景都需要进行一定的逻辑处理,因此通过智能合约处理是必须的。智能合约处理包括合约逻辑处理以及修改状态梅克尔树等流程。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
❷ ENS发布前,听团队谈项目DAO治理,空投和Layer 2 规划
ENS DAO将决定交易费变更、金库用途等和.eth相关的一切事宜,任何代币持有人都可以参与DAO治理。
以太坊域名服务( Ethereum Name Service )是一个基于以太坊区块链的分布式、开放和可扩展的命名系统。通俗地说,ENS就是区块链中的域名系统。ENS域名让人们没有必要再复制或输入冗长的区块链地址。
ENSUser是社区自发维护的非官方ENS中文社区,维护了ensuser .com( ensuer.eth.link), 为中文世界的ENS用户和应用开发者提供了ENS相关的资讯、使用教程和文档教程。
2021年11月1日,ENS宣布发布治理代币,web3域名协议即将开启去中心化治理。
ENSUser邀请ENS运营主管Brantly.eth 做客社区,分享关于DAO治理、空投、Layer2拓展等一系列中文世界用户关心的问题。 以下为AMA回顾。
TLDR
ENS空投50%的代币将归属DAO本身。25%将提供给拥有.ETH名称的账户,另外25%将分配给在过去5年中以重要方式为ENS做出贡献的数百人。DNS映射域名和子域名未计入空投。ENS项目未进行过融资,核心团队不会为代币提供流动性以及主动联系交易所上币。DAO将决定交易费变更、金库用途等和.eth相关的一切事宜,任何$ENS持有人都可以参与DAO治理,成为Delegator。
社区收集问题
Q1:可以从您的角度,先给我们社区的小伙伴简单介绍一下ENS这个项目吗?他在Web3.0生态中担当什么样的角色?
Brantly.eth: ENS是web3的身份协议,最终适用于整个互联网。您拥有自己的用户名,控制个人资料数据,并将其带到您使用的每个dapp和服务中。这与web2不同,在web2中,您为每个孤立的服务使用不同的帐户和用户名,在web3中,您拥有自己的用户名并使用到各种应用中。
以上这是主要用例。另外两个重要用途是您的ENS名称可以简化任何区块链的加密支付,并且它可以是一个去中心化的网站。
Q2: .eth 域名可以说是比Punk更早的NFT了,可以给我们简单介绍一下ENS的团队背景和发展历程吗?
Brantly.eth: ENS于2017年5月4日推出。这比CryptoPunks早了几周,比Curio Cards早了几天。我很确定ENS是世界上持续运行时间最长的NFT社区。当时有NFT标准不过还没有ERC-721标准,后者在那年晚些时候问世。
ENS于2016年作为Nick Johnson和以太坊基金会的其他一些人的闲暇项目开始。当ENS在2017年推出时,它非常简单,只是以太坊地址和Swarm哈希的.ETH名称。但目前它已经发展了很多:它现在支持任何区块链地址; IPFS、Skynet 和Arweave也有哈希值;和个人资料数据,如头像。它也不再只是.ETH名称;您还可以将任何DNS名称导入ENS。
Q3: ENS刚刚发布了治理代币的计划。对于ENS生态中的普通用户、投机者、合作伙伴等不同角色,怎样分配初始的治理权能有利于ENS的长期利益?
Brantly .eth: 50%的代币将归属DAO本身。25%将提供给拥有.ETH名称的账户,另外25%将分配给在过去5年中以重要方式为
ENS做出贡献的数百人。对于空投,它与一个人拥有的 .ETH名称的数量无关, 而是与他们拥有任何域名的时间成正比。这避免了给大规模域名抢注者过多的权力。对ENS生态系统做出重大贡献的项目将获得额外的代币,例如ENSUser将获得一r些贡献者代币。非常感谢你所做的一切!
Q4: ENS金库中有大量的注册费,随着治理权的开放,将会怎样分配这些资金?
Brantly.eth:好问题。这将由ENS DAO来决定!这实际上是做DAO背后的一大推动力:我们不知道如何花钱,我们希望社区对此有发言权。(注: ENS金库目前有超过2400万美金)我们建议他们首先将其用于ENS开发,然后用于ENS生态系统,然后用于web3公共产品。
Q5: Gas太高了,ENS有layer2的发展计划吗,目前有怎样的进展呢?
Brantly.eth:是的,gas fee很糟糕。我们计划使用CCIP-read来允许用户将记录和子域放在他们选择的L2上。在降低注册.ETH名称的费用方面,需要更长的时间。我们最终可能会将其移至L2,但问题是我们必须将所有注册移至该L2,并且我们希望等待L2生态系统先成熟。
Q6:目前有哪些基于ENS构建的应用令你眼前一亮,你希望未来ENS生态会发展出怎样的用例?
Brantly.eth:使用ENS名称作为您的用户名非常强大,我喜欢任何以这种方式使用ENS名称的dapp。最近还看到一个项目,用ENS来命名分布式文件网络上的文件存储,很酷。
Q7:前一段时间ENS兼容了全部的DNS域名,这是否会影响.eth域名的价值? .eth对比传统DNS接入的域名有什么优势?
Brantly.eth:我不这么认为。虽然导入到ENS的DNS名称可以做很多相同的事情,但.ETH名称仍然有一些优势。例如,.ETH名称是完全自托管的,而导入到ENS的DNS名称与普通DNS名称具有相同的安全级别。
此外,我认为.ETH具有很好的品牌效应。正如.COM代表了互联网的兴起,我认为.ETH作为一个符号代表了web3的兴起
自由问答
Q8:ENS有计划上任何交易所吗?
Brantly . eth: ENS核心团队不会为代币提供任何流动性,或者主动接洽交易所商讨上币事宜。
Q9: ENS会上币安吗?
Brantly.eth:这要问币安了。
Q10:我想知道为什么不给将DNS接入ENS域名的用户空投代币?我认为这是从web2到web3的积极过渡,对整个加密货币生态有利。
Brantly.eth:这是因为DAO将负责治理
与.ETH域名有关的事宜,而且注册机制和注册费都只和.ETH域名相关。
Q11:我要做什么才能参与ENSDAO ?
Branrly. eth:只需要$ENS代币就可以了。11月8号之后就有了。
Q12: $ENS代币有什么功能?
Brantly. eth: $ENS代币给了持有者在DAO中投票的权利。
Q13:目前从公告中看,在Gitcoin中给ENS捐款的用户并不能得到空投。但是未来捐款用户能否获得空投呢,毕竟他们为项目做过贡献?
Brantly . eth: ENS核心团队从来没有接受过Gitcoin的捐款。
Q14:未来会限制注册域名的用户数吗?未来注册费会增加吗?
Brantly. eth:不会! ENS的域名没有上限,我们希望地球上每一个人都能有ENS域名。关于年费,这将由DAO控制,并且DAO决定会不会增加。
Q15: ENS会空投给poap的持有者吗?
Brantly.eth:持有POAP并不会增加空投代币的数量。
Q16:未来我们能用ENS代币而不是ETH来注册域名和续费吗?
Brantly.eth:这将由DAO决定。
Q17:我平时用* .dcl.eth当域名,而且我设置了reverse record,但是我没有空投,我觉得这不公平。你怎么看?
Brantly. eth:我们把空投限制到了.eth 域名,因为DAO将治理和.eth 域名有关的事宜,而不是子域名。
Q18:未解锁的ENS代币会有和流通代币一样的投票权吗?
Brantly. eth:不会,锁仓代币将没有投票权。
Q19: ENS有流动性挖矿计划吗?
Brantly.eth: ENS核心团队将不会提供任何流动性。
Q20: ENS代币将一次性发放还是分批解锁?
Brantly . eth:对于核心团队和顾问的代币,将会分4年释放。50%分配给DAO的代币也是逐步释放。而给其他用户的代币,则是一次性释放。
Q21: Unstoppable domains@有很多顶级
域。ENS团队以后会创建除了.eth之外的其他顶级域吗?
Brantly . eth: Unstoppable没有拥有任何顶级域,他们只是自创了一些域名,并且以后很有可能和ENS以及DNS现有的域名冲突。ENS支持了DNS的域名空间,现在Unstoppabe自创的这些域名未来很有可能碰撞DNS域名空间,造成UN体系内域名持有者和DNS域名持有不同的冲突。
Q22:嗨,brantly! 现在有多少人申请Delegator呀?你们最后会选多少个Delegator?
Brantly. eth:目前好几百人申请。我们不会负责选择delegator,代币持有人决定把代币委托给自己信任的delegator,完全由用户决定。
Q23: ENS有路线图吗?
Brantly . eth:我们经常公开讨论进展、工作情况以获得反馈,不过以后我们或许应该发布一个更新的路线图。
Q24: ENS好用好记,不过现在很多钱包和交易所都不支持,你怎么看?以后怎么拓展ENS的用例,团队会做些什么?
Brantly.eth:目前有310种接入了,不过ENS需要有数千种应用接入ENS。社区用户能做的是礼貌地向各种服务要求接入ENS域名。各种应用都会听用户的意见。
Q25:嗨,Brantly! 为什么你们现在决定发币和DAO起来了,而不是几年之前?
Brantly. eth:我们觉得ENS和DAO目前足够成熟了。不知之前,DAO还是非常实验性的,而且ENS也还很幼稚。
❸ 以太坊链上数据查询工具: https://eth.tokenview.com/cn
etherscan.io目前在国内无法访问,现在向大家推荐这个以太坊数据查询工具, https://eth.tokenview.com/cn ,数据来自他们自己的以太坊节点,数据同步速度快。
四个优势:
数据支持以太坊上的区块信息,地址余额,转账交易,以太坊所有Token,基于以太坊发行的稳定币。
链上存储的数据(inputdata)可以解码成普通语言,我们可以查看在以太坊上的留言。
几十种链上数据图表,同时有为高级数据分析师提供的Metrics模块。
由中国团队Tokenview开发,在国内可高速访问。
❹ 以太坊技术系列-以太坊数据结构
本篇文章和大家介绍一下以太坊的数据结构,上篇文章我们提到,以太坊为了实现智能合约这一功能,使用了基于账户的模型。我们来看看以太坊中数据结构。
既然是基于账户的模型,我们需要通过账户地址找到账户的状态。就像通过银行卡号可以找到你在银行中的各种信息一样。最简单的想法当然是一个简单的哈希表 key是账户地址 value是账户状态。但这里有个问题解决不了。
轻节点如何校验账户合法性?
上篇我们说过,区块链中有2类节点,全节点和轻节点,轻节点只会存储block header,所以轻节点如何才能校验账号是否合法呢?
这个思路和我们平时用的md5校验一致,我们会对区块内的信息进行hash运算从而得出区块内信息唯一确定的值,区块链所有节点中这个值都是相同的。
在这个过程中我们用到了一种数据结构Merkle Tree(哈希树),我们先看下Merkle Tree(哈希树)的示意图。
上篇文章说到区块链中的链表(哈希链)和我们平时常见链表不同的是将指针从地址改为了hash指,这里也一样,哈希树和二叉树的区别有2个
1.将地址改为了哈希值
2.只有叶子节点存储数据
回到之前的问题轻节点是如何校验1个账户或交易是否是在链上的呢?
整个流程如上图所示
1.轻节点需要判断1个账号是否合法
2.轻节点由于只存储block header,所以拿到1个账号的时候会向全节点发出请求
3.全节点存储了所有账户状态,将账户路径中的需要计算用到的hash值返回给轻节点
4.轻节点本地进行计算根hash值,如果计算结果和自己存储一致则账户合法,不一致则不合法。
那以太坊中的账户信息的数据结构就是这样吗?
直接用这样的数据结构来存储账户信息会有2个问题
查找困难
生成hash值不确定
第1个问题应该比较容易发现,在这个树中寻找1个账号需要的复杂度是O(n),因为没有任何顺序。
第2个问题其实也是因为无序导致的,无序的组合每个节点针对同一批账户生成的hash值不一致,这就导致无法达成共识。
既然2个问题都和顺序有关,那我们类似二叉排序树一样,使用哈希排序树是不是就可以解决问题了呢?
使用排序树后会带来另外1个问题
插入困难
因为要维持树是有序的,很可能带来树结构的很大变动。
以太坊中使用了另外一种数据结构字典树。和哈希树不同,字典树应该是很多地方都有使用。我们简单来看下字典树的结构。
字典树能够较好地解决哈希树的2个缺点1.查找困难 2.生成的hash值不确定以及排序二叉树的1个缺点 插入困难。
但字典树我们可以看到可能树的深度可能由于部分元素导致整棵树深度非常深。
这时我们可以进一步优化,将相同路径进行压缩。这就是压缩字典树。
将哈希树和压缩字典树结合,就可以得到以太坊存储账户的最终数据结构-MPT。
将压缩字典树里面的指针从地址改为指针,并且将数据存储在叶子节点中即可。
介绍完状态树的数据结构,我们接下来讨论1个问题,区块中存储的账户状态是什么样的范围。有2种选择。
只保存当时区块中产生交易的账户状态。
保存全局所有的账户。
我们可以看下这2种方式,无非就是空间和时间的平衡,只保存当前区块产生的交易意味着是做懒加载(需要的时候才去寻找账户),在区块链中这个代价是非常大的,因为寻找的账户之前从未交易过,这样会遍历整个区块链。另外一种保存全局的账户方式虽然看起来空间消耗较大,但查找快捷,而且空间的问题我们可以通过其他方式优化。所以最终以太坊选择了第2种每个区块都报错全局所有账户的方式。
我们来看下以太坊中是如何保存状态树的。
可以看到以太坊中虽然每个区块都保存了全部账户,但是会将未发生变化的账户状态指向前1个节点,本身只存储发生变化的状态,这样可以较大程度优化空间占用。
介绍完以太坊中比较复杂的状态树后,我们继续来看看以太坊中的另外两棵树,交易树和收据树。
首先介绍一下,为什么需要交易树&收据树。
1.交易树
虽然以太坊是基于账户的模型,但是就像银行不仅会存储银行卡的余额,还会存储卡中的每笔钱怎么来的以及怎么花的。交易树中就存储着当前区块中的包含的所有交易。
2.收据树
由于智能合约的引入增加了不少复杂性,所以以太坊用收据树存储着一些交易操作的额外信息。比如交易过程中执行日志就包含在收据树中方便查询。收据树和交易树是一一对应的。每发生一次交易就会有一次收据。
和状态树不同交易树和收据树只维护当前区块内发生的交易,因为当时区块发生交易时不需要再去查找另外1个交易,也就之前需要可能遍历整个区块链的查找操作了。
由于以太坊中的出块速度较快,我们进行一些查询一些符合条件交易的时候会面临大量数据遍历困难的问题。收据树中引入了布隆过滤器可以帮助我们有效缓解这一困难。
布隆过滤器将大集合中每个元素进行hash运算映射到1个较小的集合,这时再来1个元素要判断是否在大集合的时候,不需要遍历整个大集合,而是去进行hash运算去小集合中寻找是否存在,如果不存在,肯定不在大集合中,如果存在则不能说明任何问题。
如上图所示,布隆过滤器只能证明某1个元素不在集合中,不能证明1个元素在结合中。
以太坊中如果我们要在较多区块中寻找某1个交易,则可以利用布隆过滤器,过滤掉肯定不存在目标交易的区块,然后进入收据树内继续利用布隆过滤器筛选,剩下的才是可能的目标交易的交易,进行一一比对即可。
我们介绍了以太坊的核心数据结构,状态树&交易树&收据树,他们都是使用相同的数据结构-哈希压缩字典树。但状态树是维护1颗全局账户树,交易树和收据树则是维护本区块内的交易或收据。
介绍完数据结构后,后面我们会用几篇文章来介绍以太坊中的一些核心算法,比如共识机制,挖矿算法等。
❺ 哈希连接
在两个关系上进行连接用多线程来加速主要有两种方法哈希连接和排序合并连接。
多数OLTP DBMS都没有实现哈希连接
但是少量目标元组的索引嵌套连接和哈希连接是差不多的
连接算法的设计目标:
提高cache
影响DBMS cache未命中的因素:
对于OLAP DBMS哈希连接是最重要的操作
充分利用多核来加速哈希连接算法是至关重要的——让所有的核都跑起来,又不想要内存受限
哈希连接R⨝S氛围三个阶段:划分(可以没有)用哈希函数在连接关键字上将R和S的元组进行分区(为下一步索引的构建以及最后的探查做准备);构建,扫描关系R在连接关键字上创建一个哈希表;探查,对于S中的每个元组,查找它的连接关键字是不是在R的哈希表中,如果找到,那么输出合并好的元组。
两种方法
只扫描输入的关系一次,并动态产生输出
所有线程更新在一个全局的分区集合;必须用latch来同步线程;最终的结果是可用的哈希表,传输一次数据
每个线程有自己的分区;在所有线程都完成后需要整合,传输两次数据
也叫基数分区,和基数排序的原理很像,都是一位一位数字的来排。
多次扫描输入的关系;只在最后物化结果;也叫基数哈希连接
多步
对第二列数字也是递归重复,直到分区的目标数字建立
线程会扫描R(或分区)中的元组
对于每个元组,哈希它的连接属性并把它加入到哈希表中相应的bucket中(bucket只有几个cache line大小)
有两个需要考虑的问题:
一些的哈希函数介绍...
1.链式哈希
维持一个bucket的链表
通过把有一样哈希值的元素放到同一个bucket中
在查找时,看一个元素有没有,需要扫描其哈希值对应的bucket;插入和删除也是
为了减少连接时的比价,减少哈希值的冲突是至关重要的。
链式哈希大概需要R中元素的一般的slots。
key一定在邻居范围内或不存在。
对于S中每个元组,都会哈希它的连接key检查它在由R构建的哈希表中相应的bucket里有没有对应的元组。
如果输入分区了,那么也要给每个线程进行一个独立的分区。否则需要同步他们在访问S时的游标。
在构建阶段当关键字可能在哈希表中可能不存在时创建一个布隆过滤器
在探查哈希表前线程会先检查过滤器;也叫sideways information passing
基于分区的连接在多数情况都要比不分区的算法性能好。
❻ 走进以太坊网络
目录
术语“以太坊节点”是指以某种方式与以太坊网络交互的程序。从简单的手机钱包应用程序到存储整个区块链副本的计算机,任何设备均可扮演以太坊节点。
所有节点都以某种方式充当通信点,但以太坊网络中的节点分为多种类型。
与比特币不同,以太坊找不到任何程序作为参考实施方案。在比特币生态系统中, 比特币核心 是主要节点软件,以太坊黄皮书则提出了一系列独立(但兼容)的程序。目前最流行的是Geth和Parity。
若要以允许独立验证区块链数据的方式连接以太坊网络,则应使用之前提到的软件运行全节点。
该软件将从其他节点下载区块,并验证其所含交易的正确性。软件还将运行调用的所有智能合约,确保接收的信息与其他节点相同。如果一切按计划运行,我们可以认为所有节点设备均存储相同的区块链副本。
全节点对于以太坊的运行至关重要。如果没有遍布全球的众多节点,网络将丧失其抗审查性与去中心化特性。
通过运行全节点,您可以直接为网络的 健康 和安全发展贡献一份力量。然而,全节点通常需要使用独立的机器完成运行和维护。对于无法(或单纯不愿)运行全节点的用户,轻节点是更好的选择。
顾名思义,轻节点均为轻量级设备,可显著降低资源和空间占用率。手机或笔记本电脑等便携式设备均可作为轻节点。然而,降低开销也要付出代价:轻节点无法完全实现自给自足。它们无法与整条区块链同步,需要全节点提供相关信息。
轻节点备受商户、服务供应商和用户的青睐。在不必使用全节点并且运行成本过高的情况下,它们广泛应用于支收付款。
挖矿节点既可以是全节点客户端,也可以是轻节点客户端。“挖矿节点”这个术语的使用方式与比特币生态系统不同,但依然应用于识别参与者。
如需参与以太坊挖矿,必须使用一些附加硬件。最常见的做法是构建 矿机 。用户通过矿机将多个GPU(图形处理器)连接起来,高速计算哈希数据。
矿工可以选择两种挖矿方案:单独挖矿或加入矿池。 单独挖矿 表示矿工独自创建区块。如果成功,则独享挖矿奖励。如果加入 矿池 ,众多矿工的哈希算力会结合起来。出块速度得以提升,但挖矿奖励将由众多矿工共享。
区块链最重要的特性之一就是“开放访问”。这表明任何人均可运行以太坊节点,并通过验证交易和区块强化网络。
与比特币相似,许多企业都提供即插即用的以太坊节点。如果只想启动并运行单一节点,这种设备无疑是最佳选择,缺点是必须为便捷性额外付费。
如前文所述,以太坊中存在众多不同类型的节点软件实施方案,例如Geth和Parity。若要运行个人节点,必须掌握所选实施方案的安装流程。
除非运行名为 归档节点 的特殊节点,否则消费级笔记本电脑足以支持以太坊全节点正常运行。不过,最好不要使用日常工作设备,因为节点会严重拖慢运行速度。
运行个人节点时,建议设备始终在线。倘若节点离线,再次联网时可能耗费大量的时间进行同步。因此,最好选择造价低廉并且易于维护的设备。您甚至可以通过Raspberry Pi运行轻节点。
随着网络即将过渡到权益证明机制,以太坊挖矿不再是最安全的长期投资方式。过渡成功后,以太坊矿工只能将挖矿设备转入其他网络或直接变卖。
鉴于过渡尚未完成,参与以太坊挖矿仍需使用特殊硬件(例如GPU或ASIC)。若要获得可观收益,则必须定制矿机并寻找电价低廉的矿场。此外,还需创建以太坊钱包并配置相应的挖矿软件。这一切都会耗费大量的时间和资金。在参与挖矿前,请认真考量自己能否应对各种挑战。(国内严禁挖矿,切勿以身试法)
ProgPow代表 程序化工作量证明 。这是以太坊挖矿算法Ethash的扩展方案,旨在提升GPU的竞争力,使其超过ASIC。
在比特币和以太坊社区,抗ASIC多年来一直是饱受争议的话题。在比特币网络中,ASIC已经成为主要的挖矿力量。
在以太坊中,ASIC并不是主流,相当一部分矿工仍然使用GPU。然而,随着越来越多的公司将以太坊ASIC矿机引入市场,这种情况很快就会改变。然而,ASIC到底存在什么问题呢?
一方面,ASIC明显削弱网络的去中心化。如果GPU矿工无法盈利,不得不停止挖矿,哈希率最终就会集中在少数矿工手中。此外,ASIC芯片的开发成本相当昂贵,坐拥开发能力与资源的公司屈指可数。这种现状有可能导致以太坊挖矿产业集中在少数公司手中,形成一定程度的行业垄断。
自2018年以来,ProgPow的集成一直饱受争议。有些人认为,它有益于以太坊生态系统的 健康 发展。另一些人则持反对态度,认为它可能导致硬分叉。随着权益证明机制的到来,ProgPoW能否应用于网络仍然有待观察。
以太坊与比特币是一样,均为开源平台。所有人都可以参与协议开发,或基于协议构建应用程序。事实上,以太坊也是区块链领域目前最大的开发者社区。
Andreas Antonopoulos和Gavin Wood出品的 Mastering Ethereum ,以及Ethereum.org推出的 开发者资源 等都是新晋开发者理想的入门之选。
智能合约的概念于20世纪90年代首次提出。其在区块链中的应用带来了一系列全新挑战。2014年由Gavin Wood提出的Solidity已经成为开发以太坊智能合约的主要编程语言,其语法与Java、JavaScript以及C++类似。
从本质上讲,使用Solidity语言,开发者可以编写在分解后可由以太坊虚拟机(EVM)解析的指令。您可以通过Solidity GitHub详细了解其工作原理。
其实,Solidity语言并非以太坊开发者的唯一选择。Vyper也是一种热门的开发语言,其语法更接近Python。
❼ 小白如何秒懂区块链中的哈希计算
小白如何秒懂区块链中的哈希计算
当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。
那位说“拉稀”同学你给我出去!!
这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:
# 一、什么是哈希算法
## 1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。
从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。
如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。
如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。
呵呵,先别打我啊!这确实就只是一个函数的概念。
## 2、特点:
这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?
1)**确定性,算得快**:咋算结果都一样,算起来效率高。
2)**不可逆**:就是知道输出推不出输入的值。
3)**结果不可测**:就是输入变一点,结果天翻地覆毫无规律。
总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“”,你说“11112”它给你弄成“”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。
# 二、哈希运算在区块链中的使用
## 1、数据加密
**交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头**。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。
1)、**识别区块数据是否被篡改**:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
2)、**把各个区块串联成区块链**:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。
## 2、加密交易地址及哈希
在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?
首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。
这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。
这么哈希了半天,搞什么事情?有啥作用呢?
1)、**快速定位每笔交易**:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。
举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。
2)、**核实交易数据是否被篡改**:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。
## 3、挖矿
在我们的区块头中有个参数叫**随机数Nonce,寻找这个随机数的过程就叫做“挖矿”**!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。
找这个数字是弄啥呢?做这个有什么作用呢?
1)、**公平的找到计算能力最强的计算机**:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。
2)、**动态调整难度**:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。
# 三、哈希运算有哪些?
说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。
从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。
需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。
**总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。
❽ 如何将内容上链,把文字存储到以太坊
之前写过一篇文章:《如何用区块链表白?将信息永久写入区块链。》
https://www.jianshu.com/p/c3ca7c93dae3
教程基本比较清楚了,还不懂怎么操作的,先看上面这个链接再回来。
实际使用过程中,上面教程可能还遇到有一点问题。因为教程里的内容是英文,英文的内容上链一点问题都没有。
而这次我录入中文,在以太坊浏览器上,view input as UTF8 时,出现乱码。
看这个示范链接,中文部分全部乱码了:
https://etherscan.io/tx/
原因?
我一开始用的是网上找的 十六进制与文本间的转换工具。
https://www.bejson.com/convert/ox2str/
用这个不行了!
中文要不出现乱码,要用 UTF8 与 Hex 转换工具。
网上搜下,比如这个:
https://www.browserling.com/tools/utf8-to-hex
输入你要的文字内容,转换成 Hex.
然后复制到word里,用替换功能,将所有的 x 字符去掉。
看,成功的结果是这样的。
https://etherscan.io/tx/
❾ 哈希图会取代区块链
2018年2月份哈希图团队就在Reddit上po出了一种新的实现共识算法平台,旨在为世界提供一种更有效、快速的价值互联网底层支撑。
从比特币出现到现在,区块链这个名词已经深入人心,似乎我们已经被深深植入一种想法,那就是 价值互联网 必将通过区块链来实现。而仔细一看,区块链似乎就是一个简单的链表,只不过是更宏观一些的区块相连。区块之内打包的各种公开的交易事务。于是我们从中总结出了人人都能谈的区块链的特点:
而区块链的用途承载了我们很多美好的想象,赋予更多节点以价值,包括内容,个人数据等形形色色的各类资产。
诚然,区块链已经在部分领域实现了这个功能。但是,在具体使用过程中,我们渐渐遇到了很多性能问题,先是以太坊上养猫就堵塞了整个以太坊网络。而比特币就更不用说了,即使全世界成千上万个分布式节点,各大矿场投入了巨资构建的矿场来支撑这个网络,仍然受限于每10分钟才出一个区块的算法限制。
因为性能瓶颈,其他算法也迅速出现,企图解决这个问题。比如通过PoS算法,DPoS算法,试图绕过PoW这种简单粗暴的解决方案,来提升网络每秒能够处理的交易事务次数(TPS)。
而最近掀起的EOS节点竞选,全世界范围内各个财大气粗的团队,参与竞选全球 21个超级节点 ,用于投票产生下一个区块。本质上仍然属于DPoS算法的应用,只不过这个超级节点能够获得大量的EOS代币|Token(主网上线后可称之为Coin)奖励,按照当前价格折算,就是上亿的收入。资本逐利,无可厚非。但是仔细想一想,官方的说法,这是为了提升TPS而设计的一种折中的方法。意思就是,决定区块产生的不再是公平的,而是一种代议制,在去中心化和中心化之间找到的一个微妙的平衡,当然这个系统内,除了超级节点,备胎节点也是必须的。本文不赘述EOS。
而这些,不禁让人深深思索一个新的问题,当年中本聪的设想,一人一个CPU,一个投票权的愿景似乎已经渐行渐远了。
提到区块链,我们常说共识算法,其实全称是一致性共识算法。其中,拆出两个关键词来:
共识似乎离普通用户很近,白话说即为,我们大多数人认同它的价值,它就有价值。而一致性却离得很远,下一个区块怎么产生,节点之间如何同步数据与我何干?
这里,我也只浅浅列出用在区块链世界的几种牛批的共识算法,包含:
下面进入本文的主题。
无论是什么共识算法,核心目的相同,那就是:在无可信中心节点可以依仗时,社区用户能够关于事务的产生,区块打包达成一致。
此处上一个对比图,将会一目了然,然后我也会再文字赘述一遍,和大家分享我自己对此的一点点浅浅的思考,如有任何差错,欢迎随时指正。
可见,左边是区块链,右边是哈希图。
仔细看,区块链实际上是一个公平但是残酷的机制。每一个参与挖矿的节点,都是在玩一个概率游戏。比如老大哥比特币,使用纯正的PoW算法,每个人通过密码学问题,暴力求解那个答案,我们称之为哈希碰撞。在10分钟内,产生的交易事务其实不止那个最终被加入最长的链上的区块的那些事务。而是同时有很多其他区块。每一笔事务会通过广播机制,向周围的其他节点广播以求得到足够的确认,并最终加入区块链。问题来了,节点保存着当前最新的备份,且只认最长的那个链,但是我们知道,广播意味着一样长的多个链会产生,于是节点就需要同时保存多个备用区块,然后静静等待下一步传来的区块,再比较选谁链更长,就把谁真的加入大家都认同的那个链,而失败的区块,就黯然退场,加入下一轮的事务。
挖到那个没加入到链上的节点,只能暗暗擦干眼泪,继续前行。
以太坊呢,就稍稍温情一些,会有一点点奖励给这类被称之为叔块的东西。
看到左边的区块链结构吗?生长过程中,是个树,长成了以后,就会被修剪的只剩下一个白白长长的树干。这就是我们说的,只认最长的链的法则残酷之处。
哈希图
对比看右边的哈希图结构,是不是要复杂很多?简单说,就是一个都不能少。
挖到的区块全都加入到系统。每个分支都将被用到,最终缝合到整个系统。
稍稍想想,就能知道左边的没有右边的事务处理速度快。因为左边总是要自我阉割一部分打包在区块内的事务。而右边不用。
那么,为什么右边可行?而区块链却选择的是更慢的算法呢?
答案很简单,区块链的广播方法,在全网达成共识很慢。那么哈希图是怎么做到的呢?
下面将谈一谈哈希图的两个核心机制中的其中一个,官方称呼为Gossip about gossip协议。
粗浅翻译为:关于八卦的八卦协议。
先来说一说Gossip协议(八卦协议)。
Gossip协议解决的问题就是在分布式环境下信息高效分发的问题。这个问题的解决决定着系统的一致性程度。
以办公室八卦为例,八卦一般是从一次对话开始,只要一个人八卦一下,有限的时间内办公室的人都会知道。与病毒传播类似。因此Gossip别名就是“病毒感染算法”,“谣言传播算法”。
Gossip的核心就是当前节点随机选择一些节点把那个告诉它们你知道的所有事情。好比说,你听到了一个八卦消息,你会忍不住想和朋友分享,于是你从你认识的人中,随机挑了一部分人,把这个消息告诉了他们。他们也一样,每个人听到这个消息,也会忍不住想和他们的朋友分享。像病毒传播一样,迅速传遍了整个人际网络。
因此理解八卦协议,可以带入一种日常生活我们总是会参与到的八卦场景。
而关于八卦的八卦协议,这里不再多说,只是可以对照一下,作为一个传递八卦消息的人,你再被其他人八卦,是不是有一种意想不到的被人验证的感觉?后面会再写文详述。
总之,通过Gossip协议,哈希图能够做到在秒级别实现共识(牛批吧)。因此,就能够采用这种绝不放弃任何区块的图状方式,进而提升事务打包确认的速度。不是一般的快。
有人认为哈希图要颠覆区块链的,但是哈希图的人认为,它们会共存。-- 且当八卦,不必在意
接着引出一个新的问题给大家,我们真的关心底层技术的实现方式吗?
支付宝好用,微信好用,我们关心它们是怎么实现的吗?我想绝大部分朋友是不在意的。
那么对应到区块链或者哈希图,我们其实并不会太在意到底哪个算法更好,而是更关心,我这个转账多久能够被确认,别人给我转的钱多久能收到。
诚然,我们不必太在意底层,但是支撑起一个良好体验的产品,必然是从底层汲取能量。
或许,哈希图将带来一种崭新的体验。
到现在,我相信一组新词不断出现在大家的信息捕捉器里:
我的粗浅理解是,不带代币的互联网产品都是古典的,而带有代币的大多数号称价值互联网的产品也只是耍猴,博眼球,卖空气,更不要提国外还时不时捧出的12岁CEO,发行以太坊代币,我归结为卖傻儿子系列。
不管是什么互联网,我们的核心诉求始终都是,要好用,简单说就是快且安全高效。
而价值呢,更多的愿景仍然是希望将个人产生的价值部分乃至全部还归于个人。
但是,任重道远。在古典互联网安家的90后们尚且未能全部拥抱区块链,更别说80后,70后等等大部队了。
我们终将死去,价值互联网会在新一代的原住民中生存。
而本篇,希望带来了一点点价值,那就很好了。
2018.4.21 -- YQ
郑重声明
本文里还未提到哈希图的缺点,导致给人一种推广软文的感觉。本文只是纯粹科普一下不同的公开记账本实现方式,并非诱导大家投资,我个人不参加一级市场的私募,风险承担不起,也不鼓吹大家参与。个中风险,自己衡量,自己把握。
❿ 怎么样在以太坊上查询区块链币
可以输入钱包地址、交易ID、区块哈希或者区块高度等信息直接查询,非常方便。
如果是查询账户余额、账户的历史交易数据等信息,建议直接输入钱包地址查询;如果是查询某笔转账的相关信息,比如是否到账、进展如何,输入交易ID是最方便的。
当然了,区块链浏览器不仅可以查询自己的账户,也可以查询别人的账户以及相关的交易信息,包括比特币创始人中本聪的账户。