文章目录
基础词
挖矿
区块链用来封装交易记录的盒子叫做去区块,想要得到区块需要进行一道复杂的数学题,这道数学题的内容是这样的:矿工们已经选好了自己想塞入新区看的交易,新区块区块头的绝大部分信息是可以急死安获知的,现在,就只需要找到一个数字,使得这个数组与区块头其他信息哈希之后得出的数值,小于软件给出的数值
智能合约
基于区块链技术搭建的智能合约是被存储在区块链网络上的,不仅合约的执行时自动触发的,全网任何人还可以追溯(租房使用时可以自动被触发,时间一到密码自动更改);但是同样由于这个问题,由于智能合约执行后,任何人都无法篡改和掌握,所以代码一旦出现漏洞,很难及时补救
通证
代币和通证在计算机科科学里是同一个词:token。token在区块链的语境里指一类加密货币。目前以太坊机器同类平台上创建的DApp基本都发行token
和比特币、以太币这些加密货币相似的是,token也有去中心化的内核属性,但不同额度是,比特币、以太币拥有完全独立的区块链网络,而token则依附在以太坊这类平台上发行和运行,下面是一个例子
一个团队发布了一个用来打车的智能合约部署在了以太坊网络上,根据以太坊提供的"模板"发型了属于自己的token。token的发行量一开始就写入合约,将这个token称为"打车币"。乘客支付车费时,可以选用"打车币"来支付车费,一般也可以用以太币结算;而如果选择"打车币"来支付,智能合约会记录下"打车币"的使用情况,智能合约的每一个动态都被矿工们塞入区块,链接到以太坊网络中
在这个例子中,“打车币"可以"替代"以太币使用,可能这就是token被称为"代币"的原因;token可以在应用项目资金构建的生态中流转使用,换言之,有了token,就等于获得了在生态中执行操作的"通行证”,所以token又被成为"通证"
token相当于以太坊上的"子生态",所以token要想真正获得广泛的价值认同和用户基础是非常困难的。但由于开发和维护一条像以太坊独立的区块链成本高昂,许多团队还是选择以方形token的方式来创建一个区块链项目
加密货币和数字货币
媒体常常将加密货币称为数字货币,是因为他们以数字形式而非物理形式存在,同时又具有可交易的属性。中国互联网金融协会区块链研究工作组组长李礼辉认为:数字货币必须具有国别,拥有主权背书,有合格的发行主体,有国家信用支撑。
按照这个标志,比特币等加密货币都不能被称为数字货币;最早的加密货币是"电子黄金",但其是中心化的
区块链的运作机制
算力
指的是每秒计算多少次哈希值的能力,在同样的时间里,算力越大,就越有可能挖出新区块。"挖新区块"本质上就是一个数学计算的过程,矿工需要计算这个新区块的区块头的哈希值,以符合规则设定的条件
矿工在挑选好要塞入新区块的交易后,区块头中的大部分数据就可以确定下来,但有一个数据需要矿工自己填入,他毫无捷径可走,只能反复尝试猜这个数字,直到得出的区块头哈希值能够小于规则给出的数值
孤块
如果当前你已经成功挖出了第一个区块,你需要做的工作似乎只剩下将挖出的区块信息广播到区块链网络中,让其他矿工们及时停下手头的工作,转而挖掘下一个区块
但就在此刻,由于网络延迟,另一个和你几乎同时挖出这个区块的矿工,比你更早将这个消息通知了全网,此时只有一个区块会被认可并保留,而被认可的对象永远是后面连接了最多区块的那个区块(因为那位网络更通畅的矿工比你更快广播,所以其他矿工迅速确认后,将自己挖出的区块一个个连接到了他挖出的区块之后,于是这条链变得越来越长)
这时,你的这个区块就被称为"孤块",以太坊由于生成区块的速度比较快,大大增加了孤块的产生概率,所以孤块也还是有可能获得一小部分挖矿奖励的
空块
比特币的区块链上却存在一些区块,只包含记录矿工领走比特币奖励的那笔交易,而没有记账信息。这种区块就被称为空块。因为这一部分的矿工觉得,全网交易校验的风险非常大,宁愿只获取挖出块的费用,这个时候损失的只有矿工费
工作量证明机制PoW
所有人都在挖矿,胜出者就是那个提供了最多工作量证明的人
权益证明机制PoS
PoS通常意味着只有持有该加密货币的人才能参与竞选新区块额度添加权。不好的地方就在于,持币越多的人越容易挖到新区块而获得挖矿奖励
股份授权证明机制DPoS
本质上还是对PoS机制的改良。就去中心化的角度来说,它的纯粹性在一定程度上被稀释,却平衡了效率的要求
这是因为当代表团选定后,实际添加新区块时,无需再通过竞争,所以新区块的添加速度有了显著的提升,一笔交易得到处理的速度也变得更快
实用拜占庭容错机制
如果套用PBFT的运作原理,只要将军总人数大于其中“坏将军”的3倍,就能确保共识的产生不受干扰。
Coinbase交易
比特币每个区块里都记录着一笔笔交易的数据,第一笔交易就被称为Coinbase交易,它的作用只是记录第一个挖出这个区块的矿工获得奖励的信息
区块内部微观世界
梅克尔树
在密码学应用中,很少直接将一个数据哈希一次,通过得出单一哈希值来传输。因为一旦传输过程中数据损坏,很难定位检索究竟具体是哪个小部分出现了问题
通常采取的方法是,先将数据切割成许多小的数据块,每个小数据块分别哈希一次,再将相邻的两个小数据块得出的哈希值放在一起哈希一次。如果数据块为奇数,则自动复制一笔交易,使数据块变成偶数后,再进行两两哈希。这个过程不断重复,直到产生最后一个哈希值
梅克尔树的一层层哈希值能快速定位出错的问题
简单支付验证
每一个区块头都储存着该区块中所有交易层层哈希后得到的梅克尔树根,你只需要让矿工给予你你交易id相邻的那条交易id,再加上其他的哈希值,自己计算出一个梅克尔树根,再与"区块头账本"中的梅克尔树根比对,即可完成验证
对称加密
知道加密算法和密钥,反推可以得到加密前的内容
非对称加密
会生成两把不同的密钥,公钥和私钥,假如你要加密内容,把公钥发给对方加密内容,发送给你后,用私钥即可解密
数字签名
数字签名一般都是结合非对称加密使用,在非对称加密使用后,对加密的内容进行摘要后进行哈希,再用公钥进行加密;对方得到后,首先用私钥对这个哈希进行解密,然后对密文也进行哈希,用这两个哈希对比,验证内容是否被篡改
盲签名
盲签名的意思跟匿名选举非常类似。盲签名是一种特殊的数字签名技术。盲签名因签名的人看不到所签署文件的具体内容而闻名,它有两个显著的特点:一是签名者对消息的内容是不可见的 ;二是签名被公开后,签名者不能追踪签名
环签名
环签名的特点是确保收件者不知道签名者具体是谁,换言之,整个签名本身是以匿名形式完成的
就比如上面的数字签名,如果是使用的是自己的公钥进行加密,会被对方知道是谁签的,假如用自己和N多人的公钥共同来签名,那么就不容易知道是谁签的了
多重签名
事先约定好的签名个数,只有满足后,才算签名成功
数字证书
数字证书是依赖CA的,在有CA做认证的前提下,我们才能知道发送信息的对方是谁,保证了中间即使被截获消息,也无法进行篡改
钱包
加密货币钱包保存的是一个密钥,真正的数字资产是保存在区块链账本中的数据,人们正式通过这个密钥来确认其归属
外部利益
双重支付
双重支付的发生是因为收款人在交易零确认的情况下,将货物给了付款人。而安全交易的前提应该是保证获得较多的确认数
重放攻击
在区块链中,指代一种利用重复广播相同交易消息的手段实现网络欺诈的行为。其一般出现在两个场景中:
- 发生在硬分叉造成的新链和原来那条链之间
- 发生在没有UTXO的区块链系统中,比如以太坊,如果没有防范,会造成用户的余额完全扣除
重放攻击保护
两种方法提供保护
- 在交易的时候加盖时间戳,交易只有在时间戳之后一定的时间内验证才有效
- 为交易添加序列号
分叉
好比app的升级功能
软分叉
分叉发生后,不同版本的客户端并存,如果一个消息在两个客户端下同时都可以生效,那么就是软分叉
硬分叉
新app上面的消息,旧app上面不能认同,则此时分出来的两个app为硬分叉
隔离见证
一个比特币区块包含了若干笔交易,包含两个部分,一个是转入转出地址和转账金额,另一部分是"见证"信息。隔离见证,就是将"见证"信息隔离开来,不再计入区块容量,这样能生出大量区块空间,同时能够将私钥添加数字签名,向矿工证明自己是某笔比特币的真实拥有者
闪电网络
闪电网络是为了解决效率问题产生,简单理解为开辟了一条仅供下载了带有闪电网络钱包的双方专用的快速转账通道,这个通道类似资金池的共同"账户",首先需要双方分别往账户中打入一些比特币,随后才可以在这个通道上完成转账,矿工只会记录开启通道时存入的金额,以及关闭时的账户余额分配信息打包塞入区块中
在以太坊也有同样叫做"雷电网络"的扩容方案
闪电网络是将一部分交易分流到了链下,以解决账本太大无法存储的问题
状态通道
也是一种扩容方案,同"隔离见证"一样,都是将"见证"信息隔离在区块外,以扩大存储的信息;而"状态通道"是将"状态信息"放在一条特殊的"通道"上记录
由于区块链的"状态信息"是由链上所有人共同构成的,所以一个人产生交易,网络上所有人的"状态"都会改变
状态通道技术,交易双方另辟一条交易的"通道",无论他们在这条"通道"上频繁交易了多少次,状态改变了多少回,最终关闭时,只会记录双方的余额信息
所以闪电网络就是状态通道技术的一次运用
对于一些需要频繁响应的区块链应用项目来说,状态通道技术可以优化体验,比如下象棋,只有开局和结束时的输赢状态记录在链上,期间无论如何下,都只是在双方建立的"通道"上更新状态,不仅系统响应更快速,也免于支付多余的记账费用
零确认交易
当发生交易的时候通常需要两个确认,首先是挖出区块的矿工的验证,其次是这个区块的后面又添加的一个新区块。零确认交易指的就是这两个确认都没有发生,商家就发货了,但是这样没有办法防范双重支付,同时产生的两条交易按照矿工自行决定留下哪一条
同态哈希
一种特殊的哈希,把A与B分别经过同态哈希后的数值之和,与A和B一起做哈希得到的结果一致,即为同态哈希
使用同态哈希是可以减少计算量的,比如要存入一个数据,计算了它的哈希值并加以保存,几天后,需要对其更新,在提交了更新部分的数据后,只需要将更细部分再哈西一下,和原来的哈希值相加就可以了,不需要将全部数据再次哈希
同态哈希具有某种"隐匿"的功能,可以提高交易的隐私性,用于加密货币交易,矿工可以在看不到双方地址和金额的前提下,完成对一些交易信息的验证
零知识证明
一个人想对另一个人证明某个论点,他使用的证明方法是确保另一个人无法获取已知信息以外更多额外的信息,这种证明方法就叫做零知识证明
一个自称博物馆守门人的人,炫耀自己有钥匙,他有两种方法给你证明自己
- 他直接开博物馆的门,带你进去,但同时,博物馆藏着的名作,也被暴露了
- 每个人都知道,里面有一幅镇馆之宝xxx,他可以把这幅画单独取出来给你看,这样你除了像其他人那样,只知道这幅画,无法获取更多信息了
第二种就是零知识证明,在区块链中,能够让一笔资产在转移时兼顾隐私,让矿工在验证交易时无法知道交易信息,网络中其他人也知道发生了一笔验证过的交易,但是没有更多信息了
过去事件和现在时
主链和侧链
侧链是相对于主链的概念。如果将以太坊视作一条主链,下面就是一个构建侧链的场景
以太坊上有一些DApp提供电影放映服务,但是要将电影存储在以太坊上,成本高得离谱。一条1MB的交易数据费用高达上千元,而高清电影都是以GB为单位的
于是想到了一个侧链的解决方案,先将以太坊的源码改几个参数,优化一下适用于存储场景的性能,一条公链搭好了,接着花钱租一堆服务器,就有了矿工节点,假设这条链为"电影链",加密货币叫"电影币"。相比以太坊,由于"电影链"舍弃了许多其他功能,存储性能不仅提升了,上链成本也变得非常低廉,那么此时"电影链"就是一条侧链
此时的"电影链"可以利用智能合约技术和以太坊生态打通,让那些拿着"电影币"的人可以很方便地区以太坊DApp上看电影,那么此时,这条链上存储电影的记录、"电影币"的交易明细等,都可以被链接到以太坊的网络中,这可以让侧链的公信力直线上升
以太坊也不清楚自己有多少条侧链,许多区块链为了提升价值认同感,纷纷将自己设计成以太坊的侧链。存储和运算的庞大数据就是这些侧链比较常见的应用场景
跨链技术
侧链使用自己的token,拿上面"电影链"的例子来说,你是一个以太币的持有者,想要在"电影链"上看电影,需要先把以太币换成"电影币",而整个过程是这样的:当你发起一个以太币换成一万哥侧链token的需求时,气孔跨链技术的智能合约会帮你在链上寻找并撮合接收你报价的人,撮合成功后,跨链技术确保了你们的提币是完全同时的,不会因为时差而让任何一方承担风险
中心化交易所币币交易就是使用了跨链技术,整个撮合过程同上
区块链即服务Baas
Blockchain as Service(区块链即服务),指通过云计算平台向企业用户提供区块链的配套服务,以便奇特快速和低成本的开发与管理自己的区块链,这种服务器一般针对联盟链,BaaS提供的"模板"就是超级账本
超级账本提供的服务即是,只需要用户准备好自己的业务逻辑,并将这种逻辑编写成智能合约导入BaaS提供的平台,选择适合自己的配置,就可以利用超级账本末班一键生成属于自己的联盟链
通证化
通证化就是将资产"token化",比如把一幅画分成了10个token,每个人持有一份,那么这幅画的投资流动性就变高了
但是面临的问题有:这幅画通证化后并不单独属于某个人或机构,那么谁来保管?如何确保它一直被妥善存放?如果发生失窃,又如何界定责任?
价值互联网
区块链用一套不可篡改的代码系统来奠定信任基础,让陌生人之间可以通过加密货币实现点对点的价值转移,剔除中心化的第三方平台,使交易成本变得低廉