当前位置:首页 > 易欧 > 正文

Comunion 区块链深度学习系列|进阶原理:转账

本系列内容包含:基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。

转账流程

大家都知道,我们日常使用银行卡进行转账的时候,一般需要填入户名、对方的账号、转账金额以及一些转账附言,接着输入密码以后,就把资金转到对方的账户了。

那这个流程背后的整个系统是如何运转的呢?

假如张三在招商银行开的户,他要将一笔资金转到李四在工商银行的开户行。

那么张三提交转账申请后,其转账卡所在招商银行支行,验证了用户名和密码以后,会将这笔交易提交给招商银行的总行,然后由招商银行的总行将这笔交易,发送给中国人民银行大额或小额的支付系统。

最后,这笔转账交易到达了李四开户的银行工商银行总行,并逐级向下,最终到达李四开户的网点支行。

区块链转账系统又是如何运转的呢?拿比特币系统来说,它是一种点对点的电子现金系统,我们具体看一下整个过程是如何运转的,大家看一下比特币白皮书中的流程图。

Comunion 区块链深度学习系列|进阶原理:转账  第1张

假如张三需要向李四转10个比特币,

首先张三需要打开自己的数字货币钱包,然后扫描或者输入李四的钱包地址,接着张三填入需要转账的金额,以及选择对应的手续费之后(手续费高低对应转账速度),最后输入支付密码,点击发送,就完成了。

这整个过程和传统转账的交易是很类似的,都是需要输入对方的账户、转账金额以及支付密码,然后点击发送,最后资金到达对方账号或钱包,交易完成。

区别

两者之间关键是中间资金流转部分的区别。

首先,张三的钱包通过其私钥对交易进行签名,钱包将签名的交易广播到所有这个钱包连接的比特币节点上。

第二步,这些节点,广播到比特币的其他节点,所有节点都将对这个交易的合法性进行验证。

第三步,如果这个交易是合法的,那么这个交易将会放到待打包的交易序列中,也可以称之为内存池或者交易池,列表中的交易被称为未确认交易。

第四步,比特币矿工会从节点中获得待打包的交易,并开始构建下一个区块,也就是挖矿。

第五步,当矿工挖出一个符合要求的区块后,矿工会将这个区块第一时间广播给系统的所有节点。

第六步,所有节点对广播过来的区块进行验证。如果验证通过,将这个区块添加到本地的账本。

最后,李四的钱包连接到新的节点,新节点的区块中包含了张三的转账信息,这时李四就通过自己钱包就看到了这笔转账成功。

Comunion 区块链深度学习系列|进阶原理:转账  第2张

运转原理

请大家思考两个问题:

1.为什么使用张三的私钥进行签名,就可以被全网的所有节点接?。

2.这笔交易中已经包含了张三签名,也就是别人都有了张三的签名,那是否后续别人也可以用这个签名仿张三的签名,把张三的资金偷走?例如模仿一张支票的签名来伪造其它支票。

这里就涉及到密码学中的一个非对称加密的相关知识,后续我们再详细讲解这部分的知识。今天主要简单介绍一下非对称加密算法在这里的用法。

大家常常听到的加密算法一般是对称加密,也就是通讯双方都具有双重的钥匙。

举个例子,对称加密就好比给一个门装上锁,只有有钥匙的人才能开门,但是所有人的钥匙都是一样的,这就是对称加密。

而非对称加密与对称加密最大的不同就是:通讯双方不需要有相同的钥匙。

就好比甲用了钥匙A把门锁上,乙可以用钥匙B把门打开,这两把钥匙对应非对称加密中的私钥和公钥。

私钥和公钥是一一对应的,由私钥可以产生公钥,但是由公钥不能反推回私钥。

非对称加密的流程。

1.发送方生成公钥和私钥;

2.使用私钥对数据进行签名;

3.得到签名后的密文;

4.将密文和公钥发送给接收方;

5.接收方通过公钥对密文进行解密。

6.证明密文是经过发送方的私钥签名的。

Comunion 区块链深度学习系列|进阶原理:转账  第3张

其实这里就解答了第一个问题,因为张三使用私钥对交易数据进行了签名,同时全网都可以有张三的公钥,通过公钥和签名就可以验证交易的合法性。

我们再来看一下第二个问题。

如果李四收到了张三转的10个比特币,他是否可以把这个交易继续广播到比特币网络中,从而不断的从张三的账户中转出10个比特币呢?

这个答案是:肯定不行。我们可以看一下交易结构。

Comunion 区块链深度学习系列|进阶原理:转账  第4张

在每个比特币交易结构中都包括:输入(input)以及输出(output)两部分。

输出中包括了收款方的信息,比如上面的数量和锁定脚本。锁定脚本指定了接收者的比特币地址,以及什么情况下,这个比特币可以被花费。

而上面的输入,包括了前序交易的ID,前序交易的序号决定了输入在交易中排第几,以此解锁脚本。

前去交易的这些信息被称为 UTXO(未花费交易)。

由于每个 UTXO 只能被使用一次,所以即使张三需要继续给李四转10个比特币,由于前面的input已经变化了,所以签名内容也会完全不同。从而,即使相同的交易,也不能被重复的广播到比特币的网络中。

我们继续看一下 UTXO,有人可能会问,如果我这一个 UTXO 都用完了,后面我怎么转账呢?

其实我们日常生活中大家常用的,比如说银行、支付宝、微信这些,大家比较熟悉的是一个账户模型:我有一个账户,账户里有一个余额,我转出多少,账户就剩多少,每个人有一个或者多个账户。

这种模型是大家非常容易理解的,但是 UTXO 模型与账户模型有很大的不同。

个人理解 UTXO 模型更像是支票,就好比在比特币网络中是一张张比特币支票在不断的流转,当有一笔比特币转入的时候,就产生了一个新的 UTXO,当向外转账的时候,钱包将会选择一个足够金额的 UTXO 作为交易的输入。

发表评论