首页 >> 大全

区块链概论(开发者入门篇

2023-10-05 大全 24 作者:考证青年

区块链的监管

区块链并不是一个新技术,而是一堆已有技术的结合,包括分布式技术、密码学等等。比特币诞生与2009年,区块链作为其后端支撑,在2015年才掀起浪潮,大家逐渐发现区块链的应用领域远远不止代币(代币这个词很好理解,作为钱币的替代品,在特定的场合或者范围内才有效。比如比特币莱特币以太币等等等等。)

我国对于代币的监管较严格,中国人民银行宣布,发行初始代币(ICOs)是一种非法的融资手段。但同时,我国支持区块链技术的发展,并在16年12月其归为互联网金融的一项技术(参考《北京市“十三五”时期金融业发展规划》),在之前的8月,北京市金融工作局已经在推动中关村区块链联盟设立。

截止2018.5,北京、上海、广州、深圳、浙江、贵州等地在内的十八个地区出台了相关区块链项目鼓励政策。各地区将区块链研发及应用作为重要战略发展目标,并出台详细鼓励政策。所以抛开代币这个概念,区块链的未来还是值得期待的。

最近由于参加项目,收集了一些区块链在各领域在2018-2023年市场价值的预测数据,做了个柱状图。

区块链开发从入门到精通_区块链入门基础_

但是这个数据吧,我认为看看就好并不能当真 = =,毕竟现在区块链的底层技术还不成熟,发展空间较大。由于供应链金融这块很贴紧区块链的运作方式,所以目前也在大力发展。

感觉说了一堆没用的。其实是想大家先了解下这个领域,包括他的制度。

区块链概述

Swan在《区块链:新经济蓝图及导读》中将区块链应用分为区块链1.0、2.0和3.0

区块链1.0:比特币,支撑虚拟货币应用,转账、汇款和数字化支付相关的密码学货币应用。

区块链2.0:支撑智能合约应用合约是经济、市场和金融的区块链应用的基石。应用包括股票、债券、期货、贷款、抵押、产权、智能财产和智能合约。2.0的代表是以太坊,以智能合约为中心,用户可以自己编辑智能合约(这当然存在一定的风险,比如事件,黑客就是从智能合约中的漏洞入手。)

区块链3.0:应用是超越货币、金融和市场的范围的去中心化应用,特别是政府、健康、科学、文艺和艺术领域。3.0的代表是EOS(so 3.0),但是平台好像不是很稳定,速度并没有他对外宣称的那么快。其实3.0可能还在发展中。

比特币分类:

1. 公有链( ):对所有人开放,任何人都可以参与。

应用包括:比特币、以太坊、虚拟货币、面向大众的电子商务、互联网金融等B2C\C2C\C2B等场景

2.私有链( ):对单独的个人或实体开放

应用包括:数据库管理、审计,防范内部和外部的对数据安全的攻击,是许可链

3.联盟链( ):对特定的组织团体开放

应用包括:40多家银行参与的区块链联盟R3,和Linux基金会支持的超级账本,需要注册许可,许可链

用于机构间交易、结算或清算等B2B形式

4. 侧链():比特币平均每十分钟出一个区块,每个区块1MB大小,使得大概每秒才能确认7笔交易。侧链来提升效率。 闪电网络把很多交易放在侧链,只有在做清算时才用上主链,大大提高交易速率,又不会增加主链的存储负担。

5. 互联链():各自垂直领域的区块链互联互通,形成区块链全球网络。

区块链行业架构:协议层、扩展层、应用层。

区块链入门基础__区块链开发从入门到精通

协议层

底层技术,完整的区块链产品,维护网络节点,提供API调用。通常提供简单的客户端。

构建了网络环境,搭建了交易通道,指定了节点奖励规则,

技术:网络编程、分布式算法、加密签名、数据存储技术。

语言:网络编程能力强的,对并发处理简单的。比如, Go

区块链入门基础__区块链开发从入门到精通

进一步分为存储层和网络层。

比特币选择的是谷歌的,读写性能好。

网络层是编码的重点和难点,包括点对点网络中的分布式算法、加密签名。《开发加密货币》

也有将点对点网络的实现单独分开:

节点查找、数据传输和验证等逻辑独立

共识算法、加密签名、数据存储等组成核心层

扩展层

类似电脑驱动,让区块链产品更加实用。

有两类,一是各类交易市场,法币兑换加密货币。

二是针对某个方向的扩展实现,例如智能合约,即达到某个条件,合约自动执行,比如证券转移。

技术没有限制,分布式存储、机器学习、VR、物联网、大数据等等。

任何需要第三方支付的产品都可以方便的使用区块链

任何需要确权、征信和追溯的信息,也可以借助区块链。

应用层

各种客户端(DAPP、钱包等)。

比特币协议层使用C++开发、官方客户端钱包用Qt、第三方钱包用,共识算法采用PoW(Proof of work)工作量证明机制。

以太坊给出了Go(go-)\Java((J))\等多语言的实现。客户端有Rust, Ruby, 等。

大家对区块链的定义都是分布式的公开数据库,或者叫他账本。所以功能明显:存储。存储的是什么?不可篡改的交易。

一段时间内产生的交易被打包进一个区块中,这个区块被挖出来之后(称为挖矿),连接到最长的链条上(区块数量最多),就构成了区块链。

我们根据比特币区块链来理解区块链的工作方式。

比特币地址

首先我们来看一下比特币地址。作为交易的用户,我们首先每个人要有个地址,这样我才能给你转账。

比特币地址由数字和字母组成。生成过程如下:

区块链开发从入门到精通__区块链入门基础

公私钥若是有问题参考密码学。

非对称加密:每个人有两把钥匙,其中一把只有自己知道(私钥),另一把可以公布于众(公钥);通过私钥加密过的信息,只要公钥才能解密,连私钥都不能,公钥可以通过私钥生成很多把。

用户随机生成私钥,然后通过私钥产生公钥,对公钥进行加密函数加密,再使用加密,得到了公钥HASH。再经过两次加密,取前四字节作为校验码加入到原公钥HASH中,再添加相应的版本号(目前为0x00),将这些字节合并后通过,生成58字节的比特币地址。

交易

对于每个账户,比特币存储的不是其余额(还剩多少比特币),而是交易记录。比如A转给我1个比特币,B转给我2两个比特币,存储的是这些账单。而比特币的创新在于UTXO( ,未花费的交易输出)。也就是说,我要发起一笔交易,转账给C两个比特币,这时交易的输入则是部分UTXO。我有一些别人转账给我的账单,来自A的1个和B的两个,那么我转给C的这个交易,使用的就可能是B转给我的这笔钱。

我们来看看交易的输入与输出:

_区块链入门基础_区块链开发从入门到精通

tx的值是即是一笔UTXO的哈希,在例子中则是选择C转给我的2个比特币,将这些钱给C。作为输入的交易可以是多个。(比如我想转D3个比特币。A与B的交易单个肯定不够)

输入脚本:也就是是转账人私钥生成的数字签名,即需要转账人证明自己有与公钥哈希对应的私钥,这样他才可以使用这笔UTXO。下一行是转账人的公钥。

Value就是转账的金额。

:是输出脚本,其中包含了若干脚本命令,以及收款方的地址。

现在我们来看脚本的执行过程。

比特币的脚本基于堆栈,后进先出。

交易1 :A转账给B

输入:A的签名&公钥

输出:B的公钥HASH

交易2:B转账给C

输入:B的签名&公钥

输出:C的公钥HASH

先执行交易2的输入脚本,从左向右,将签名与公钥入栈;然后执行交易1的输出脚本——复制栈顶元素。

区块链入门基础_区块链开发从入门到精通_

然后计算栈顶元素的HASH,也就是A的公钥HASH,即A的比特币地址。然后将交易1的输出中的地址(A的地址)压栈。

_区块链入门基础_区块链开发从入门到精通

接下来判断栈顶前两个元素是否相等。如果相等继续执行,如果不相等中断。最后使用来进行签名校验,即公私钥匹配。

区块链入门基础_区块链开发从入门到精通_

一串指令证明了想要花费该UTXO中比特币的人,是否有对应的私钥,也就是这笔转账是否是转给A的,或者是A是否有权限可以花。

挖矿

然后我们有必要来看一下挖矿。

先看一眼区块头部的数据结构。

区块链入门基础__区块链开发从入门到精通

其中树是对交易的散列树。两两合并最终形成根节点。来看一个更完整的图:

_区块链开发从入门到精通_区块链入门基础

我们常说挖矿就是寻找这个随机数Nonce,其实在区块生成时的散列是固定的,Nonce的值从0开始。其中第一个交易是(挖矿交易),即挖矿交易会的输出地址是你的独一无二的地址,所以虽然区块生成时的散列是固定的,但每个区块的 tree根节点不同,所以对于每个矿工来说,被挖区块的散列是不同的。

挖矿的目的就是改变这个Nonce的值,通常从0开始往上增加。每改变一次Nonce,我们就对区块重新计算HASH,直到得出的HASH值满足区块头中的目标值。这个目标值是一个标准,通常前n位为0,如果矿工计算出的HASH值小于等于该目标值,也就是至少前n位为0时,挖矿成功。目标值也叫难度值,比特币规定十分钟挖出一个区块,若是快于或者慢于十分钟,目标值就会自动调整,使得挖矿更难或者更容易。保证十分钟产出一个区块。

当然区块中的交易,就是这10分钟内产生的交易。如果交易太多(因为每个区块大小为1MB,存储交易数量有限),则继续由下一个区块打包。

找到这个随机数不容易,因为散列函数的性质决定了不能一下就猜到数字,只有一个一个试,因为通常从0开始一个一个往上加,所以说最后的Nonce值,就是矿工执行哈希散列的次数。

同时我们可以发现,找随机数不容易,但是验证却极其简单,只需要将随机数带入区块,其他节点一次散列即可对某个挖出区块的矿工节点进行验证。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了