IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 区块链学习——问题汇总 -> 正文阅读

[区块链]区块链学习——问题汇总

区块链学习问题总结

在学习区块链的第一阶段,根据导师提出的一些问题,总结各路大神回答,汇总了以下的结果,内容篇幅可能很长,而且也可能比较片面,且部分问题还未得出结论,但涵盖了区块链入门的觉大范围知识点,仅作为个人学习使用!

文章目录


1、非对称加密算法、哈希算法和数字签名基本原理

1.1 非对称加密

需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

主要有RSA算法、DSA算法、ECC算法、DH算法

1.2 哈希算法

一种只能用来加密,不能解密的算法。因为不能解密,所以只能用能通过枚举法来试过正确答案。比特币用的是SHA-256

哈希算法=哈希表+散列函数

散列函数主要有SHA256、SHA512等

1.3 数字签名

把信息用哈希算法算出一个哈希值,用某种非对称算法(比特币是SHA256)对哈希值进行加密。接收方则对哈希值解密,若解出的哈希值和传来哈希值一致,证明信息原文没有被修改过。因为哈希值有个特点,原文有一丁点的改动,哈希值都会有很大的变化。为啥不直接对原文用非对称算法加密和解密,我的想法是原文一般都太长了,直接加密和解密很慢,很影响效率。而且数字签名不需要对内容加密,只是确保没被篡改就行了。

2、对等网(P2P)基本原理,包括结构化对等网和非结构化对等网,掌握几种常见的组网方法

对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。

集中目录模式

集中目录式的P2P模式也称为结构化的P2P模式。在这种模式中,通过设置一个中心服务器来负责记录和管理所有结点的共享信息资源。每个对等结点通过查询该服务器来了解对等网络中哪一个结点拥有自己所需要的共享信息资源,查找到以后,获取其主机地址,然后进一步向该主机请求自己所需要的信息资源,最后由该主机将其共享信息复制并发送给请求的主机集中目录式P2P网络。 [3]

非集中目录模式

非集中目录的P2P模式也称为纯P2P模式。在非集中式的P2P模式中,对等网络不需要设置一个中心服务器来负责记录和管理所有结点的共享信息资源。任何一个结点要获取某个共享信息资源都是首先询问其相邻结点是否有该资源,如果某个相邻结点没有,则进一步向它的相邻结点询问(询问报文中必须包括初始请求结点的地址),直到具有该信息资源的结点接收到询问请求,那么就由这个结点向最初的请求结点进行肯定应答(同时指明自己的地址)。最后,由初始请求结点向这个结点提出资源请求,这个结点就将其共享信息复制并发送给初始请求结点。

3、比特币区块链数据结构和快增(挖矿)原理,包括Merkle 树、公钥、私钥、地址生成方法和钱包工作原理

3.1 比特币数据结构

一个完整的区块包含以下数据:

(1) 神奇数:神奇数为0xD9B4BEF9,这是一个固定值,作为区块之间的分隔符;

(2) 区块大小:该字段之后的区块的大小,单位为字节;

(3) 区块头:包含版本号、前一个区块的哈希指针、默克尔树根、时间戳、工作量证明的目标特征值、Nonce;

(4) 交易个数:记录了当前区块的交易个数;

(5) 交易记录。

神奇数、区块大小、交易个数的概念都比较好理解,重点聊一聊区块头的各项数据和交易记录的各项数据。

区块头包含以下数据:

(1) 版本号:生成该区块所用的比特币协议版本;

(2) 前一个区块的哈希指针:当前区块通过保存前一个区块的哈希指针指向前一个区块,前一个区块指向更前一个区块,这样便形成了一个链式结构,这也是区块链的由来;

(3) 默克尔树根:在《基于默克尔树的SPV证明》一文中比特猫聊过默克尔树,在此不再赘述,注意的一点是默克尔树的叶子节点和交易记录是一一有序对应的;

(4) 时间戳:比特币的时间戳是Unix时间戳,即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒;

(5) 工作量证明的目标特征值:由于比特币的挖矿难度是动态调整的,该数据正是用于调整挖矿难度的;

(6) Nonce:运行比特币挖矿程序的矿机不断对区块进行hash运算,如果生成的hash值不是以规定个数的0开头,则增加Nonce值,继续运算hash值。即Nonce是一个挖矿特征数据。

一条完整的交易记录包含以下数据:

(1) 交易生成时间;

(2) 交易的hash指针:指向该交易所花费的比特币所在交易的哈希指针;

(3) 交易记录索引编号:本次交易的索引编号;

(4) 交易输入地址:记录本次交易输出比特币的地址;

(5) 交易输出地址:记录本次交易接收比特币的地址;

(6) 输入地址数量;

(7) 输出地址数量;

(8) 数字签名;

(9) 版本号:生成该交易所用的比特币协议版本;

挖矿:通过穷举随机数来争夺交易记账权,获取记账权的矿工可以得到一定数量的比特币奖励。

3.2 比特币挖矿原理

记账工作

由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的个比特币(当前是12.5比特币,博文写作时每个比特币是4万人民币以上,大家可以算算多少钱),因此就出现大家争相记账,大家一起记账就会引起问题:出现记账不一致的问题,比特币系统引入工作量证明来解决这个问题,规则如下:

  • 一段时间内(10分钟左右,具体时间会与密码学难题难度相互影响)只有一人可以记账成功
  • 通过解决密码学难题(即工作量证明)竞争获得唯一记账权
  • 其他节点复制记账结果

不过在进行工作量证明之前,记账节点会做进行如下准备工作:

  • 收集广播中还没有被记录账本的原始交易信息
  • 检查每个交易信息中付款地址有没有足够的余额
  • 验证交易是否有正确的签名
  • 把验证通过的交易信息进行打包记录
  • 添加一个奖励交易:给自己的地址增加12.5比特币

如果节点争夺记账权成功的话,就可以得到12.5比特币的奖励。

工作量证明

区块链记账原理我们了解到,每次记账的时候回把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。
如果仅仅是这样,显然每个人都可以很轻松的完成记账。
为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量。

3.3 Merkle树

merkle tree就是一个hash二叉树,父节点是两个子节点的double sha256的结果,叶子节点就是交易的content的double sha256结果;

最下面那一层就是交易数据data block,每一个交易都可以计算出一个hash,从而层层向上,得到merkle root。

但是由于blockchain里面都merkle运算要求叶子节点是偶数,所以,当一个区块内包含当交易数量为奇数时,把最后一个交易复制一份,凑成偶数。

最后就是把merkle root保存在区块头中,交易数据被保存在区块体中,其实中间当那些hash并没有被保存,它们只是运算过程数据。

3.4 比特币钱包

生成私钥

生成钱包要从生成私钥开始,钱包地址可以通过私钥运算出来。选择私钥的过程就是在一个限定范围内,随机选择一个数。

那么这个范围是什么呢?答案非常简单,第一,私钥必须是32个字节,也就是说是32乘以8位的二进制数。实际使用中,私钥可以表示为二进制格式、八进制格式、Base64格式、WIF格式或者助记词格式。不管什么样的格式,底层都对应相同的256位二进制数。第二,私钥必须是正数并且小于 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,这是一个非常大的数了,绝大部分的256位二进制数都要比它小。

那么为什么会有上面的限制范围呢?这是因为比特币通过私钥运算公钥的时候会使用一套名为 ECDSA 的签名算法,全称是椭圆曲线数字签名算法。ECDSA 还可以选择不同的曲线,比特币选择的曲线被叫做 secp256k1。签名算法决定了私钥的选择范围。

生成私钥的时候唯一要考虑的就是安全问题。例如,通过 Python 语言 random.getrandbits(256) 就可以生成256位的随机数,就可以当私钥用了,但是这样生成的随机性其实只取决于生成时间,所以如果攻击者能够猜到你生成这个私钥的大致时间就会相对容易的通过暴力搜索的形式获得私钥。而采用 secrets.randbits(256) 就比较安全一些,因为随机性取决于系统上的一些不可复现的行为,即使我把自己的系统给你,你也不可能重新获得我的私钥。实际中,有人会到 https://www.bitaddress.org 上面生成私钥,这里的随机性取决于我们用鼠标在屏幕上随意滑动的轨迹。

总之,私钥只要满足范围,并且保证别人肯定获取不到就可以了。

计算公钥

有了私钥就可以通过 ECDSA 算法来生成比特币公钥了。

首先,我们需要把私钥传入 ECDSA 算法,这样得到的结果是一个64字节的整数,这个数是由长度均为32字节的一个点的 X 值和 Y 值拼接到一起得到的,例如,1e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7。

接下来,由这个结果获得比特币的完整公钥是非常容易的,只需要在结果的最开头加上 0x04,也就是 041e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7。

完整公钥看起来很长,所以可以压缩一下。我们知道公钥其实是一个点的 X 值和 Y 值拼接而成的,现在已知这条曲线,那么给定一个 X 值,只可能有正负两个 Y 值处在这条曲线上,所以我们可以从完整公钥里面把 Y 值剔除,只保留 Y 值的正负号。这样,如果以后需要的话,我们就可以很容易的运算出 Y 值来了。具体的做法是这样的,我们从完整公钥之中取出 X 值,如果 Y 值的最后一个字节是偶数,那么在 X 值的开头添加 0x02。如果 Y 值的最后一个字节是奇数,则在 X 值的开头添加 0x03。所以,我们当前情况下得到的压缩公钥就是 031e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7。

这就是计算公钥的过程,主要就是对私钥进行了椭圆曲线运算。以前的钱包软件通常会使用完整公钥,而现在大部分钱包都使用压缩公钥了。

获得地址

比特币的地址是通过公钥进行了一系列的转换而获得的,其中主要的是进行了多重的哈希运算。

第一步,对公钥进行加密。这里的公钥既可以是完整版,也可以是压缩版,我们选择压缩版。有了公钥之后,对公钥进行两次哈希运算,第一次通过 SHA-256 算法得到运算结果后,对结果再进行一次 RIPEMD-160 运算,最终得到的结果就是所谓的加密版的公钥了453233600a96384bb8d73d400984117ac84d7e8b。

第二步,对加密版公钥添加网络标识字节。比特币一共有两个网络:主网和测试网。如果我们需要生成一个主网地址,就要在加密版公钥开头添加 0x00,得到的结果是 00453233600a96384bb8d73d400984117ac84d7e8b。

第三步,添加校验值。校验值是通过对第二步得到的结果运行两次 SHA-256 哈希运算,然后取最终哈希值的前四个字节得到的,表示成十六机制就是 512f43c4。把这个校验值添加到第二步结果的末尾,得到的就是钱包地址了,也就是 00453233600a96384bb8d73d400984117ac84d7e8b512f43c4。有了校验值,钱包软件就很容易帮我们判定地址有没有填错或者损坏了。

但是,很多时候我们看到的钱包地址不是用十六进制表示的,而是用 Base58 格式,所以看起来可能是这个样子 17JsmEygbbEUEpvt4PFtYaTeSqfb9ki1F1。

总结

最后来总结一下,生成钱包的过程主要分了这么几步:第一步,生成一个32字节的私钥。第二步,通过椭圆曲线签名算法由私钥获得公钥。第三步,公钥经过一系列的转换得到钱包地址。注意,转换过程中采用了不可逆的哈希运算,所以从地址是不能够反向运算出公钥的。

4、UTXO、比特币交易验证方法和脚本解锁验证原理

4.1 UTXO

UTXO(Unspent Transaction Output)即为未消费交易输出的意思。在比特币中类似于以太坊中的账户模型。 在比特币中,一笔交易的每一条输入和输出实际上都是UTXO,输入UTXO 就是以前交易剩下的, 更准确的说是以前交易的输出UTXO。这是比较官方的一个说法。

简单来说,我们都知道比特币是虚拟的,本质上就是一串代码。而记录比特币交易的账户模型,就是UTXO。它记录了,包括你账户交易了多少比特币,两者的交易地址,资金来源,数额等等。所以本质上说,确实没有什么比特币,有的只是记录的一个个UTXO。

举个例子,假如我们现在钱包里有100块钱,你要花5块钱,然后找零95块。当你拿出来100块大洋花出去的时候,这100块就已经不能再算作UTXO,只有找零得到的95块,才会算做UTXO。所以,比特币使用前后所链接的公链,记录所有交易记录,当之前的 UTXO 出现在后续交易的输入时,就表示这个 UTXO 已经花费掉了,不再是 UTXO 了。不过整个新的交易,会记录在新的区块上,没有改变历史区块的数据。

另外还要提一下,UTXO与传统的账户系统有什么区别。假如有两个人,一个是小明,一个是小美。小明要给小美转100块钱。那么传统的账户模型是这样的:先判断小明账户里是否有100块的余额,然后在小明的账户里减少100块,在小美账户里增加100块。

但UTXO的机制是这样的:小明的账户里有200块钱,他要想给小美转账,必须将200块钱全部消耗掉。所以他不仅要给小美转100块,还要给自己账户转100块。这样一个好处就是,如果从第一个区块开始逐步计算所有比特币地址中的余额,就可以计算出不同时间的各个比特币账户的余额了。

4.2 交易过程

假如A分两次转给B 2个和3个比特币,此时B表面上就拥有了5个比特币,实质上是有2个UTXO,其中一个有2个比特币,另一个有3个。

B如果需要向C转4个比特币,此时的交易就会有2个输入,就是分别有2个和3个的那两个UTXO,这两个UTXO都是用B的地址锁定的。由于只需要向C转4个比特币,那么还会剩余一个(先不考虑手续费),那这个会存放在哪里呢?是不是某个UTXO里面会留一个?

比特币的设计机制是只要某个UTXO被消耗掉,就会从数据库中永久删除,也就是说B的这两个UTXO都会被彻底删除。这时需要一个找零地址,将剩余的比特币用找零地址对应的公钥哈希生成一个新的UTXO。

具体就是4个比特币用C的公钥哈希锁定生成一个新的UTXO,剩余的比特币用找零地址对应的公钥哈希再生成一个新的UTXO,这个找零地址可以是B现在的地址,也可以是一个新的地址。

4.3 验证

  • 解锁脚本可以验证UTXO是否属于你,解锁脚本包括你的数字签名和你的公钥。上一章讲过用私钥签名,公钥可以验证签名。
  • 比特币的脚本语言是一种基于逆波兰表示法的执行语言。
    • 是一个非常简单的数据结构,有压栈和出栈两种操作,其特点是先进后出,后进先出。
    • 逆波兰表示法,在逆波兰表示法中,所有操作符置于操作数的后面,又被称为后缀表示法(我们传统的运算为中缀表示法,比如(1+2)*3)。逆波兰表示法不需要括号来标识操作符的优先级,只需按照表达式顺序求值即可。

在逆波兰表示法中,(1+2)*3可以写作1 2 + 3 *,先读取1和2两个操作数,然后遇到加号后1、2相加得出3,然后3后面又有一个3,之后遇到乘号,3再乘以3得出9 。

  1. 将解锁脚本和锁定脚本组合在一起,即:*OP_DUP OP_HASH160OP_EQUALVERIFY OP_CHECKSIG*,在这个表达式里,签名、公钥和公钥哈希都是操作数,在验证不同人的UTXO时这3个都是不同的。而OP开头的都是指操作符。
  2. 计算的过程是遇到操作数就压栈,遇到操作符就进行相应的计算。由于数字签名和公钥都是操作数,所以先将它们进行压栈。
  3. 接着遇到OP_DUP,它会将栈顶的公钥复制一份,然后复制的公钥放置栈顶,此时,栈里的数据从下到上以次为:数字签名、公钥、公钥
  4. 然后是OP_HASH160,对栈顶的公钥执行ripemd160(sha256(公钥))运算,其结果其实就是pubKeyHash。此时栈里的数据从下到上以次为:数字签名、公钥、公钥哈希
  5. 接着遇到公钥哈希,并将公钥哈希压栈,此时栈里的数据从下到上以次为:数字签名、公钥、公钥哈希、公钥哈希。然后遇到OP_EQUALVERIFY,此操作符是对比两个数据是否相等,所以先把栈顶的两个数据弹栈,如果相等则继续往下走,弹出来的两个数据也不再压栈。此时栈里的数据从下到上以次为:数字签名、公钥
  6. 最后一个操作符是OP_CHECKSIG,其作用是验证签名是否正确。此时将栈内仅剩的签名和公钥弹栈,上一篇讲过用私钥进行签名,公钥可以验证签名,如果结果是true,则可以证明该UTXO属于该签名和公钥的所有者。
  • **举例:**假如这笔UTXO是你的,那么锁定脚本里面的公钥哈希必然是用你的公钥生成的,解锁脚本里面的数字签名和公钥也是你的,那么在执行OP_HASH160时生成的公钥哈希必然和锁定脚本里的公钥哈希相等,在执行OP_CHECKSIG时,你的公钥也必然能验证你的数字签名。如果这笔UTXO是小明的,那么锁定脚本里面的公钥哈希就是小明的,你的公钥生成的公钥哈希必然与其不同。如果你在解锁脚本里用小明的公玥代替你的公钥,则在执行OP_EQUALVERIFY时是能成功的,但是你是不能拿到小明的数字签名的,所以最后执行OP_CHECKSIG时,小明的公钥必然不能验证你自己的签名,所以最后你是不能花费别人的UTXO的。

5、以太坊区块链数据结构和快增原理

5.1 数据结构

网络结构

  • 在常规的互联网应用比如支付宝、微信中,用户数据和交易数据都存放在应用提供者的中心服务器上,通过IOE、MySQL集群等进行持久化的存储,当普通节点进行交易时,会向中心节点发出请求,中心节点进行各种增删改查的操作后,将结果返给用户节点。

img

  • 在以太坊中并不存在中心服务器,取而代之的是多个通过p2p协议连接起来的平等节点,在众多节点中存储了所有的数据。当用户发起一笔交易,会通过p2p协议将交易广播出去,矿工节点对此进行验证、打包并进一步广播至全网,在区块链内确认后,此操作即认为是不可更改的。
  • 在网络上关于区块链的文章中,都提到了分布式(distributed)和去中心化(decentralization)这两个词,有时候略有区别,有时侯又混用。笔者认为如果要精确区分的话,分布式强调系统的是多个组件通过发送消息协同工作,去中心化强调的是不存在一个中央节点控制整个系统的运行。因此我们认为以太坊兼具去中心化和分布式,或者说在一个分布式平台上运行了一个去中心化的程序。参考

区块链(BlockChain)

  • 在单个节点中,数据是以区块链(BlockChain)的形式来存储的。区块链由一个个串在一起的块(Block)组成。以太坊大概每十几秒会生成一个新块,记录了这个段时间内的各种信息。
  • 以太坊被描述为为一个交易驱动的状态机,它在某个状态下接受一些输入后,会确定的转移到一个新的状态。具体来说,在一个以太坊的状态下,每个账户上有确定的余额和存储信息,当接收到一组交易,被影响账户上的余额和存储信息会发生变动。从第一个创世块开始,不断的收到交易,由此能进入一连串新的状态。

img

  • 按照这个思路,以太坊每隔一段时间把交易数据和验证信息打包在一个块里,依次串接起来,就成为一个链。块越新,块号(BlockNumber,或叫块高度)便越大。

img

  • 每个块的块头(验证信息)里,保存了前一个块的块头哈希值(ParentHash,父块哈希)。这样区块链里的块就彼此联系了起来。假如我们更改了前间某个块的内容,后面块的父块哈希就和它对应不上,这种块就不被大家认可。这就保证了区块链数据的不可篡改性。

块(Block)

每个块包含块头和交易,其中块头的结构如下图所示。

img

几个关键字段的含义如下:

  1. ParentHash:父块的哈希值
  2. Number:块编号
  3. Timestamp:块产生的时间戳
  4. GasUsed:交易消耗的Gas
  5. GasLimit:Gas限制
  6. Difficulty:POW的难度值
  7. Beneficiary:块打包手续费的受益人,也称矿工
  8. Nonce:一个随机数,使得块头哈希满足POW需求
  • 账户发起交易需要花费一些gas,作为手续费归矿工所占有。在POW模式下,矿工在打包块的时候,需要不停的调整Nonce,使得整个块头的哈希值满足一定的条件(比如头几位都是0)
  1. StateRoot:状态树的根哈希值
  2. TransactionsRoot:交易树的根哈希值
  3. ReceiptsRoot:收据树的根哈希值
  • 每个矿工在把交易打包成块的时候,会组织三颗树:

    • 交易树,树叶里是交易
    • 收据树,树叶里是交易生成的收据
    • 状态树,树叶里是交易影响到的账户状态
    • 三棵树求取根哈希,可以得到 区块头中的StateRoot,TransactionsRoot,ReceiptsRoot三个字段。这样就建立了交易和区块头字段的映射。当其他用户收到块,根据块里的交易可以计算出收据和状态,计算三个根哈希后和区块头的三个字段进行验证,判断这是否为合法的块。

img

其中交易树和收据树是Merkle树,如上图所示。状态树是Merkle Patricia Tree,更详细的介绍可以参照这里

状态(State)

在上文中我们提到,以太坊是基于状态的。多个账户的状态共同组成了以太坊的全局状态。账户分为两种:

  1. 外部账户(Externally owned account),被私钥控制且没有任何代码与之关联。一个外部账户可以创建交易,来发送消息给另一个外部账户或合约账户,以此来触发转账交易和智能合约的调用、创建
  2. 合约账户(Contract account),被它们的合约代码控制且有代码与之关联。合约账户不可以自己发起一个交易,只能被外部账户调用。

img

每个账户包含了以下的字段:

  1. Balance:该账户的余额
  2. Nonce:该账户为外部账户时候,表示该账户创建的交易序号,每做一次交易都会加1。该账户为合约账户时候,表示该账户创建的合约序号,每创建一次会加1。
  3. CodeHash:该账户为合约账户时候,表示合约的哈希值,否则为空字符串的哈希
  4. StorageRoot:该账户的存储内容组成Merkle树后求得的根哈希值

img

多个块的MPT树共享了账户状态,子块状态树和父块状态树的差别在于它指向了在子区块中被改变了的账户。这样节省了总的存储空间,方便了块的回滚操作。

img

5.2 挖矿原理

以太坊,和所有区块链技术一样,使用激励驱动的安全模式。任何在网络上宣称自己是矿工的节点都可以尝试创建和验证区块。世界各地的很多矿工都在同一时间创建和验证区块。每个矿工在提交一个区块到区块链上的时候都会提供一个数学机制的“证明”。这个证明就像一个保证:如果这个证明存在,那么这个区块一定是有效的。

为了让一个区块添加到主链上,一个矿工必须要比其他矿工更快的提供出这个“证明”。通过矿工提供的一个数学机制的“证明”来证实每个区块的过程称之为工作量证明(proof of work)。证实了一个新区块的矿工都会被奖励一定价值的奖赏。奖赏是什么?以太坊使用一种内在数字代币—以太币(Ether)作为奖赏。每次矿工证明了一个新区块,那么就会产生新的以太币并被奖励给矿工。

以太坊的矿工收入主要也包含区块奖励与交易费两部分,但与比特币相比有几处不同:

以太坊的基础区块奖励没有比特币的定期减半计划。在初始阶段,以太坊的基础区块奖励是 5 ETH。在 2017 年名为拜占庭的硬分叉中,649 号提案被激活,基础区块奖励调整为 3 ETH。随后,1234 号提案将基础奖励进一步降低至 2 ETH。

为了给智能合约消耗的计算资源定价,用户在以太坊中发起交易时,不直接指定交易费,而是指定一个交易费单价,被称为燃料价格(gas price)。交易实际执行时按照计算量的多寡消耗燃料,燃料用量乘以燃料价格就是以太坊最终向每笔交易收取的交易费。

以太坊出块速度较快,所以会出现更多分叉。为了给矿工提供更好的挖矿体验,以太坊引入了“叔块”的概念。每个区块除了选择自己的父亲区块,还可以选择最多两个“叔块”,每选择一个叔块可额外获得基础区块奖励 1/32 的奖励。而被主链区块选中的叔块,其中的交易不会被执行(不为系统共享吞吐量),但挖到该块的矿工也可以获得一定的奖励,具体数值是:

img

6、以太坊交易内容、类型和验证机制,以太坊合约和状态数据管理基本原理

6.1 以太坊交易

https://www.jianshu.com/p/0e2f53acb7c7

以太坊的交易主要是指一条外部账户把经过签名的数据包发送给区块链上另一账户,这个数据包包含发送者的签名、接收者的地址以及发送者转移给接收者的以太币数量等内容。以太坊上的每一笔交易都需要支付一定的费用,用于支付交易执行所需要的计算开销。计算开销的费用并不是以太币直接计算的,而是引入Gas作为执行开销的基本单位,通过Gas Price与以太币进行换算。

一般一条交易可能包括下面的内容,

from:交易发送者的地址;to:交易接收者的地址;value:发送者要转移给接收者的以太币数量

data:数据字段,如果存在,则是表明该交易是一个创建或则调用智能合约交易

Gas Limit:表示这个交易允许消耗的最大Gas数量

GasPrice:表示发送者愿意支付给矿工的Gas价格

nonce:用来区别同一用户发出的不同交易的标记

hash:由以上信息生成的散列值(哈希值),作为交易的ID

r、s、v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成。

按照场景,交易可以分为三种类型

1)转账交易。转账是最简单的一种交易,从一个账户向另一账户发送以太币。

web3.eth.sendTransaction({undefined

from:

to:

value:

})

2)创建智能合约的交易。

web3.eth.sendTransaction({undefined

from:

value:

})

创建合约是指将合约部署在区块链上,这也是通过发送交易来实现的。在创建合约的交易中,“to”字段是一个空字符串,在“data”字段中指定初始化合约的二进制代码,之后合约被调用是,该代码的执行结果将作为合约代码。

3)执行智能合约的交易。

web3.eth.sendTransaction({undefined

from:

to:

value:

})

该交易是为了执行已经部署在区块链上的智能合约,在该交易中,from是合约地址,to是要调用智能合约的地址。
交易过程

在以太坊中,交易的处理是一个过程,从账户发起交易请求开始,到包含该交易的区块被共识节点同步为止(一般来说,出于安全性考虑,会等到该区块后面再“挖”出一些块,这笔交易才算确定),满足这一个过程才算完成一笔交易。

1、一笔普通的转账或合约调用的交易过程

1)发送交易请求。发送者(用户A)按照格式要求在以太坊网络中发起一个交易请求,该请求被传向用户A的对等节点,如图2所示。

img

2)交易请求验证和广播。网络上的节点(用户B)同步到此交易,检查交易是否有效、格式是否正确。如果符合要求,计算可能的最大交易费用,确定发送方的地址,并在本地的区块链上减去相应的费用,如果账户余额不足,则返回错误,这条交易废弃。对符合要求的交易请求,用户B将其放在交易存储池中,并且转发给其他节点。其他收到交易请求的节点重复用户B的处理过程。如图3所示。

img

3)记账节点打包交易和执行合约。对于转账交易,获得记账权的节点将该交易和其他交易一起打包到区块中;对于合约交易,矿工将该交易和其他交易一起打包到区块中,并在本地的EVM上运行被调用的合约代码,直到代码运行结束或Gas用完。如果代码并未结束而Gas已经用完,那么代码运行而改变的状态回滚到代码运行之前,但是已经支付的交易费用不可收回,交易费用有获得记账权的矿工获得。如果代码运行结束Gas还有剩余,那么矿工也只会获得消耗Gas x GasPrice作为手续费,不会收取剩余Gas对应的手续费。如图4所示。

img

4)区块广播。用户B把包含用户A的交易请求的区块发送至对等节点,并在全网传播。如图5所示。

5)区块验证同步。其他节点收到该区块后,验证区块,如果区块通过验证,节点将内存池中原来用户A的交易请求删除,同时同步该区块,将其添加到本地的区块链中。对于区块中的执行智能合约的交易,其他节点会在本地的EVM上运行该智能合约,并互相验证运行的结果。如图6所示。

img

通过上面五个步骤,整个交易的过程已经结束。但是一般来说,当包含交易的区块链被同步到区块链后,出于安全性的需求,还需要再挖掘一些块,这笔交易才能算是真正地被确认。

2、一个创建智能合约的交易过程

注:有些步骤和普通转账的一样,交易的图就不画了

1)发送创建智能合约请求。发送者(用户A)按照一定的格式要求,在以太坊中发起一个创建智能合约的交易请求,如图7所示

img

2)交易请求验证和广播。网络上的节点(用户B)同步到此交易,检查交易是否有效、格式是否正确。如果符合要求,计算可能的最大交易费用,确定发送方的地址,并在本地的区块链上减去相应的费用,如果账户余额不足,则返回错位,这条交易废弃。对符合要求的交易请求,用户B将其放在交易存储池中,并且转发给其他节点。其他收到交易请求的节点重复用户B的处理过程。

3)打包,创建合约账户,部署合约。获得记账权的节点将该交易和其他交易一起打包到区块中,获得记账权的节点会根据其提供的交易费用和合约代码,创建合约账户,并在账户空间中部署合约。智能合约账户的地址是由发送者的地址(address)和交易随机数(nonce)作为输入,通过加密算法生成的、交易确认后智能合约的地址返回给发送者。如图8所示。

img

4)区块广播。用户B把包含用户A的交易请求的区块发送至对等节点,并在全网传播

5)验证区块,并部署智能合约到本地。共识节点接收到该区块,验证区块,如果区块通过验证,节点从内存池将原来用户A创建智能合约的交易请求删除掉,同步区块链,并将智能合约部署在各自的本地区块链中。如图9所示。

img

经过上面的五步,创建智能合约的交易完成。但是一般来说,当包含交易的区块链被同步到区块链后,出于安全性的需求,还需要再挖掘一些块,这笔交易才能算是真正地被确认。

7、智能合约基本原理

智能合约的本质

智能保证执行安全,并减少交易成本。智能合约允许在没有第三方的情况下进行可信交易,且交易可追踪、不可逆转。智能合约是以信息化方式传播、验证或执行合同的计算机协议。智能合约程序不是单纯自动执行的程序。它本身就是系统的有效参与者。它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。

智能合约漏洞

去中心化执行的智能合约由于代码开源,会导致安全漏洞更容易被利用却可能无法迅速修复。2016年6月The DAO的智能合约漏洞造成损失5000万美元的损失,开发者未能就漏洞及时做出回应。最终通过回滚数据块、以太坊硬分叉挽回损失,却严重损害区块链的去中心化属性。

以太坊智能合约中的问题包括合约编程Solidity、编译器错误、以太坊虚拟机错误、对区块链网络的攻击、程序错误的不变性以及其他尚无文档记录的攻击。

智能合约的用途

区块链技术的去中心化账本功能可以被用来创建、确认、转移各种不同类型的资产及合约。几乎所有类型的金融交易都可以被改造成在区块链上使用,包括股票、私募股权、众筹、债券和其他类型的金融衍生品如期货、期权等。

智能合约工作原理

用户承诺双方的权利和义务编写为电子化的机器语言,参与者分别用各自的私钥签名。签名后的智能合约传入区块链网络中。合约通过P2P的方式在区块链全网中扩散,验证节点会将收到的合约先保存到内存中,等待触发对该份合约的共识和处理。共识时间到了,验证节点会把最近一段时间内保存的所有合约打包成一个合约集合,并算出这个合约集合的哈希值,组装成区块结构,扩散到全网;其他验证节点收到后,与自己保存的合约集合对比教验,同时发送一份自己认可的合约集合给其他验证节点;通过多轮的发送和比较,所有验证节点最终在规定的时间内对最新的合约集合达成一致。

每个区块包含以下信息:当前区块的Hash值、前一区块的Hash值、达成共识时的时间戳、以及其他描述信息;已经达成共识的合约集。

智能合约执行过程

智能合约定期检查自动机状态,逐条遍历每个合约内包含的状态机、事务以及触发条件;将条件满足的事务推送到待验证的队列中,进行签名验证,确保事务的有效性,等待多数验证节点达成共识,成功执行并通知用户;未满足触发条件的事务将继续存放在区块链上。

事务执行成功后,智能合约自带的状态机会判断所属合约的状态,当合约包括的所有事务都顺序执行完后,状态机会将合约的状态标记为完成,并从最新的区块中移除该合约;反之将标记为进行中,继续保存在最新的区块中等待下一轮处理,直到处理完毕。

8、区块链共识机制,共识类型和共识方法比较分析

一、区块链的共识机制:

在区块链系统中没有像银行一样的中心化机构,所以在进行传输信息、价值转移时,共识机制解决并保证每一笔交易在所有记帐节点上的一致性和正确性问题。区块链的这种新的共识机制使其在不依靠中心化组织的情况下,依然大规模高效协作完成运转。

除了密码学技术外,共识机制也是区块链必要元素及核心部分,是保障区块链系统不断运行的关键。

在区块链网络中,由于应用场景的不同,所以采用了不同的共识算法。目前区块链的共识机制主要有四类:1.工作量证明机制pow、2.权益证明机制pos、3.委托权益证明Dpos、4.验证池共识机制pool

1.工作量证明(Proof of Work,简称POW):

可简单理解为一份证明,证明你做过一定量的工作。通过查看工作结果,就能知道你完成了指定量的工作。区块链共识算法用的最多的就是POW。比特币和以太坊都是基于POW的共识机制。

例:比特币在区块的生成过程中使用的就是POW机制,简单理解就是大家共同争夺记账权利,谁先抢到并正确完成记账工作,谁就得到系统的奖励,奖励为比特币,也就是所谓的“挖矿”。矿工(参与挖矿的人)通过计算机的算力去完成这个记账工作,这个拥有计算能力的专业计算机就是所谓的“矿机”。

优点:

①完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本。

②只要网络破坏者的算力不超过全网总算力的50%,网络的交易状态就能达成一致,并不可篡改历史记录。

③投入越多算力,获得记账权概率越大,越有可能产生新的区块奖励。

缺点:

①目前比特币挖矿造成大量的算力和能源浪费。

②挖矿的激励机制也造成挖矿算力的高度集中

③结算周期长,每秒最多结算7笔交易,不适合商业应用。

2.权益证明(Proof of Stake,简称POS):

通过持有Token(代币)的数量和时长来决定你获得记账的机率,类似于股票的分红制度,持有股权越多的人就能够获得更多的分红。Token相当于区块链系统的权益。目前有很多数字资产用pow发行新币。

优点:

①降低了PoW机制的资源浪费。

②加快了运算速度,也可以理解为工作量证明的升级版

缺点

①拥有币龄越长的节点获得记账权的几率越大,容易导致马太效应,富者越富,权益会越来越集中,从而失去公正性。

3.委托权益证明(Delegated Proof of Stake,简称DPOS):

是基于POS衍生出的更专业的解决方案,类似于董事会投票,指拥有Token的人投票给固定的节点,选举若干代理人,由代理人负责验证和记账。不同于POW和POS的全网都可以参与记账竞争,DPOS的记账节点在一定时间段内是确定的。

为了激励更多人参与竞选,系统会生成少量代币作为奖励。比特股就采用该方式。

优点:

相较pow,dpos大幅提高区块链处理数据的能力,甚至可以实现秒到账,同时也大幅降低维护区块链网络安全的费用。

缺点:

去中心程度较弱,节点代理是人为选出的,公平性相比POS较低,依赖于代币的增发来维持代理节点的稳定性。

4.验证池共识机制Pool

这是一种基于传统的分布式一致性技术,加上数据验证的机制,是目前行业链大范围在使用的共识机制;

优点:不需要依赖代币也可以实现秒级共识验证;

缺点:去中心化程度弱,更适合多方参与的多中心商业模式;

总结:每一种共识机制都不能同时满足安全、效率、公平。去中心程度越弱,安全性就越低,区块链的速度就越快;去中心化程度越强,安全性就会越高,区块链的速度就会越慢。POW完全去中心化,但运行效率太低。POS提高了效率,但却降低了公平与安全。DPOS有强烈的中心化特性,却在短期内效率最高。目前行业区块链大范围使用Pool共识。

9、区块链不可篡改的基础、条件和原理

主要:随机+不可逆计算+时间戳

此外数据进入分布式数据库中,也不是单纯的打包进来就没事了,底层的数据构架则是由区块链密码学来决定的,打包好的数据块,会通过密码学中哈希函数处理成一个链式的结构,后一个区块包含前一个区块的哈希值,因为哈希算法具有单向性,抗篡改等特点,所以只在区块链网络中,数据一旦上链就不可篡改,且可追溯,另外你的账户也会通过非对称加密的方式进行加密,进而保证了数据的安全,验证了数据的归属。

单个或多个数据库的修改无法影响其他数据库了。除了超过整个网络51%的数据同时修改,这几乎不可能发生。区块链中的每一笔交易都通过密码学方式与相邻两个区块串联,因此可以追溯到任何一笔交易的前世今生。这里就是区块链的数据结构,区块头和区块体。密码学 哈希值,时间戳,通过时间戳来决定它的顺序,不会打乱。

这个原理运作到我们的商业体系里边,包括商品体系,我们所说的溯源,可以查询到商品在哪里生产的,生产原材料是什么,从后往前一步一步查找到,因为我们在每做一步动作的同时把信息数据写到区块链的体系里,通过这个体系我就可以查找到是不是使用的这个原材料,是不是用这个工艺生产出来的。通过这样一个数据的结构存储达到我们共同相信它,这商品的确是这样生产出来的,相信这是真的。

另外数据无法修改,如果想要修改要达到51%的人才可以,从股权上理解,拥有公司51%的股权在这个公司就有话语权。这只是一个可能性而已。为什么用区块链技术比互联网技术更历害、更安全呢,因为他分布开了,如果你想要去修改里面的数据,作为黑客要找到所有记这个账的计算机,每台计算机都要修改,也许能很快找到其中一台把它改掉,但很难把所有的改掉。

区块链里所有的交易信息都是公开的,因此每一笔交易都对所有节点可见,由于节点与节点间是去中心化的,所以节点间无需公开身份,每个节点都是匿名的。比如每台算能机启动后,每台算能机谁启动谁没启动,我们相互间是不知道的,你可以在你家里开启,这里有个多劳多得的问题。

10、区块链去信任的基础、条件和原理

首先,分布式账本构建了区块链的框架,它本质是一个分布式数据库,当一笔数据产生后,经大家处理,就会储存在这个数据库里面,所以分布式账本在区块链中起到了数据存储的作用;

区块链由众多节点共同组成一个端到端的网络,不存在中心化的设备和管理机构,节点间数据交换通过数字签名技术进行验证,无需人为式的互相信任,只要按照既定的规则进行。节点间也无法欺骗其他节点。因为整个网络都是去中心化的,每个人都是参与者,每个人都有话语权。

区块链三大特性,去中心化,不可篡改,去信任(或者建立信任)。去中心化和不可篡改完全是技术问题,理解其中原理,自然就明白了。但是去信任,就不单单从技术的角度就能解释清楚。

首先要理解什么是信任,“值得信任的个人或团体意味着他们寻求实践政策,道德守则,法律和其先前的承诺(摘自百度百科)”,因此可以理解信任为相信事情按照已定的规则进行。

还是比较抽象,比如银行转账,我们向某人转100块,规则是什么?是银行从我的账户扣掉100块后,对方的账户会增加100块。如果我认为银行按照上面的规则行事,那么我就信任银行,相反,如果我认为银行可能扣了我钱,却不给对方账户增加钱,那我就不信任银行,因为它不按照已定的规则行事。

因此可以认为信任的基础首先是规则,然后是执行规则的个体,也就是我们信任的对象。

但是我们为什么要信任呢,因为规则需要执行,在当前社会中,这个执行规则的主体可能是个人,也可能是一个组织,也可能是一个国家。

那好,问题就出来了,规则的执行是否可以不依赖于人或者组织?如果不依赖执行者,也就不需要信任。

跨领域法律学者尼克·萨博(Nick Szabo)在1995年提出了“智能合约”的概念:一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。

这个概念在当时并没有引起人们多大的注意,因为没有技术可以承载智能合约,直到区块链技术的出现。区块链可以制定交易规则(开发智能合约),并由技术来保证规则的执行,参与方之间不需要相互信任,因为规则是靠技术来保证执行的。

因此去信任,并不是不需要信任,而是我们信任的对象从我们交易参与方变成了程序。所以也可以理解为区块链建立信任,建立了基于数据和程序的信任。

11、去中心和分布式的异同,区块链去中心的本质和前提条件

1、去中心化

去中心化是互联网发展过程中形成的社会关系形态和内容产生形态,是相对于“中心化”而言的新型网络内容生产过程。在计算机技术领域,去中心化结构使用分布式核算和存储,不存在中心化的节点,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。任一节点停止工作都会不影响系统整体的运作。

2、分布式

分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性,这种组织方式能有效提升信息传递效率。

3、两者的异同

关于“去中心化”和“分布式”的区别大概可以总结为:去中心化是分布式网络结构中的一种,所有的去中心化都是采用分布式网络结构的,而分布式网络结构可能是“中心化”也可能是“去中心化”的。

放眼到人类现实社会组织形态中,现在不少企业尤其是互联网企业提倡“扁平化管理”,“扁平化”组织就有点类似于分布式的理念,但依然是有中心的,只是削减了层级,提升了沟通和效率。而真正的去中心化人类组织或许还没有确切的例子,即使一个国家和地区处在“无政府状态”下,也不能称为去中心,因为其社会还是在一些中心化规则下运行的。

“去中心化”是与区块链技术的产生相生相伴的一个概念,在公链中表现的尤为明显,不同的公链构架都在“效率”、“安全”、“去中心化”三角关系中寻找着平衡,也反映着人类对于社会政治形态的追求和思考,而其相关理论,或许会在区块链发展的众多实践中得到丰富和发展。

去中心的条件

1.通过分布式记账,避免把数据记在一个人手里。大家都记录,所以不是一个人说了算。

2.区块链共识机制确保每一个人记得数据都是一样的,只有通过大家共同确认的数据才被记录,这样的话数据都是能被验证的,而且公开透明。这是与中心化集权相反的。

3.智能合约让交易自动执行,不需要中间人和背书人,这就让交易双方可以脱离中心化连接,自主发起可信交易。

12、公链和联盟链的基本区别

12.1 公链

**公有链总结下来就是在一个新技术体系里面实施传统的应用,由于公有链的驱动力就在于币值,所以应用也大多是以币为核心。**最早的中心化交易所其实就是币圈的证券交易所,里面的合约交易、期货交易也都是照搬的传统金融里的设计;火爆一时的ICO也就是众筹,只不过筹到的是币,需要再经过交易所换成法币而已;我们老是说的潜力无限的资产通证化也是借鉴了ABS(Asset-backed Securities,资产证券化)的思想;不久前再次引爆市场的DeFi流动性挖矿,就是用智能合约替代了AMM(Automated market maker,自动做市商)的角色。所以大家所谓的创新不过就是已有设计在区块链上重新做了一次“叠加”,当然我们也不能完全否认这里面的创新性和探索的必要性。

12.2 联盟链

**联盟链总结下来就是用传统的方式在运营一个新技术,完全摒弃了币的概念。**因为联盟链应用的落地还是依赖于决策者,传统的商业模式无论对商业公司还是客户来说,都是更熟悉的方式。因此我们会看到区块链领域里的基于云计算的SaaS化(BaaS)、项目的私有化部署(依然是按license收费)、由商业公司产品化来推动技术的落地,以及仍然面向的是头部的大客户、追求标杆型项目等等传统的运营模式

13、区块链TPS扩容方法、原理和演进路径、技术图谱,以及典型的技术方案实例,包括通道、侧链、闪电网络、layer1/layer2、零知识证明

首先,我们都知道扩容是区块链目前最紧迫的问题。如果比特币、以太坊想达到十倍交易,肯定需要增加TPS。而扩容本身有其发展的方向和设计的方案,目前比较通用的一种分类方法,就是第一层和第二层扩容技术。

13.1 layer1/layer2

所谓第一层扩容技术,即改进区块链自身,把区块链自身变的更快、容量变的更大。其实,区块链是一个项目,它本身是由很多个部分组成的。由下往上分别是P2P的网络、共识机制、虚拟机、区块链的编程语言,每一部分都有很大的发展和改进的空间。而区块链的扩容方案是怎么样改进?对于第一层扩容技术来说,其实都是在共识这个部分改进的。
640?wx_fmt=png

而第二层扩容技术,目的是把计算移到链下。怎么来理解第二层扩容技术呢?举一个例子,最近有一个比较火的云斗龙区块链游戏,游戏玩家通过让龙去战斗,让龙升级,然后得奖金。龙的整个战斗过程,如果放到链上,玩家在玩游戏的时候就需要很多的燃料费,并且还要花时间等交易的确定,游戏体验非常不好。因此使用第二层扩容技术,把战斗过程放到链下,最后只把结果给存到链上,这样就会大大改善游戏的体验。这就是第二层技术的一个基本思路。
640?wx_fmt=png

链上扩容方法——

1.增加区块链容量
比特币一个区块容量大小为1M,每秒最多支持7笔交易,以太坊每秒也只有10几笔,EOS号称要实现百万级的TPS,目前也只有4000左右。这个和visa过万支付宝几十万的TPS相比还相差甚远。所以有人提出增加区块的容量,比如将比特币现在的1M扩容到2M、8M等,通过扩容来提升公链性能。但不足的地方在于分叉率提高,可能还会导致空块。

2.隔离见证
隔离见证是由比特币长期团队开发的对于BiTCOin Core的拟议更新,将非必要签名信息移除区块,使得区块容量降低一半。但即使这样,性能只提升一倍,提升幅度有限。

3.更改共识机制
在POW共识之后,提出了PoS、DPoS等多种共识算法。相比POW,PoS和DPoS机制没有大量能源的消耗,性能也得到了显著提升,但这是牺牲了去中心化为代价的,现阶段还未出现完美解决三元悖论的共识算法。

4.DAG技术
称为:有向无环图,将原始的链式结构改为网状结构,大幅提升并发性能。像IOTA就是采用DAG技术,并非区块链,也引起了一波热炒,不过现在也还没有实地的技术落地应用出来。安全性和一致性上还未得到充分的验证。

5.分片技术
分片技术将全网的工作量分配到各个分片中并行处理,改变网络验证的方式来增加吞吐量。不过分片技术的开发难度大,状态分片需要克服诸多挑战。

13.2 侧链

下面我们先来讲一下传统的第二层扩容技术,就是侧链。这里举一个简单的应用场景,帮助大家理解侧链。假设你们公司有一百个员工,因为需要协同工作等原因,员工之间可以通过发一点比特币作为回报,但是你不想每一笔交易都发到链上,而是希望员工之间可以自由的进行交易,同时速度也非常的快。基于这种场景,一种非常直接的交易方式就是所谓的侧链。

首先,你们公司得有自己的一个区块链,然后决定矿工以及服务器的数量。假设我是公司里的一名员工,需要先把比特币存进多重签名钱包里面,这个多重签名钱包需要矿工的签名同意,才能使用里面的资金。所以,员工第一步就是把钱存到这个钱包里面,由矿工签名,签完名之后员工自己在这个公司里面就有了一个钱包。通过这种方式,员工就把主链上的币转到侧链上。而侧链上支撑的功能和主链是一样的,可以交易,所以交易速度就可以更快。而侧链是公司自己跑的,也不会收取你的手续费。

显然,对于用户来说,侧链的优势很明显。不过,因为侧链只是在公司内部跑,服务器比较少,会不会很容易受到黑客攻击呢?其实,这也是传统侧链的问题,很可能矿工把你的资产给偷走了,这就需要你信任矿工。对于这个问题,新型第二层扩容技术可以解决。

13.3 Plasma

在新型的第二层扩容技术中,包含多种技术,首先给大家介绍Plasma。Plasma现在普及率还不是很高,我个人认为它是区块链最潜力的技术之一。Plasma也有很多不同的发展方向,今天因为时间原因,我们只讲一个方向,就是Plasma Cash。

Plasma Cash怎么理解呢?我们也来举一个例子,首先你在链上锁定资产,接下来在链下转移资产。转移资产是发给一个中心化的服务器,你把钱转给某个人,你在告诉他,转移了这个交易签个名,这个服务器内部有一个小小的区块链,每个区块在链上都有个Mekle(是一个数据结构)。比如你在链下有100万个交易,你不能把他存在链上,但是你可以通过证明的方法,证明你的交易是在这100万个区块里面。因为链下的服务器会产生区块,每个区块有一个哈希值,最后你在链上可以通过哈希值验证这个交易是否在哈希值里面。

Plasma解决的就是容量的问题,因为你在链上存的就是哈希值,在链下可以进行无限笔交易,虽然每笔交易等的时间和链上交易的时间是一样的,但是我在链下交易的量就比链上大的多。所以别人是没有办法把你的资产拿走的,虽然是中心化的服务器来解决,但是它本质是解决信任问题,不需要任何人去保护你的资产,你的资产由自己的签名和密钥控制。

但是Plasma也存在一些问题,第一个是你只能用来做资产交易;第二个问题是需要等待在链上确认交易;第三个想要确保你的资产安全,你需要一直监视主链,你如果没有监视,你的资产还是可能会被偷走。

13.4 状态通道

相对于Plasma只能用来做资产交易这个痛点,状态通道可以通过写一个智能合约,可以让你在链下执行任意程序。不过,发起一笔交易时,状态通道首先要在链上创造一个多重签订合约;接下来,是在链下接受这笔交易或者状态的更新,每一笔交易多重合约里面所有人都要签名;而合约发布最终的更新,会检查所有人是否都签名了。

但是,状态通道还是有些问题,一个最明显的问题就是用户的数量需要固定,假如用户不固定的,毫无安全性可言。第二个问题是每一笔交易都需要所有人签名,比如玩一个游戏,每一笔交易都需要几千人签名,这笔交易就行不通了。第三个问题你还是需要监视主链,比如想让一些老的交易退出来,你自己需要用更新的交易去挑战之前的老交易,所以这样三个问题。

13.5 闪电网络

加密货币的交易频率受到区块链网络容量的限制,随着加密货币生态系统的参与者越来越多,此网络会越来越拥挤,其整体性能也会受到影响,因此需要闪电网络减轻加密货币交易系统的拥堵问题。

闪电网络由一个基于区块链的链下传输网络组成,在点对点(P2P)的层面上工作,其可用性依赖于双向支付通道的创建,用户通过此通道可以进行无缝的加密货币交易。

为了创建一个支付通道,双方需要设置一个多重签名钱包并在其中存储一些资金,这些资金只有在双方均提供私钥的情况下才能动用。

在双方决定开通一个支付通道后,他们就可以在钱包中来回传递资金。尽管建立支付通道的过程涉及链上交易,但所有在通道内发生的交易都是链下的,因此不需要全球性的整体共识。如此一来,这些交易可以通过智能合约快速执行,从而在支付更低手续费的同时获取更高的TPS(每秒交易速率)。

交易完成后,双方可以关闭支付通道并把自己的资产记录广播到全网,闪电网络的智能合约会确保交易双方按照最新的资产记录接收加密货币。

闪电网络的优势

有助于减少加密货币交易网络的流量消除拥堵提高交易效率;通过使用双向支付通道,闪电网络可以实现近乎实时的交易;闪电网络适用于小额支付,自动化的小额支付不需要人为干预。

闪电网络的局限

如果交易双方的接收方不在线上,则无法进行闪电网络支付;为保证资金安全,需要对支付通道进行定期监控;闪电网络不适合大额支付,由于此网络依赖大量的多重签名钱包(基本上是共享的钱包),因此很可能缺乏足够的余额来充当大额支付的中介;创建和关闭支付通道涉及链上交易,需要手动操作,可能产生较高的交易费用。

13.6 十倍协议

以上不管是Plsama还是状态通道都有很大的问题,像Plsama不能支持几万人的扩容,我们怎样去支持大型的扩容?在消费者应用中绝大多数交易的经济价值是有限的,比如云斗龙在链下的战斗,我的龙砍了你的龙一刀,像这些交易相对是较低的。在这些大型的消费者应用中,绝大多数交易的经济价值都是有限,我们如何用一个经济模型来扩容?其实,我们只要打造这样一个系统,确保系统本身交易的价值大于攻击本身的价值。

对于上边这个问题,第二层扩容技术的十倍协议是一种解决方案。首先你在链上锁定资产,在链下将交易通过P2P网络广播给验证者,这些验证者可以通过一个去中心化的文件系统,去下载应用的本身。比如,每个验证者都会在本地跑一套云斗龙这款游戏,链下的交易是通过P2P广播的,每一个验证者都可以知道云斗龙的情况。

假如你的龙变成二十级了,有人质疑你的龙实质上是十五级。这时,你可以发起一个挑战,挑战的过程中可以放进一部分抵押金,如果有一些质疑者想要挑战,也是可以放进一部分抵押金,双方都把抵押金放进去之后,经济体里有厉害关系的人就可以投票了,每一个验证者都知道这个龙的情况,最终得票少的一方就会损失掉押金。

如果有恶意攻击者想要作恶,必须要占有超过50%的经济。假设攻击者买了云斗龙这款游戏超过50%的经济,他是否会攻击成功?结果是是的。但是你会发现,假如你攻击成功,这个经济体会缩水的,为什么?因为我们有一个链下的广播系统,每个人都可以成为验证者,最后通过攻击得到的这样一个系统,你虽然可以在链上保证不正确的状态,但是实际上所有人在链下都可以看到这是假的,就会导致对整个应用失去信心,从而从这个经济体退出,这个经济体本身就会缩水。而攻击者本身拥有50%的经济,所以攻击者本身是最大的受害群体。因此,这个系统,只要我们保证交易习惯的价值小于攻击者所需要失掉的价值就是可运行的了。

和所有的系统一样,十倍协议也有问题。假如你买超过50%的经济体,确实可以攻击这个系统;另外需要解决怎么样激励验证者。

最后总结一下,今天我主要讲了第二层的几个解决方案。包括传统的第二层扩容技术侧链,有一个信任问题;而新型的扩容技术,讲到Plasma、状态通道和十倍协议,十倍协议是可以移到链下,扩容的量比状态通道大很多。如果你想要攻击十倍协议,可以通过购买超过50%的经济体来攻击十倍协议,就是这几个主要的扩容方案。

14、区块链加密交易原理,如zcash等

Zcash 技术的核心是零知识证明(Zero-knowledge Proof),这种证明使得交易的有效性可以在不公开资金数额和交易方地址的情况下仍能得到验证。Zcash 使用的零知识证明技术是所谓的 zk-SNARKs(简洁的非交互式零知识证明)。

Zcash 是建立在可靠科学之上的,并且经过了第三方一丝不苟的审计。这是一个开源的协议,由精通安全的工程团队开发,并且建立在 Bitcoin Core 久经靠验的代码库基础上。

零知识证明

在密码学中,零知识证明(zero-knowledge proof)或零知识协议(zero-knowledge protocol)是一种方法,通过该方法,一方(the prover, 证明者)可以向另一方(the verifier, 证明者)证明他们知道值x,而无需传达任何信息,除了他们知道值x。零知识证明的本质是,通过简单地揭示信息来证明某人具有某些信息的知识是微不足道的。面临的挑战是在不透露信息本身或任何其他信息的情况下证明拥有这种财产。[1]

如果证明陈述要求证明者拥有某些秘密信息,那么验证者将无法在不拥有秘密信息的情况下向其他任何人证明该陈述。被证明的陈述必须包括证明者具有此类知识的断言,但不包括知识本身。否则,该语句将不会被证明为零知识,因为它在协议末尾为验证者提供了有关该语句的其他信息。当陈述仅包含证明者拥有秘密信息的事实时,知识的零知识证明就是一个特例。

交互式零知识证明要求证明其知识的个人(或计算机系统)与验证该证明的个人之间进行交互。[1]

实现知识的零知识证明的协议必须必须要求验证者提供交互输入。这种交互式输入通常以一个或多个挑战的形式进行,使得证明者的回答将使验证者确信且仅当陈述为真时,即证明者确实拥有要求保护的知识。如果不是这种情况,验证者可以记录协议的执行并重播以说服其他人他们拥有机密信息。由于重播者确实拥有信息(这意味着协议泄漏了信息,因此不能以零知识证明),因此新的一方的接受是合理的,或者接受是虚假的,即被不接受的人接受实际上拥有信息。

存在一些形式的非交互式零知识证明,[2] [3],但是证明的有效性取决于计算假设(通常是理想密码哈希函数的假设)

15、主流公链原理、特点和差异

15.1 以太坊

Token:ETH

数量:9000万+

以太坊Token每年通胀1000多万,从最开始的7200万到现在的9000万+,从以太坊的共识奖励来看,每产生一个新区块就会产生5个新以太币。如果每14秒挖出一个区块,一年有3150万秒,这意味着每年有225万个区块被挖出来。225万个区块,每个区块5个以太币,也就是每年会产出1130万个以太币。从转账消耗和每年因为各种情况造成的丢失,这个通胀是正常的。

共识:POW→POS

工作量证明机制→股权证明机制

项目研究:智能合约+去中心化应用平台

项目进度:主网上线,开发完成,技术成熟。

社区建设:开源自制社区较为成熟。

近期动态:传言以太坊出矿机,以太坊分叉。

以太坊作为全球最早加入智能合约的去中心化公有链,技术成熟无可比拟,后来的大部分应用或者公链一开始都是基于ERC20进行的开发。因此可以看出以太坊的价值之大。

但以太坊也不是万能的,吞吐量的限制,存储上的缺陷,使得以太坊在增加一些应用,获得更多用户进行交易后的拥堵也完全暴露,一个以太猫,让交易成了难事。这使得以太坊几乎无法满足现在的绝大多数应用场景。

15.2 小蚁

Token:NEO

数量:1亿

NEO内置两种Token,小蚁股和小蚁币。小蚁股代表小蚁区块链中所有权,总量1亿,在创世块中一次性创设,可用于记账人选举,投票决定小蚁参数更改,获得小蚁币分红等。小蚁股现流通占比近65%,在非小号公布的即为小蚁股。单从Token价格来说,确实算比较成功的了。

小蚁币总量1亿,代表使用权,用于小蚁区块链记账等费用,初期为零,分22年左右解锁。

共识机制:PBFT

拜占庭容错机制

项目研究:智能经济分布式网络

项目进度:主网上线,开发完成。

社区建设:开源自制社区建设完成。

近期动态:NEO账户问题。

小蚁区块链应用走在了国内众多项目的前面,智能经济分布式网络,可以服务的主要包括数字化的交易所,数字化协议,社交媒体,P2P金融等。达鸿飞带领的技术团队较为成熟,因此小蚁在项目实现上,已经完成主网上线并开始场景应用。

小蚁的成功不是偶然,是蛰伏多年后在区块链风口来临时的爆发。但小蚁也有为人诟病的地方,PBFT共识机制的伪去中心化就曾为人所疑惑,毕竟,大部分使用该共识的都是联盟链。

15.3 量子

Token:QTUM

数量:1亿

QTUM初始发行1个亿,从白皮书披露来看,从51%公开售卖、20%留给团队,20%商业落地,9%用于研究和社区贡献。可以看出最终80%会分发给社区,20%留给团队和早期投资者,从非小号公布的流通量来看,这样的情况,可能基本已经实现了。

共识机制:POS

股权证明机制。

项目研究:支持分布式移动应用。

项目进度:主网已上线,技术完成,项目成熟。

社区建设:量子社区较为成熟。

近期动态:***

量子是继小蚁之后国内较早的区块链项目,2017年主网上线后,一度被认为是小蚁最大的竞争对手,其明星团队和投资人也为其加分不少:团队由帅初领导,很大一部分为国外成员,投资人包括Okcoin徐明星,分布式基金沈波等。

量子的负面新闻一直存在,包括曾经质疑量子代码完全抄袭了比特币和以太坊。时至今日,知乎上还有详细图文分析并质疑量子技术和项目的帖子。

声称完美结合了以太坊和比特币优势,并解决了现有区块链系统的固有缺陷的量子,致力于打造一条底层公有链,支持分布式应用。

15.4 EOS

Token:EOS

数量:10亿

EOS的Token数量较大部分项目不同,总发行量10亿。代币分配将完全在以太坊区块链上运行,耗时341天,其中2亿个代币,即EOS代币总量的20%,将在前五天内分配,另外还有7亿个EOS代币将在接下来每23小时以200万增量的形式分配。最后,剩下的1亿,即EOS代币总量的10%,将留给EOS开发者,这1亿代币在整个分配期间都不能在以太坊网络上进行交易或转移。

共识机制:DPOS

改进型股权证明机制。

项目研究:解决区块链可扩展性的问题。

项目进度:主网暂定将在6月上线。

社区建设:EOS社区建设较为成功,全球社区庞大。

近期动态:EOS节点之争。

EOS的亮点很具体,百万级tps一度成为业内话题,BM自带粉丝效应,使得EOS无论是营销还是技术,都力压同类项目一头。但最后大家发现,百万级TPS只是理想状态下,实验室的数据,在接入应用,真实的使用场景中,根本不可能实现。但不可否认的是BM的技术实力可能是继V神之后,最具有代表性的人物。

可扩展性是EOS的另一个亮点,BM以使用主节点的方式增加EOS的可扩展性,DPOS共识机制本身具有可扩展性,但是EOS则是利用主节点,提高计算机算力来增加可扩展性。这样似乎又将普通用户拒之门外了。

15.5 Ontology(本体)

Token:ONT

数量:10亿

ONT总量设计为10亿。其中投资机构和合作伙伴占28%,这一部分有锁仓,尚未完全发放到市场流通;本体网络的生态拓展占25%,核心团队持有15%,这一部分应该也有一定的锁仓期,具体时间暂未找到相关公开资料;社区和用户回馈占12%,其中已有约1300万代币在官网订阅活动中赠送,Neo理事会持币10%,其中已经有2000万按照1Neo:0.2Ont空投发放给Neo的持币人;本体技术社区份额占10%。初步估计ONT的市场流通量在5500万左右。

共识机制:DBFT

拜占庭容错机制

项目研究:分布式信任链网络体系的基础性平台。

项目进度:3月底开源代码,公测未开始,主网还未上线。

社区建设:本体社区建设发展较快,得益于成功的NEO。但社区更多关注投资,空投,对项目本身关注并不高。

近期动态:Github代码开源。

本体网络从项目发起就吸引了业内所有人的眼球,NEO的技术团队,NEO的资金团队,NEO的价格。似乎关注本体本身技术和未来前景的,似乎并不多。

ONT定位为一个底层公有链,致力于实现一个矩阵式立体网络架构。白皮书的愿景是,今后无论什么链,什么共识的链,中心化,去中心化,都可以在ONT网络中通过协议进行协作,从而解决目前链条之间没有互联的问题。

虽然本体众人追捧,但本体网络体系比较庞大,底层公链、ONT网络协议层、业务链,项目研发难度大,周期较长。ONT资金财团控制较大,大部分Token现在处于团队和机构手中,发展道路还非常长。

15.6 NULS

Token:NULS

数量:1亿

NULS没有募资,token数量1亿,初始流通4000万,空投给了一些优质项目,绝大部分可能是空投给了合作者印链,占比达到了40%。社区基金20%,用于社区生态建设,每年使用低于400万,至少5年使用完,这可以看出项目发展的一些进度。剩下的团队持有20%,还有20%用于商业合作。团队持有的分布解锁,每次解锁5%。商业合作的与基金会一样,每年使用低于400万。

共识机制:POC

信用共识机制

项目研究:模块化,多链并行的可定制区块链。

项目进度:3月底公测(未出,延迟一个月),五月左右可能主网上线。

社区建设:开源社区,自治性处于较早阶段,但社区团结性较高。

近期动态:测试网上线、官网升级设计。

NULS与本体算是公有链里面的后来者,NULS的技术亮点在于共识机制和模块化设计。POC共识是之前的无论公链私链都没有人用过的,在POS的奖励机制里面,引入信用值,参与共识,具体表现如何,现在还未可知。

模块化设计是业内较为看好的一个技术,也是未来的趋势,模块化引入跨链的技术,弱化主链的思想,有一定创新性。但其竞争对手也不少,本体的分布式信任链网络体系,就是一种跨链技术,不过NULS的开源社区有利于模块化技术成型。现在来看,NULS主网即将测试上线,与EOS,本体等明星项目,进度应该是在同一起跑线。只不过NULS的知名度,显然与借助NEO宣传的本体和已经业内闻名的EOS还有一定差距,不过也是值得期待的项目。

15.7 Aeterniy

Token:AE

数量:2.7亿+

AE发行总量2.736亿,流通量超过2.3亿。这样计算,85%的流通量,比例远远超过了其他未上线主网的公链项目。从一些平台数据看,1.42%的换手率,并不高,看起来持有人对项目信心应该还是不错的。

共识机制:POW+POS

工作量证明+股权证明机制

项目研究:可拓展的智能合约(闪电智能合约)。

项目进度:传言六月上线主网,但似乎主网上线推迟。

社区建设:AE号称欧洲的以太坊,因此国外社区建设比较好,Twiter,Telegram人数都不少,社区人较为团队,对AE的宣传也算不遗余力了。

近期动态:

Aeternity是不少人向我推荐过的,号称欧洲以太坊,在这种行情下,非小号的价格在11块左右。从官网看,AE的团队是比较强大的,德裔计算机科学家“以太坊教父”Yanislav Malahov与前Augur核心开发者Zack Hess、前Synereo核心开发者Jack Pettersson于2016年发起。官网介绍的人数也较为可观。不过,AE的负面消息也不少,包括起底团队,第二次众筹的十万个以太坊被盗,从而引发团队内部的分歧和猜疑,最终导致原CTO的离职的事件。自我感觉,那些号称什么“以太坊”的,都要注意了,毕竟,为什么不创新,而要追随。

15.8 超级账本

超级账本

Token:无

数量:0

超级账本是个另类,因为在众多公有链项目中,他是为数不多的联盟链,不发代币,不募集资金。

共识机制:DBFT

拜占庭容错机制

项目研究:分布式账本。

项目进度:超级账本趋于成熟,在区块链应用,分布式账本应用方面,已经取得了一定的成效。

社区建设:**

近期动态:**

超级账本是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,加入成员包括:荷兰银行(ABN AMRO)、埃森哲(Accenture)等十几个不同利益体,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。超级账本与大部分公链不同,联盟链,无代币。这样的纯区块链项目,是大家都应该支持的。

15.9 亦来云

Token:ELA

数量:3300万

亦来云的发行量参考了比特币,发行数量与大部分公链相比,较少。从白皮书披露的情况看,1650万用于生态建设,回馈社区,天使投资500万,为认筹完的,将回归亦来云基金会,800用于各种公募私募,前期运营。剩余350万,将用于亦来云基金会。算上消耗,每年按照4%通胀,不过这部分通胀,亦来云基金会与旷工三七分。

共识机制:POW

工作量证明机制

项目研究:号称区块链世界的操作系统,区块链世界的万维网。

项目进度:亦来云发布之初,便是主网运行。

社区建设:亦来云社区建设较为成功,社区社群活跃、忠诚度都较高。

近期动态:币安投票上币风波。

亦来云的共识机制与比特币一样,采用了pow机制,从大家对这种机制的反应,不少人认为工作量证明浪费资源,交易缓慢,奖励机制不完善,中心化较严重。但亦来云的技术团队,在国内众多公有链项目中,也显得鹤立鸡群,陈蓉先生成名已久,起带领的团队,不但技术较强,而且具备相当资源。与其他项目比较,如果说有什么不好之处,在于定位为区块链世界的操作系统,这句口号,恐怕不止一家在喊。

15.10 IOTA

Token:IOTA(MIOTA)

数量:27亿+

IOTA Token数量超过27.795亿,流通率百分之百,全部上市流通,非小号价格接近以美元,最高价6美元,2014年发行以来,涨幅超过五万倍。开发者在基金会中持有Iota,该账户只占可用代币总量的5%,IOTA持有地址分布也较为均匀。

共识机制:DAG技术(不是共识机制)

项目研究:利用DAG技术服务物联网。

社区建设:**

近期动态:**

IOTA是一种开源的分布式账本软件项目,主要是为物联网打造的,iota的互通性技术能够实现数据真实性,并用于工业用具。另外还能实现传感技术、智能城市和自适应系统等提供的按需支付、微支付和机器对机器沟通,真正成为物联网的支柱。DAG技术,是IOTA最大的亮点,结合物联网,让无数人追捧。不过DAG技术最大的败笔在于其钱包使用,用户体验如果零是底线那一定是零,如果有负分我毫不犹豫会给负分。这主要还是在于其网络过于复杂。不过DAG技术不同于传统区块链技术的打包转账,零手续费的交易模式,使其扩展性相对其他项目有极大优势。

16、跨链和预言机的方法、方案和典型实例

16.1 跨链

1. 大家是怎么聊跨链的

跨链不是个新鲜话题,早在2016年9月, Vitalik Buterin所著的《Chain Interoperability》就对跨链的技术方案和应用价值进行了详细阐述。其中提到,较为实用的三种跨链技术为「公证人机制」、「侧链/中继」、「哈希锁定」;几种可能的跨链应用场景包括资产交换、原子交易、预言机、信息互通等。

此后国内外讨论跨链的各类话题,大多绕不开这三种跨链技术,正如同早期大家讨论区块链时,都在讨论共识机制一样。但其实,共识机制的先进性只是区块链平台设计的维度之一,譬如安全性、易用性、可扩展性等其他维度,也是区块链平台设计的考虑重点。再者,区块链的性能也不单纯依赖共识机制,全流程处理机制、异步化、并行性以及其他编码、压缩、传输机制等,均对区块链性能有所影响。

好比共识机制之于区块链,前面所提三种技术对于跨链而言,只是保证跨链访问安全可信的一种机制。机制固然重要,但站在应用落地的角度看,如何设计合理的跨链架构、如何设计简便的适配协议、如何提供易用的跨链接口、如何保证可信的跨链治理等等问题,都是跨链设计所应考虑的。

img

因此,本文不再赘述跨链三种技术的解析,而尝试从跨链的技术必要性分析切入,挖掘出跨链的基本诉求,进而思考跨链的设计理念,以及跨链整体解决方案的设计。

2. 跨链是必不可少的催化剂

本文从联盟链角度分析。

当下,联盟链底层平台的数量已经双手都数不过来,这些平台或多或少存在独有的特性,且各自落地了多领域应用。这些基于同构平台(通常为同一个底层平台),或基于异构平台(通常为不同厂商的底层平台)构建的应用之间,要实现互联互通,就会面临一些技术上的挑战。然而,区块链作为构建和传递信任的机器,是基础设施层面的技术,而基础设施就如同网络协议、存储协议一样,最终都将走向趋同的标准化方向。因而,联盟链当前状态是发展中的一个过渡状态,不是最终稳定态。随着技术进一步发展,联盟链底层平台在基本功能、协议、接口、数据、安全机制等多方面会日渐趋同,朝标准化方向演进,但在增强功能、内部架构、性能以及技术选型等方面,仍然会呈现异彩纷呈的形态。这也符合“合久必分、分久必合”的规律,只有走向基本同构,才能进一步释放联盟链的活力,进一步推动联盟链应用的发展。

img

在“所有的链会基本同构”那一天到来之前,当下最明智的策略莫过于要求同存异,寻找最优设计,推动标准化进程,尽早实现基本同构目标。讲到这里,可能你会问,既然联盟链本身发展将走向基本同构,为何还需要研究跨链呢?这其中,跨链是联盟链走向基本同构的动力源泉和技术支撑,是这个过程必不可少的催化剂。

首先,联盟链之所以会走向基本同构,本质上不是技术驱动,而是业务驱动。随着应用落地数量增多,一家机构可能要面对多个底层平台,机构与机构之间要面对更多底层平台。

作为业务方,这些机构肯定希望低成本、便捷地接入不同底层平台,联通应用孤岛,此时,这些机构将面临以下几种情形:

  • 同一种底层平台,同一种应用,不同链如何互通
  • 同一种底层平台,不同的应用,不同链如何互通
  • 不同的底层平台,同一种应用,不同链如何互通
  • 不同的底层平台,不同的应用,不同链如何互通

上述问题均需要通过跨链来解决,而底层异构给跨链带来的性能和安全等技术挑战,将会迫使联盟链技术进行迭代升级,走向标准化。其次,联盟链走向基本同构的过程中,需要跨链作为技术支撑。为满足一段时间内基本异构情况下的联盟链应用互通,跨链方案将会先于底层平台进行接口、协议、数据结构、基本功能的抽象整合,而这些工作将反哺各底层平台,支撑联盟链走向基本同构。举个例子,为了做跨链交易的合法性证明,需要有类似SPV的机制,包括Merkle、MPT、AVL等,可能就会促使底层平台去支持这个功能。再比如,跨链为了统一访问区块链资源的方式,对访问协议设计相关规范,可能也会激发底层平台去调整协议,从而更好地与其他链互通。

3. 跨链的核心是降低扩展成本

跨链作为联盟链发展过程中必不可少的催化剂,要解决“不同链如何互通”的问题,本质上是要解决“联盟链扩展”的问题。关于区块链扩展的方案,主要有以下三种不同方向:

img

跨链是Scale Out的重要技术支撑,Scale Out依赖跨链才有办法进行。

Scale Out提供可平行扩展、无限扩容的可能,是必不可少的扩展方案,事实证明,已经有越来越多的平台支持多链、多通道、多群组等方式进行Scale Out扩展。但是,要进行这种平行扩展,尤其是涉及多种平台多种链交错交互的时候,这里就给业务方带来巨大的扩展成本,包括部署建设、管理管控、安全保障、信任传递等。

img

跨链的核心就是要降低扩展成本,要从东西和南北两个方向提供低成本、快速便捷的解决方案。南北方向因部署方式、接口协议、业务模式等不同,需要给出简化的接入和管理方案,东西方向因底层架构、安全机制、数据结构等不同,需要封装安全可信的互通方案。

4. 跨链方案设计需融入三个理念

围绕降低扩展成本的核心诉求,跨链技术要在东西和南北两个方向提供简化的、封装的解决方案,在跨链方案的设计和落地中,需融入以下三个理念:

  • 通用化设计,提炼共识的基本同构点
  • 先让代码跑起来,快速适配主流平台
  • 建立开源开放的社区文化,让协议尽早传播开来

在通用化设计方面,跨链方案要承担起“催化剂”的作用,提炼广泛共识的基本同构需求点,在架构、协议、资源等方面进行抽象提炼。

例如,在IEEE C/BDL目前公布的几个跨链相关提案中,P3203有关资源命名和寻址方式,P3204有关跨链交易证明的模型、交互协议,P3205涉及跨链访问协议以及数据认证等,这些都是在广泛共识的需求点上进行提炼设计。“粗略的共识,可运行的代码”——这句话是TCP/IP协议工作组的座右铭,也非常适合跨链设计。先让代码跑起来,能够快速适配各种主流平台,满足跨链业务协作的需求,在发展中实践,在实践中发展,这一点很关键。更重要的是,跨链本身涉及多条链,已经不是某一个平台,或者某一个机构的事儿,其方案的建设离不开众多平台建设方、使用方、爱好者的参与。因而,建立一个开源开放的跨链协作社区就非常重要,所谓“万人操弓,用射一招,招无不中”,通过社区的群智群策,可以让协议尽早传播开来。

5. WeCross实践

WeCross是微众银行区块链团队打造的跨链协作平台,是以上理念的实现方案。WeCross在设计上秉持了“通用化设计”的理念,提炼了通用区块链接口、异构链互联协议、可信事务机制和多边跨域治理四个核心技术,相关细节我们在白皮书中做了详细阐述,敬请查看→WeCross 白皮书

同时,WeCross秉持先让“代码跑起来”的理念,实现了总体跨链架构,提供了快速适配底层链的Stub扩展方案,目前已支持FISCO BCOS、Hyperledger Fabric等平台,欢迎体验:https://github.com/WeBankFinTech/WeCross

不仅如此,WeCross还是一个完全开源的开放社区,拥有完备的社区规范、CIP(CrossChain Improvement Proposal)规范、多元活动等,欢迎加入社区一起玩转跨链:https://github.com/WeBankFinTech/WeCross/wiki

正如WeCross白皮书中所言——风起于青萍之末,一场围绕区块链技术的变革正在徐徐拉开帷幕。与一个具备无限潜力的趋势共同成长,现在,正是最好的时节。

16.2 预言机

当今,我们正处于信息时代。我们构建应用时,信息互通已经成为一个基本要素。区块链应用亦即如此。在最初的数字代币阶段,区块链的链内数据循环尚可支撑。当进入去中心化金融蓬勃发展的现行阶段,链内数据循环已然不够。就如,在结算一个资产时,相应的资产价格就依赖链外的信息。凡此种种,都提出了区块链沟通链外数据的迫切需求,这也正是预言机(Oracle)的出场机会。 预言机联通链内外,是外部数据在区块链世界的代理。

我们看到软件应用之间,信息交互已经无处不在,支付宝里就可以缴纳各种系统的公用事业费。这些都是非常成熟的。为什么在区块链领域里,这要作为一个单独的议题提出来?即便你是一个刚刚接触区块链的软件从业人员,你可能也会有一个疑问:区块链应用也是程序。程序与程序之间的信息交互司空见惯,这里为什么要提出一个预言机的概念?好,我们就先要来看看这个问题。

预言机的重要性,为什么要有预言机

预言机,它解决了区块链内外世界的阻抗不匹配的问题。这个阻抗,是超强的阻抗,它使得沟通链内外挑战重重。这个阻抗的根源在于,链上链下是基于不同的信用机制。区块链不依赖中心的权威机构对信息进行背书,它在共识的基础上可以实现两个完全无信用关系的实体间的可信交互。区块链上信息是连续的,确定的事件集合。这些事件不论你在何时何地进行验证,得到的结果都是确定不变的。如果区块链连接外部世界,就可能被拉回到了中心化的原点。一个环节的中心化导致的可能是整个去中心体系的窘境。如果我们的智能合约调用外部的API,就拿区块链反复执行都能得到确定的结果这一特征来说,挑战都是极大的。API服务可能在某个时候崩掉;API服务可能不具有幂等性(也就是如果我们反复调用可能得到的不相同的结果),等等。这正如不同价值观的人之间的沟通一样,阻力重重。预言机正是试图来解决这些问题。这足见预言机的重要性。

从上面的描述我们可以看到,预言机是信用的桥梁。构建信用是极具挑战的。我们谈到人与人之间的信任时,常常会去评估别人在我们心目中的印象,也就看他具有那些可信的品行。同样我们也来看看预言机可以从那些方面去评估可信度。

考察预言机信用的角度

预言机要适配区块链的信用模型,需要看下面几个方面。

1. 是否去中心化

中心化的预言机最明显的缺点就是单点失败,依赖它的智能合约相当脆弱。去中心化可以解决这个问题。去中心化的预言机可以根据一致性规则协调来自不同源的数据,达成一致的结果。去中心化可以使我们的信用不用加注于单一的源。在去中心化的情况下,信用来源于聚合的多个数据源。

2. 能否提供可靠的数据

提供可靠的数据,需要预言机在下面几个性质上下功夫。

  • 正确性

要求数据是完整的,真实的。需要防止攻击者假冒成合法的数据源来触发区块链事务。虽然预言机合约受制于区块链的通信能力,也需要尽力验证数据源的合法性。预言机必须验证数据并保证数据没有被篡改。

  • 有效性

在保证预言机系统的有效性的前提下保证其维护的数据可被访问。预言机的线下组件要保持足够的冗余,使其不至于出现数据断供。不论是预言机自身,还是其他数据源控制的数据,在提供数据时都要保持随时随地的有效性。

  • 责任性

就如我们每个个体要对自己的行为负责一样,预言机需要对其提供的数据承担责任。无责任无信用。

聊完考察预言机的角度,我们来搜罗一下实现预言机可以用到的一些方法。

实现预言机一些方法

  • 密码学

密码学在我前面介绍区块链基础的文章中有过介绍。它可以提高数据的可靠性。

  • 基于TLS的数据传输

预言机作为数据的桥梁,数据传输是免不了的。TLS协议(传输层安全协议)能很好保证安全的数据传输。

  • 基于飞地(enclave)的数据处理

可信用执行环境(TEE-Trusted Exectuion Environments),使被其加载运行的代码和数据得到隐私和完整性的保护。 TEE如,Intel的Software Guard Extensions (SGX)。预言机可以在TEE中执行。

  • 共识规则

可以基于投票达成共识。当然要有合理的激励机制来促成参与。那么可以以抵押为基础来建立奖惩机制。

上面介绍完方法,接下来,我们来看看预言机的分类。

预言机分类

通过总结一些文章,我们可以看到预言机可以从下面几个维度来分来。

  1. 数据源

预言机的数据源可以是软件系统也可以是硬件。这样就分成了软件预言机跟硬件预言机。这两者应该都好理解。很多的软件服务提供数据,预言机可以从中获得数据。当然,硬件如传感器,以及各种物联网设备都可以为预言机的提供数据。

  1. 信用模型

这里所说的是区中心跟中心化。我们提到过中心化的预言机有其明显弱点,但其也是预言机的一种类型。中心化的预言机在其效率上可以提供某种存在的需求。

  1. 设计模式

这些模式可以是,请求-回复设计模式,发布-订阅设计模式,以及立即读取设计模式。当数据大到不适合存储于链上时,请求-回复可以被考虑,这样每次可以交互一部分数据。发布-订阅是一种广播模式。对一个主题有兴趣的消费者都可以订阅它。在这种模式下,数据可以是被拉取的,也可以是被推送的。立即读取提供用于立即决策的数据,数据被存储于智能合约的存储里。

  1. 互动方式

根据区块链内外的互动方式,预言机可以分为输入预言机跟输出预言机。顾名思义,输入就是区块链需要读取外部的数据。输出就是区块链往外传出数据。

好了,关于预言机的一些基础知识介绍完毕。具体的预言机如chainlink的介绍,已经有很多文章可以看到,这里就不再总结了。

Chainlink正在开发世界上首个去中心化预言机网络。该网络是一个综合平台,为开发者提供全面的工具和数据,帮助其在任意平台上开发出各种类别的智能合约预言机。Chainlink既是预言机,又是灵活的框架,为智能合约开发者提供安全可靠的预言机解决方案。

Chainlink预言机(节点)能够格式化信息并验证数据,让智能合约安全可靠地连接到各种链下资源,包括数据提供商、web API、企业系统、云平台、物联网设备以及支付系统等

Chainlink拥有独一无二的能力,可以将预言机和数据源都去中心化。

去中心化的预言机网络能让开发者在智能合约中选择任意数量的预言机。使用多个预言机不仅能防止单个预言机宕机对整个系统造成的影响,而且还能防止单个预言机遭到黑客攻击、被收买或者出现问题的现象。Chainlink最近在门限签名领域实现了突破,门限签名技术让智能合约可以同时使用多个预言机,但只需支付链上费用。这项技术史无前例地大幅降低了去中心化预言机的使用成本。

将数据源去中心化让预言机能够从多个来源采集数据,并将数据整合至单一数据点,并且触发智能合约。由于数据存在多个来源,智能合约就能够避免单一数据源出现误差。Chainlink支持多种数据聚合模式,比如取平均值和/或去除异常值。

Chainlink另一个特色就是其信誉系统。与阿里巴巴和滴滴平台中卖家和司机的信誉系统类似,Chainlink也为预言机开发了一套信誉系统。声誉由各种衡量指标构成,其中包括运行时间、响应时间以及成功完成的任务。智能合约的数据请求方可以根据预言机评分来选择,或者也可随机选择。这个信誉系统不仅为开发者提供了可靠的参考指标,还约束了各个节点为其提供的服务负责。

另外,Chainlink还针对智能合约的具体需求提供不同程度的安全保障。除了标准化预言机之外,Chainlink另外一个主推的解决方案就是在可信执行环境(TEE)中使用可信硬件(比如英特尔的SGX)运行预言机。预言机在可信执行环境中运行的主要优势是节点无法看到数据请求的具体内容,比如传输至智能合约或从智能合约输出的数据以及数据请求方的具体信息。可信执行环境是一个颇具吸引力的技术,因为它可以安全地处理密码和私钥等私密信息,并保障信息绝对不会泄露给节点或其他人,同时还能证明数据未经篡改。可信执行环境还可以实现智能合约链下计算,因此可以降低gas费用并提高可扩展性。

最后,Chainlink还建立了保证金惩罚制度,激励节点诚实守信。在中心化的预言机模式中,用户可以约束私营企业的行为。而为了要约束节点的行为,那就需要建立一定的保险机制。节点必须预存一定数额的LINK代币作为保证金,才能有机会接收处理某一个数据请求。如果该节点的数据被发现是异常数据,那么其保证金将被没收并退还给数据请求方作为补偿。Chainlink采用博弈论的原理激励节点提供准确的数据,否则节点就将受到罚款。

智能合约如果要获得大规模应用,必须保障安全性和可靠性,而且必须能够与外部世界联通。因此Chainlink正致力于开发去中心化的开源协议,让智能合约开发者在连接链下数据和系统的同时能够选择并控制去中心化和保密的程度。

17、联盟链Hyperledger fabric架构、特点及其应用

https://zhuanlan.zhihu.com/p/165898033

  • 上面一层是应用层,是应用程序与Fabric进行交互的媒介,包括身份管理,账本处理,交易处理和智能合约
  • 下面一层是核心的区块链实现,包括成员管理,共识服务,分布式账本,排序服务,P2P网络,链码服务,安全和加密服务等等

img


18、区块链存证、函证原理;过程上链、交叉验证的原理

18.1 区块链存证

什么是区块链存证?

区块链存证,就是把证据存到区块链上。证据可以是文字,可以是图片,可以是视频,可以是任何文件。

当证据上链后,就不能被篡改了。

区块链存证用于哪些领域?

因为存证是上链的,不可篡改,因而常常用于司法、版权等方面。

如何简单地进行区块链存证?

可以使用比特币钱包或以太坊钱包,通过给特定地址转账的方式,把需要存证的内容通过备注信息的方式上链。

存证的缺点是什么?

如果所有的文件都发送到区块链上,会导致区块链臃肿。实际上并不是所有信息都需要上联存证。

如何能做到即存证,又不至于让区块链太臃肿?

可以采用文件与哈希值分离的方式。专门用一台服务器做文件系统,把存放的证据保存进去。而区块链中,只保存该文件的哈希值。这样,只要通过计算该文件的哈希值是否在链上,就能确定该文件是否被存证过。

最后,这里给出一个简单的存证演示:

存证后,会得到一个区块链的查询码,通过这个查询码,就可以在区块链浏览器中查到相关的存证记录。上面有文件的名称,哈希值和文件地址。

18.2 过程上链

一、区块链剖析

区块链是比特币等数字虚拟货币的底层技术,通过去中心化的数据记录,由全网所有的节点共同维护数据,实现安全地存储数据,具有不可伪造性、不可篡改性、可追溯性、匿名性等特点。

区块链的去中心化技术方案是以区块为基本单位来管理和存储数据。区块由两个部分的数据结构组成,分别为区块头部和梅克尔树结构。区块的头部包括矿工可以修改的临时随机数、前序区块的哈希值、时间戳、挖矿难度、交易树的树根等数据。区块的另一部分是梅克尔树,用来存储有效交易。当包含交易数据信息的区块有序链接时,就形成了区块链。

img

二、区块链“上链”究竟上的什么

区块链的本质其实是一个分布式数据库。当然,它的特点在于除了物理上的分布式外,逻辑上也是“分布式”的。既然是数据库,那么它里面记录的肯定是“数据”。那么都可以存些什么数据在里面呢?

最早的区块链——BTC区块中主要就是记录的BTC交易数据。是的,在它的每个区块中真的是记录得一条条的转账交易记录,也就是说BTC这个货币仅仅是作为一种数据记录在区块链中。

虽然它本身并不是构成区块链的前提条件,但它在区块链体系中又是不可或缺的一环,因为要靠它来促进新区块的产生(也就是挖矿)。因为数据是记录在区块中的,如果没有新的区块产生,那么就无法记录新数据,整个区块链就几乎失去了生命。(为什么说几乎,因为已经上链的数据还是有价值的,相当于一份可靠的存档),所以现在的每种区块链,基本上都有自己的货币,以至于很多小白用户直接把区块链和币划等号。区块链,货币,傻傻分不清楚_

img

在2009年1月3日中本聪创造的第一个区块,即创世区块中,就记录了一句话

TheTimes 03/Jan/2009 Chancellor on brink of secondbailout for banks

(2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘)

中本聪将这一事件在第一个区块链中永久的保留了下来。这也算是后来一些BTC刻字服务的鼻祖了。区块链最主要的作用是能够保证上面的数据不被篡改。现在通常我们检验数据是否有改动,会通过对原始数据做md5之类的hash摘要,然后通过对比前后摘要值,来判断原始数据是否被修改过。而hash值又是很小的一个字符串(md5是32字节,sha1是40字节),这就完全可以写到区块中啦。

说的这里,相信就不用再多说了吧,遗嘱公证、财产公证、版权问题等等,大家应该可以自行继续广开脑洞了。

至于不被毁灭嘛,这个只能做到上链数据本身不被毁灭,链外数据由于不在分部署数据库中,所以也没办法。

img

区块链能够解决链上数据的真实性问题,不是说防篡改,而是篡改成本极高,导致不去篡改。但是不能解决数据上链之前的准确性问题,这并不仅仅是区块链技术所面临的问题,这是所有的技术都面临的一个问题,所以不能单靠区块链去解决。

另外一个就是数据上链过程中,如何保证在各个环节不被遗漏?如果有人为因素在里面,就很容易或出错或遗漏或篡改。这就需要结合其他的技术手段来帮助我们将数据准确的传递到区块中。

三、数据上链意义

数据上链是指用户将自己的数据加密上传到基于ipfs的公网侧链,并在公信链形成数据索引的过程。数据一旦上链,除了你本人的Data_key授权解密外,任何个人或组织都没有能力获取到你的数据,从而保证数据的绝对安全。

3.1上链对个人

1、数据即资产,用户的数据中蕴藏着巨大的价值,数据被使用过程中产生的经济利益,将直接回馈给用户本人;

2、数据上链后,任何数据使用的请求,都必须通过你本人的授权才能实现,确保个人拥有数据所有权,不必担心数据被盗用而不知情的状况了;

3、基于多维度的数据,你可以构建可信的数字身份,在与人协作时、寻找资源时,大大降低别人信任、了解你的成本,提升了“连接”的效率。

img

3.2上链对公众

提高数据传输速度——传统的云存储系统允许你将数据上传到云服务器。之后,服务提供者负责在其数据中心保存这些信息。除非特别要求,否则数据中心与你或你的客户通常不会在同一个地方。根据地理区域的不同,数据访问可能会出现延迟,因为在到达你的服务器之前,信息要在不同的服务器之间传输。

降低社会信任成本——利用区块链技术,经过用户的授权,公信宝帮助用户采集自己的数据并加密保存至区块链上,同时将数据私钥Data-Key交给用户本人管理,由用户完全掌握所有权和支配权,用户将数据上传到区块链上,通过私钥掌控自己的数据,分享自己数据使用产生价值,并生成自己的可信数字身份(G-ID),在与人协作中大大降低信任成本。

提升数据安全和隐私保护——利用区块链分布式记账技术将数据分割成许多块,存放在网络中的不同节点上时,作为整体它们是难以被破坏的,这意味着对数据安全和隐私保护的提升。去中心化网络中的文件被分解并分布到各个节点上,这个过程叫做分片。这些文件还使用私钥加密,以确保其他参与节点无法查看你的文件。分片也使得任何人都不可能访问整个内容,因为文件是分开的。这会让你的数据变得极为安全和稳定。

四、区块链上链四个层次

科技上链——用区块链技术,就分布式计算、哈希加密、通识分发等的一些特性来改进自身的信息系统和智能平台。降本增效指数级提升,效能最大化让企业科技型始终跟随科技的一个前端。

经济上链——利用区块链基础上的智能合约和通证,来改善客户员工、股东之间的一个利益分配关系,使各方更好的组成合理,合理的激励体系,最大化的发挥员工和社会化的一个合作人士的积极性,实现共建共赢。

商业上链——利用区块链技术背后的哲学和社会学原理来感性和升级企业家经营企业和产业链的一个指导思想,重构商业模式,结合了人工智能云计算、大数据、5G等科技,全面解决生产力和生产关系,打造无人公司虚拟股权社会化经营的新商业模式。

金融上链——海外的企业可以通过企业资产和权益的数字化,进而进行数字资产的金融市场化,让更多的资金能够参与投资、融资、分红等。

img

五、上链方式

链接存证——相当于哈希存证基础上有添加了文件的URI地址,这样区块链上上就存储了“文件地址+文件数字指纹”这两套东西了。这两套可以互相印证。例如某个银行的安全插件,需要我们必须到其官网上进行下载安全插件,便可以采用这有的手段。

隐私存证——所谓隐私存证就是把数据进行加密之后存储在区块链之上,这是为了应对区块链上的数据都是公开透明而采取的策略。一般对数据加密都采用的是对称加密,所谓对称加密是指加密和解密的秘钥是一个,这样的加密方案比较简单、快速,可以适合大量数据的加密。

img

分享隐私存证——相当于隐私存证的更进一步,把文件进行加密之后,同时还要把加密的秘钥再使用非对称加密再加密一次。也就是说,第一次对文件内容的加密是采用对称加密,第二次对秘钥加密就是非对称加密。所谓非对称加密就是有两把钥匙:公钥和私钥。

哈希存证——所谓哈希存证就是把文件内容的哈希值进行保存上链。文件内容的哈希值我们也通常称为文件的“数字指纹”,可以通过对文件内容进行哈希运算得到。因为哈希值的长度都比较有限,例如一部几万字的内容的SHA256的哈希值也只是256位的字符,这样的长度的内容存储上链对区块链来讲毫无压力。

内容存证——所谓内容存证,就是指直接把我们要存储的内容直接放入到区块链之中,不过,大家都知道,区块链上的存储空间是极其宝贵和有限,所以这些内容一般不会太大。举个最简单的例子,我们目前发现,在区块链上执行的应用程序,也就是我们常说的“智能合约”一般功能都不会很强大,而且采用的编程语言一般编译后的代码量都很小,就是这个原因。功能不强就代表代码量比较少,编译后比较小说明占用的空间比较少,这一些都是为了节省区块链上的链上空间。

六、区块链处理的流程

区块链处理的流程大致分为三个阶段,分别是:

1、上链前准备阶段

2、链上处理阶段

3、智能合约执行阶段

6.1上链前准备阶段

上链前三步走:

第一步,根据企业所在的上下游产业,设计一条链的起点和终点。理论上讲,所有产业链的起点都是大自然,终点都是消费者。但在设计一条具体的链时,不一定要覆盖到大自然,终点也未必一定要延伸到消费者。要根据每一条不同的链的特点灵活设定链的长短、起点与终点。

第二步,起点终点确定后,在每一个环节或者行业选择哪些企业上链?选择的标准又是什么?一条产业链的设计,不一定是每个环节都要选最好的企业上链,链就是最好的。这和球队选球员的逻辑类似,一个球队如果前锋、中锋、后卫都是最好的,这个球队就是最好的吗?未必

第三步,Token的设计,包括Token的价值支撑、应用场景。股票的价值来自单个公司全部利润的分红,Token的价值则来自链上的各个环节、各个企业的贡献。比如,有的公司按照销售额,有的按利润,有的按贡献产品或服务,各种方式都可以。贡献即挖矿,都可以获得Token。

业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲线的签名工具来完成,不过更多的时候是通过将各种工具集成的SDK来完成,以太坊的web3是比较典型的上链前处理的开发工具。

数据层的一大功能是存储,存储系统的选择原则是性能和易用性。一个网络系统的整体性能,主要取决于网络或本地数据存储系统的I/O性能,比如比特币用的是谷歌的LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。

img

数据库的历史:在IT界,其实一个特别古老的研究领域。从最初的文件系统,到后来的ER实体关系模型。实体关系模型的提出催生了一系列伟大的数据库公司和软件,例如IBM的DB2,Sybase,Oracle,微软的SQLServer,MySQL等等。以及,由此引发了传统数据库的三大成就,关系模型、事务处理、查询优化。再到后来随着互联网的盛行,MangoDB为典型代表的NOSQL数据库崛起。数据库技术本身在不停的演进,且一直是热门的方向,也包括XML为代表的半结构化,基于文本、语音和图像的非结构化数据处理等。

伴随着现实的需求不断升级,数据库也在不断发展的,我们通过ER实体关系模型、通过NOSQL,能很好的解决数据存储和数据访问的Scalability问题。我们通过NOSQL数据库、云存储等技术解决了互联网海量数据的处理问题后,下一个问题接踵而至。那就是如何以一种规模化的方式解决数据真实性和有效性的问题。

6.2链上处理阶段

一笔交易从产生到完成的流程:

验证——在比特币区块链中,当一笔交易经由某个节点或钱包产生时,这笔交易需要被传送给其它节点来作验证。验证的做法是将交易资料经由数位签章加密并经由Hash函数得出一串代表此交易的唯一Hash值后,再将这个Hash值广播(Broadcast)给比特币区块链网络中的其它参与节点进行验证。

产生一笔新交易—— 一笔新交易产生时,会先被广播到区块链网络中的其它参与节点,各节点将数笔新交易放进区块,每个节点会将数笔未验证的交易Hash值收集到区块中,每个区块可以包含数百笔或上千笔交易。

决定由谁来验证这些交易?——各节点进行工作量证明的计算来决定谁可以验证交易,由最快算出结果的节点来验证交易,这就是取得共识的做法。

广播-——取得验证权的节点将区块广播给所有节点,最快完成POW的节点,会将自己的区块广播给其他节点,各节点验证并接上新区块,其他节点会确认这个区块所包含的交易是否有效,确认没被重复花费且具有效数位签章后,接受该区块,此时区块才正式接上区块链,无法再窜改资料。

交易验证完成——所有节点一旦接受该区块后,先前没算完POW工作的区块会失效,各节点会重新建立一个区块,继续下一回POW计算工作。

img

节点始终都将最长的区块链视为正确的链,并持续以此为基础验证和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别,它们将在先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成长的链条。该僵局的打破需要共识算法的进一步运行,当其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。以上就是防止区块链分叉的整个过程。

搞懂区块链运作原理,可先区分出交易(Transaction)与区块(Block)两个部分,这里我们分别从区块链中一笔交易产生到完成验证的流程,以及图解一个区块,来了解区块链的运作原理,并进一步拆解5大区块链关键技术,看它到底怎么做到大家口中的基于零信任基础、去中心化、可追踪又不可窜改。

6.3智能合约执行阶段

智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标。可以将区块链公联理解为操作系统,Solidity是编写该操作系统应用程序的编程语言,智能合约虚拟机则是编程语言编译之后的代码运行环境。

img

智能合约的执行条件是,当其他账户给这个合约账户转账(BU原生资产或者asset资产)的时候触发执行。上链处理完成后,业务数据已经记录在链上了,对于单纯存证的业务来说,将业务信息写入区块已经完成了这笔业务处理,只需记录存证业务的交易哈希并在取的时候通过交易哈希查询即可。但是大部分业务场景都需要进行一定的逻辑处理,因此通过智能合约处理是必须的。智能合约处理包括合约逻辑处理以及修改状态梅克尔树等流程。

6.3.1智能合约执行过程

1)用户A发起签名交易,目标账户为B,B为一个智能合约账户,里面存储着智能合约代码。假定此时交易被广播且被打包,节点需要将该交易存储在区块链上,需要对该交易进行回放和演算。

2)客户端调用交易记录,并把合约代码加载到交易里执行,在执行的过程中如果遇到内置的接口,就会产生回调函数,调用客户端代码,此时实现了双向交互功能。

3)合约在执行过程中,有可能产生新的交易,如合约账户B在合约内部通过接口对账户C进行转账操作,如果账户C仅是普通账户,那么只需进行普通转账操作即可;如果账户C是一个合约账户,那么将会再次触发新的合约形成一次递归调用。

合约调用合约的递归深度为3层,超过3层将会出错并回退整个交易,这是出于合约实现的复杂度和区块链底层的安全性来考虑与设计的。

img

6.3.2智能合约的安全

智能合约的执行需要考虑更多的安全性,要注意以下几个原则:

智能合约在执行过程中可能出现安全问题,比如CPU、内存、堆栈等资源过度消耗和节点执行结果不一致等。为了便于描述,定义如下变量:合约执行步数为Step,合约栈使用量为Stack,合约堆使用量为Heap,合约执行时间为Time,合约字节数为Byte,合约间调用深度为Deep。

(1)如果合约字节数超过Max(Byte),那么校验参数失败,无法交易。

(2)如果合约执行步数超过Max(Step),那么抛出异常。

(3)如果合约栈使用量超过Max(Stack),那么抛出异常。

(4)如果合约堆使用量超过Max(Heap),那么抛出异常。

(5)如果合约执行时间超过Max(Time),那么抛出异常。

(6)如果合约间调用深度超过Max(Deep),那么执行失败。

(7)如果合约抛出异常,那么整个交易失败。

(8)当虚拟机加载智能合约执行环境时,删除不确定因素函数,如随机函数、时间函数。

总而言之,区块链作为21世纪最前言的高科技领域,随着区块链技术的不断革新,越来越多的传统企业开始利用这一技术来解决各种各样的问题。而数据上链是利用区块链技术跨入区块链行业,再深度探索行业的发展。

19、加密货币和数字资产基本概念和实现技术原理

20、数字经济基本概念,区块链在数字经济、数字资产确权和权益管理上的应用基本原理

21、NFT、DeFi和Web3.0的基本原理和要求

https://www.zhihu.com/question/502538673

21.1 NFT

NFT(Non-fungible Token)即非同质化代币,是一种不可分割且独一无二的数字凭证,能够映射到特定资产,将该特定资产的相关权利内容、历史交易流转信息等记录在其智能合约的标示信息中,并在对应的区块链上给该特定资产生成一个无法篡改的独特编码,确保其唯一性和真实性。NFT实现了虚拟物品的资产化,从而使得数字资产拥有可交易的实体。

标记特定资产的所有权:NFT利用区块链技术标记了用户对于特定资产的所有权,成为该特定资产公认的可交易性实体,同时NFT的价格反应了市场对于其映射的资产价值和稀缺性的认可。

**真实性与唯一性:**NFT凭借区块链技术不可篡改、记录可追溯等特点记录产权,并确保真实性和唯一性。NFT 可以用来代表各种资产,如虚拟收藏品、游戏内资产、虚拟资产、数字艺术品、房地产等。

**锚定非同质化资产价值:**相比于同质化代币(如现实货币、虚拟货币),NFT与其本质上的差异是NFT锚定的是非同质化资产的价值。FT锚定的是同质化的资产如黄金、美元等。二者都具有可交易属性,相同的FT价值是可互换的,但是每一枚NFT所对应的价值是独一无二的。

同质化代币(FT)VS非同质化代币(NFT)

**同质化代币(FT):**所谓同质化,就是指资产之间遵循着相同的规则,并且可以交易置换和自由分割。如加密数字货币比特币,在同一个时间点,每一枚比特币对应的价格是相同的,一个比特币可以等价交换另一个比特币,同时比特币也可以分割成0.1、0.01或0.0001枚比特币。

**非同质化代币(NFT):**非同质化意味着完全独特且唯一,并且不能分割、彼此之间不能自由交换,比如生活中常见的房产、汽车、护照等。任意2栋别墅户型、价格、开发商、位置、物业、面积等是不一样的,主人也不一样,而且一栋别墅不能拆分成很多份卖给很多人。

NFT底层协议标准的概念:NFT底层协议标准为基于区块链的私有财产的自由转移/交易提供依托。NFT本质上是基于以太坊的智能合约,其架构对应3个以太坊协议标准。通过智能合约,以太坊定义了多种代币形式,除了ERC-20代表的FT同质化代币以外,还有ERC-721(NFT,非同质化通证)、ERC-998(CNFT,可组合非同质化通证)以及ERC-1155(容纳管理各种类型代币/通证的合集)。

21.2 DeFi

DeFi是去中心化金融(Decentralized Finance)的缩写,通常指基于以太坊的金融智能合约组成的去中心化应用程序(DApps)。简单来说,它是基于区块链构建的财务软件,相互之间可以像乐高积木一样组合。

多年来,计算机几乎颠覆了所有行业。通过不断的迭代创新,数字产品和服务变得越来越复杂。我们用计算机技术改造了世界,以满足我们的需求。从数字助理到智慧家庭,自动化程序现在影响人们日常生活的方方面面。那么金钱怎么会有所不同呢?

什么是分散式融资?

为了更好地了解DeFi,我们首先应该看看传统金融是如何产生的。金钱通常会被认为是种一直存在的东西,但事实并非如此。

人类最初是用物品和服务进行价值交换的。但随着社会的形成和发展,我们发明了货币,这是种更便利的用于交换价值的东西。随后,货币帮助推动了新的创新和生产力进步。然而,进步并不是没有代价的。

现在的金融是怎么样的?你会把努力赚到的价值换成政府发行的货币,然后存到银行里。你相信政府不会在一夜之间印更多的钱,你相信银行会安全地保管你的钱。当涉及到投资时,你把资产托付给财务顾问。通过把你的钱交给别人,你希望赚到利润。但我们当前金融体系的可悲事实是,我们付出的信任并不总是能得到相应的回报。

在银行/企业如何处理我们的投资,甚至政府如何管理经济方面,我们往往几乎没有发言权。在大多数情况下,投资者只能从自己资金的投资利润中获得一小部分的回报。

另外,在金融领域,世界不是平的。各国的金融市场无法正常流通,以银行利率为例,你知道吗?在日本,银行存款年利率是0.07%,贷款年利率只有1.475%,而在印度,银行贷款年利率高达8.6%以上。那么日本人是不是可以把自己的钱借给印度人,以获得5%以上的利息呢?这样对双方都有好处。但是抱歉,传统金融不允许你这样做。再说,别国的人真的能放心把钱借给一个不认识的印度阿三吗?

1.DeFi正试图建立不同的东西

分散式融资旨在建立一个对所有人开放的金融体系,并最大限度地减少一个人信任和依赖中央政府的需要。互联网,密码学和区块链等技术为我们提供了建立和控制金融系统的工具,不再需要中央机构。

区块链世界中有一句知名的话:“不要信任,去验证。”因为对于区块链网络,您作为个人可以验证区块链上发生的任何一笔交易。

2.DeFi允许每个人负责他们的财务状况

几乎所有DeFi应用程序都基于以太网区块链,这是世界上最受欢迎的可编程区块链。以太坊是一个区块链网络,维护着一个共享的数字价值分类账。

开发人员在以太坊上编写可以在区块链上创建,存储和管理数字资产(也称为通证)的应用程序。这些程序被称为智能合约或去中心化应用(DApps)。它们是由以太坊区块链强制执行的合同或协议。你可以建立复杂的不可逆转的协议,而且不再需要公证人、监督者。

分散式融资有机会实现更具弹性和透明度的金融体系。任何拥有互联网连接的人都可以访问基于以太坊区块链的智能合约并与之互动。可信的智能合约都是开源的,并且可以与其他智能合约互相调用。因此,用户可以验证智能合约的代码并选择最适合他们的服务。

3.流行的DeFi应用程序有哪些例子?

许多不同的DeFi产品和服务,其中的一些可能会让你感觉很熟悉,很像现有的金融服务,但他们具有去中心化的特征。

目前,DeFi最受欢迎和最快速增长的类型是借贷平台。与银行类似,用户存入资金并从其他用户借入其资产的过程中获得利息。但是,在这种情况下,资产是数字化的,智能合约将贷方与借款人联系起来,执行贷款条款并分配利息。这一切都发生在不需要相互信任或存在中间人银行的情况下。而且,通过削减中间人和地域的限制,贷款人可以获得更高的回报,并且由于区块链的透明性,可以更清楚地了解风险。

还有一类被称为稳定币的代币对DeFi生态系统也很重要。您可能会认为所有加密货币的价格都是频繁波动的。然而,稳定币是种设计为具有固定价值的代币,通常与美元等法定货币挂钩。例如,DAI是一种与美元1:1锚定,通过以太币(ETH)支撑的稳定币。每产出一个DAI,都有价值1.50美元的ETH被锁定在MakerDAO智能合约中作为抵押品。

另一种流行的DeFi应用程序是所谓的 去中心化交易所,简称DEX。它使用智能合约来强制执行交易规则,执行交易,安全地处理资金。当您使用DEX进行交易时,没有交易所运营商,没有注册,没有身份验证或提款费用。

4.DeFi可以打破国与国之间金融市场的界限

以DeFi借贷应用Compound为例,基于区块链和智能合约,你可以放心的把钱借给世界上任何一个角落的人,无论他是谁,借钱去干什么。DeFi抹平了世界各国金融市场间巨大的收益差距,并大大降低资金流动的摩擦。通过DeFi,发达国家居民可以获得比传统金融更高的理财收益,发展中国家居民可以获得比传统金融利率更低的贷款。

5.DeFi可以使资金像乐高积木一样组合

有了乐高积木,你可以从一堆小砖头开始。自由按你的想法拼凑成想要的东西。智能合约也是如此。通过将DeFi的现有组件拼凑在一起,您可以按需组合,修改或创建功能强大的财务工具。

例如Compound的cDAI就是资金乐高的完美典范。当您向Compound存入DAI时,您会收到cDAI代币,它用于记录您存入的DAI以及通过贷款获得的任何利息。由于cDAI是一种代币,您可以在其他智能合约中发送,接收甚至使用cDAI。这就是一个资金乐高的典型模式:ETH进入MakerDAO以铸造DAI代币,DAI供应给Compound换成cDAI,cDAI代币可以再用于其他DApps。

6.DeFi存在不同的权力下放需求

每种DeFi应用有不同程度的去中心化。因为本质上来说,并非一切行为都可以或需要完全的去中心化。

如前所述,稳定币在DeFi中很受欢迎。但是,并非所有稳定币都像DAI一样分散。其中许多实际上是锚定法定货币存款的代币。例如,对于每个USDC令牌,某个银行在某处固定存有1美元。理论上,您可以用代币来“标记”任何真实世界的资产,同时,这又是件无法完全去中心化的事情,因为虽然你可以在区块链上交易,发送和接收这些代币,但无法完全消除物理管理或兑换现实世界资产的需要。

例如,在区块链上购买房屋。假设某人将自己的家标记为一种代币,把代币投入去中心化交易所,然后你再购买它。如果没有相应的法律设置和法律,即便你拥有这个代币,都不能轻松地强迫此人搬出这套房子。按照目前的情况,你需要回到你所在国家的法院来解决纠纷。

简而言之,技术存在局限性,DeFi的边界开始变得模糊。可以确信在未来,法律将适应不断演化的金融形式,DeFi在世界上的地位将变得更加清晰。至少在当前,有一个清楚的事实:DeFi已经存在,并将继续发展。

21.3 web3.0

Web1.0

首先,Web这个单词在这里指的是互联网。所以Web1.0可以理解为第一代互联网

Web1.0,或者说第一代互联网,它的主要特点是网络平台单向地向用户提供内容。什么意思呢?

也就是说网站的运营人员负责向用户投放内容,用户仅仅作为接受内容的一方。

我在这个网站里能看到什么内容,完全由网站官方来决定。 中国三大门户网站:搜狐、新浪、网易,就是Web1.0的典型代表。

从这个角度来讲Web1.0相当于电视机——虽然有很多个电视频道供用户选择,也不乏优质的电视节目, 但用户在这个阶段只能被动地接收平台规定好的内容,还无法进一步参与到网络中。

Web2.0

相比于Web1.0,Web2.0的用户不再是内容的被动接收者。

用户可以在网络平台上传自己的内容(包括文字、图片、视频等等);也可以与其他用户进行交流。 互联网从**“平台向用户的单向传播”,变成了“用户与用户的双向互动”**。

从内容流通的角度来讲,类似于,从B2C变成了C2C。 正是因为Web2.0的这种特征,Web2.0时代是自媒体爆发的时代。

现在最热门的抖音,人们在里面上传各种有趣的视频,其他用户点赞评论,交流互动。创作自由度高,用户互动性强。

互联网从电视变成了社区茶话会。 抖音、博客、微博、豆瓣、知乎、推特、Facebook,这些平台都是Web2.0的典型代表。

人们在Web2.0里自由创作和交流,不仅催生了无数的文化内容,而且第一次使人们的生活从现实世界向数字世界迁移,还深刻改变了商业世界的业务模式和市场营销。

img

Web3.0

Web3.0给社会带来的影响只会比Web2.0更广阔和深刻。

如果说Web2.0是用户广泛地参与到网络互动中,那么Web3.0则是智能机器广泛参与到网络过程中来。

两个关键词:智能广泛

“智能”意味着在机器学习的加持下,各个网络计算机节点都拥有从历史数据中学习规律的能力;进而可以利用新学到的规律,来为人们的活动提供优化和代理。 相信大家都早已听说过人工智能的威力。这种人工智能是Web3.0最核心的特点之一。

“广泛”意味着未来安装有电脑的设备将会变得非常多。大部分我们能想到的设备和器具,都有潜力和有可能安装上计算机,通过长期收集数据,来为智能代理和优化提供决策依据。

当这种“广泛”达到一定程度的时候,因为我们周围的大多数东西都是在线连接的,所谓的**“万物联网”**也就形成了。

所以也有人把Web3.0成为“无所不在的网络”。在Web3.0广泛的智能机器加持下,未来所有的社会活动、商业活动,每个人的日常生活,都将发生深刻的改变,大量的新事物和新模式将会诞生,大量新的商业机会将会涌现。

IPFS&Filecoin赋能Web3.0

当然,Web3.0目前还处于早期发展阶段。其中一个重要原因是人工智能、物联网、区块链等技术还未足够成熟,而且缺少安全可靠的、容量庞大的数据存储基础设施。

Web3.0的网络将会产生极其庞大的数据量。这些庞大的数据存储到什么地方?这些数据如何安全地存储,如何保证不丢失、不被篡改?

以Filecoin为代表的分布式数据存储,提供了一种优质的解决思路。

区块链通证经济,激励企业和个人贡献自己的闲置存储空间和计算资源,为Filecoin网络提供存储和检索服务。

区块链不可篡改的特性,保证了数据不被恶意篡改、恶意删除。

多节点、分布式的存储模式,保证了即使单节点服务器损坏或宕机,数据也不会丢失、应用也不会崩溃。

区块链的匿名性,保证了每个人的隐私安全。

点对点就近传输的模式,保证了应用的快速响应,提高了网络的实用性。

**可以说,Filecoin天然与Web3.0高度契合。**Filecoin有望成为Web3.0的存储层基础设施,赋能Web3.0安全高速地发展。

22、DAO基本原理和要求

去中心化的自治组织(DAO)通过募集资金,分发代币,持有代币的人相当于股东,可以提案和表决。发布的提案由所有代币持有者表决。提案获得的收益按照一定规则回馈给股东。所有的规则全都写在了智能合约里,代码发布后公开受所有人监督执行,且不能修改,确保公司的公平和值得信任。

在创建DAO时,管理本组织的规则和程序以代码形式写成。我们的DAO的主要目标是以去中心化的形式决定如何使用我们的非营利组织的资金。所有社区成员将能够提交提案以获得资金。例如,这可能是为了开发一个钱包的新功能,或者支付参加会议的费用。

对于这种去中心化的决策,需要有一个投票系统。这个投票系统是需要具有可靠性,我们决定在一个专门的侧链上实现它,它将与我们的主区块链并行运行。我们将在专门的文章中谈论更多关于侧链的问题。

为了建立一个有效的投票系统,应该在不剥夺 "普通 "用户权利的情况下,发挥个别专家的专长。如果你是一名开发人员,这种专业知识会让你更有可能对一个编程提案投出一票,因为你对这种环境有更好的理解。同时,你可能在营销领域经验不是很丰富,觉得应该由其他人来决定参加哪些会议和支持哪些活动。营销专家会考虑决定参加哪些会议,但可能对实施哪些基于代码的项目没有强烈的意见。

23、元宇宙数字资产管理基本要求

**元宇宙的定义:**即Metaverse,由Meta(超越)、Universe(宇宙)两部分组成,指的是通过技术能力在现实世界基础上,搭建一个平行且持久存在的沉浸式虚拟空间,用户可在其中进行文化、社交、娱乐活动。功能上看元宇宙是一个承载虚拟活动的平台,用户能进行社交、娱乐、创作、展示、教育、交易等社会性、精神性活动。元宇宙的核心在于对虚拟资产和虚拟身份的承载。这种对现实世界底层逻辑的复制,使元宇宙可以成为一个坚实的平台,任何用户都能参与创造,且劳动成果受到保障。

**区块链(Blockchain):**通过智能合约,提供去中心化的清结算平台和价值传递机制,保障价值归属与流转,从而实现虚拟世界里经济系统运行的稳定、高效、透明和确定性。区块链技术能为元宇宙提供价值传递的解决方案,支撑身份、保障公信力,是构建元宇宙经济体系的核心要素。元宇宙跨越实体和数字世界的属性,天然适宜与区块链技术相结合。区块链技术将数据存储在分布式账本(链)上,能解决数字稀缺性、唯一性、真实性、数字产权、跨虚拟环境大规模协调等问题,保证了虚拟资产的流转能够去中心化地独立存在,通过代码开源保证规的公平和透明。区块链技术使得用户数据、数字物品、内容以及IP可以在元宇宙流通,更重要的是能够在元宇宙中创造一个完整运转且和现实世界相联系的经济系统。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:57:50  更:2022-01-28 11:58:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:33:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码