【区块链】GO语言区块链项目——超级账本

区块链的应用:版权保护

区块链用于版权保护的方式:

把文章内容存在第三方数据库,用文章内容生成一个哈希,把哈希写入到区块链。

取数据的时候(需要溯源的时候),去区块链把哈希值取下来,然后用哈希寻址找到所对应的数据,这样把源数据取回来。

如何做到版权保护?这是法律层面的。

我们可以做数据对比,或者如果不做数据对比的话,直接提交,因为可以溯源,谁提交的早,版权就是谁的。

来看一个区块链的Demo

简单了解一下什么是哈希

https://anders.com/blockchain/block.html

【区块链】GO语言区块链项目——超级账本_第1张图片【区块链】GO语言区块链项目——超级账本_第2张图片
当改变一个区块中的值之后,后面所有的区块都失效了。后面的区块需要重新挖矿,才重新有效。

因此,如果想要修改其中一个区块,需要花很高的成本。
【区块链】GO语言区块链项目——超级账本_第3张图片分布式存储:每个节点看做一个账本,每个节点存储的数据都是一样的。假设一共有100个人,如果只改变其中一两个人的数据是没有用的,因为剩下的另外97个人还保存着数据的备份,这样就保证了数据的安全性。

因此,想要攻击一个区块链,就要攻击其51%以上的节点。代价相当高。

【区块链】GO语言区块链项目——超级账本_第4张图片

提问:是每一笔交易都产生一个区块吗?

回答:不是。比特币的区块,每10分钟更新一次。一个区块中包含很多笔交易

每一次转账,都会产生一笔交易。但是,并不是每一步交易都会产生一个区块。
【区块链】GO语言区块链项目——超级账本_第5张图片

简单了解一下区块链

https://blockchaindemo.io/

【区块链】GO语言区块链项目——超级账本_第6张图片每一个区块的组成如下图:

Nounce表示在本区块上刚好满足区块难度的随机数,挖矿就是寻找nounce值的过程。
【区块链】GO语言区块链项目——超级账本_第7张图片
模拟演示区块链产生的过程
【区块链】GO语言区块链项目——超级账本_第8张图片安装完成后,直接输入blockchain
【区块链】GO语言区块链项目——超级账本_第9张图片
输入bc查看区块
【区块链】GO语言区块链项目——超级账本_第10张图片
挖矿,添加一个新的区块

【区块链】GO语言区块链项目——超级账本_第11张图片
现在,我们拥有两个区块。可以看到,后一个区块中包含前一个区块的哈希值。
【区块链】GO语言区块链项目——超级账本_第12张图片
挖矿的时候存在竞争的问题。

当一个人挖矿成功之后,会给所有的节点发送一个广播。其余节点接收到广播之后,会验证新产生的数据正不正确,如果正确,就把新的数据放进下一个区块当中。

猜数字的人就是矿工。猜数字的过程就是找随机数。

现在我们遇到的问题是,假设100人参与。a,b两个人几乎同时猜中这个数字,一部分人在验证a的结果,另一部分人在验证b的结果,于是产生了分叉。

如果过了一段时间,a又挖出了新的区块,那么a的链会延长,成为最长的链。

以太坊合约的开发

solidity写好的类,在部署之后,会产生(new)一个真实的合约的实例对象。

下图中,右上角可以选择合约的地址。

  • 部署到公网Main Ethereun Network需要花钱,开发的过程中没有必要部署到公链上。
  • 测试网络Kovan Test Net的原理和公网是一样的。开发的过程中,有很多渠道可以获取到测试币,用于测试。开发成功、能够使用之后,可以部署到公网。

切换网络之后,就可以部署合约了。

合约的地址,从面向对象的角度来讲,相当于是存储空间的地址。

有了地址之后,前端可以通过web3.js提供的API,获取合约的实例对象。
【区块链】GO语言区块链项目——超级账本_第13张图片
下面我们来部署一个简单的和约。

【区块链】GO语言区块链项目——超级账本_第14张图片

点击Create之后,会询问是否确认支付。点击Submit。
【区块链】GO语言区块链项目——超级账本_第15张图片提交成功之后,返回给你一个实例的地址

如果想要在web前端操作这个和约中的内容,需要通过这个地址,找到你的和约。
【区块链】GO语言区块链项目——超级账本_第16张图片

点击查看区块的相关信息,包括:
【区块链】GO语言区块链项目——超级账本_第17张图片看到如下信息

  • 其中,Input Data是将源码转化为十六进制之后的结果。
  • 可以这样理解:向区块链上部署和约的过程就是一个交易。
  • 写入数据是交易(因为需要矿工验证、需要区块链的存储空间,因此需要花手续费)
  • 取数据不是交易,不需要手续费。
    【区块链】GO语言区块链项目——超级账本_第18张图片

私有链

私有链,可以部署在私有网络中(局域网),可以在自己的局域网中进行测试。开发测试完成之后,在提交到公链。

如何搭建私有链?

一种理解是,联盟链和私有链都可以看作是私有链。当部署一个和约的时候,是真的需要每一台电脑执行挖矿的命令。刚才在测试链上部署的时候,是确实有人在挖矿,有节点在做验证。在自己的私有链上部署和约的时候,就需要自己执行挖矿命令了。

也可以搭建一个以太坊的联盟链。

什么是联盟链?

比如一共100家银行,其中10家银行独立建立了联盟链,所有人都可以访问联盟链中的数据,但是要确认联盟链的数据是否有效,仅由着10家银行来确定。

关于公链

公链的应用场景,大部分还是代币。实际上,一般的企业级的产品,都不算真正的“去中心化”,而是“去中介”,应该说是半去中心化。或者是使用联盟链。而且,如果一个公司开发一个产品,这个公司也一定不希望这个产品是完全去中心化的。

超级账本

我们要讲的超级账本,就属于联盟链。联盟链可以被简单的理解为私链。

超级账本Hyperledger白皮书

【区块链】GO语言区块链项目——超级账本_第19张图片

Fabric是自己建一个网络,建成的网络是自己的私有链(联盟链)。

在超级账本中,我们用Go语言,或者Java语言,来创建类。

在比赛中,用超级账本开发产品的相对来说比较多。以太坊因为需要花费gas,因此成本有些大。

【区块链】GO语言区块链项目——超级账本_第20张图片

你可能感兴趣的:(区块链)