区块链用于版权保护的方式:
把文章内容存在第三方数据库,用文章内容生成一个哈希,把哈希写入到区块链。
取数据的时候(需要溯源的时候),去区块链把哈希值取下来,然后用哈希寻址找到所对应的数据,这样把源数据取回来。
如何做到版权保护?这是法律层面的。
我们可以做数据对比,或者如果不做数据对比的话,直接提交,因为可以溯源,谁提交的早,版权就是谁的。
简单了解一下什么是哈希
https://anders.com/blockchain/block.html
当改变一个区块中的值之后,后面所有的区块都失效了。后面的区块需要重新挖矿,才重新有效。
因此,如果想要修改其中一个区块,需要花很高的成本。
分布式存储:每个节点看做一个账本,每个节点存储的数据都是一样的。假设一共有100个人,如果只改变其中一两个人的数据是没有用的,因为剩下的另外97个人还保存着数据的备份,这样就保证了数据的安全性。
因此,想要攻击一个区块链,就要攻击其51%以上的节点。代价相当高。
提问:是每一笔交易都产生一个区块吗?
回答:不是。比特币的区块,每10分钟更新一次。一个区块中包含很多笔交易
。
每一次转账,都会产生一笔交易。但是,并不是每一步交易都会产生一个区块。
https://blockchaindemo.io/
Nounce表示在本区块上刚好满足区块难度的随机数,挖矿就是寻找nounce值的过程。
模拟演示区块链产生的过程
安装完成后,直接输入blockchain
输入bc查看区块
挖矿,添加一个新的区块
现在,我们拥有两个区块。可以看到,后一个区块中包含前一个区块的哈希值。
挖矿的时候存在竞争的问题。
当一个人挖矿成功之后,会给所有的节点发送一个广播。其余节点接收到广播之后,会验证新产生的数据正不正确,如果正确,就把新的数据放进下一个区块当中。
猜数字的人就是矿工。猜数字的过程就是找随机数。
现在我们遇到的问题是,假设100人参与。a,b两个人几乎同时猜中这个数字,一部分人在验证a的结果,另一部分人在验证b的结果,于是产生了分叉。
如果过了一段时间,a又挖出了新的区块,那么a的链会延长,成为最长的链。
solidity写好的类,在部署之后,会产生(new
)一个真实的合约的实例对象。
下图中,右上角可以选择合约的地址。
Main Ethereun Network
需要花钱,开发的过程中没有必要部署到公链上。Kovan Test Net
的原理和公网是一样的。开发的过程中,有很多渠道可以获取到测试币,用于测试。开发成功、能够使用之后,可以部署到公网。切换网络之后,就可以部署合约了。
合约的地址,从面向对象的角度来讲,相当于是存储空间的地址。
有了地址之后,前端可以通过web3.js提供的API,获取合约的实例对象。
下面我们来部署一个简单的和约。
点击Create之后,会询问是否确认支付。点击Submit。
提交成功之后,返回给你一个实例的地址。
如果想要在web前端操作这个和约中的内容,需要通过这个地址,找到你的和约。
Input Data
是将源码转化为十六进制之后的结果。私有链,可以部署在私有网络中(局域网),可以在自己的局域网中进行测试。开发测试完成之后,在提交到公链。
如何搭建私有链?
一种理解是,联盟链和私有链都可以看作是私有链。当部署一个和约的时候,是真的需要每一台电脑执行挖矿的命令。刚才在测试链上部署的时候,是确实有人在挖矿,有节点在做验证。在自己的私有链上部署和约的时候,就需要自己执行挖矿命令了。
也可以搭建一个以太坊的联盟链。
什么是联盟链?
比如一共100家银行,其中10家银行独立建立了联盟链,所有人都可以访问联盟链中的数据,但是要确认联盟链的数据是否有效,仅由着10家银行来确定。
关于公链
公链的应用场景,大部分还是代币。实际上,一般的企业级的产品,都不算真正的“去中心化”,而是“去中介”,应该说是半去中心化。或者是使用联盟链。而且,如果一个公司开发一个产品,这个公司也一定不希望这个产品是完全去中心化的。
超级账本
我们要讲的超级账本,就属于联盟链。联盟链可以被简单的理解为私链。
Fabric
是自己建一个网络,建成的网络是自己的私有链(联盟链)。
在超级账本中,我们用Go语言,或者Java语言,来创建类。
在比赛中,用超级账本开发产品的相对来说比较多。以太坊因为需要花费gas,因此成本有些大。