- A+
本文基于上文的结论,揭秘一笔交易中都包含了哪些信息。
上文总结了去中心化的交易为了达到安全,需要满足的几点因素:
· 用户将密码加密,得到解密工具。
· 用户将解密工具加密,得到账户。
· 用户将账户暴露给所有人,并用账户及余额交易。
· 用户用完一个账户发币,就将剩余比特币转移到新的账户中,并丢弃掉原来的账户。
· 将解密工具加密得到的账户,与交易中的发起账户比较。
· 矿工将加密结果及解密工具代入到一个公式计算,如果结果为true,则验证成功。
基于上述这些条件,中本聪设计了如下的机制:
基础机制:
1、用随机选出的很长一串数字进行哈希加密,生成私钥,也就是用户的密码。
2、用私钥进行哈希加密,生成公钥,也就是解密工具。
3、用公钥进行哈希加密,生成地址,也就是账户。
4、用户之间通过地址进行交易,地址记录了比特币数量。
5、找零比特币,保存在新的地址中。
交易信息规则:
在一笔交易生成时,交易发起者需要用发起交易地址所对应的私钥对这笔交易加密,加密结果写入交易记录中,并且将私钥对应的公钥写入交易记录中,并且为收币的地址加上加上一把锁,以防其他人盗取。
校验交易机制:
如果想用这个地址发起下一笔交易,需要打开这把锁,打开锁需要验证两样东西:
1、在下一笔交易中,交易发起者需要提供一个公钥,公钥经过哈希加密后,需要和锁里的存的数一样。
2、在下一笔交易中,交易发起者需要提供他用私钥对这笔交易的加密结果。矿工将加密结果、公钥带入到一个验证公式中,如果公式计算结果为“1”,则验证通过。
只有这两点验证通过,那么以这个地址所发起的交易将被验证通过。
第1点是为了证明拥有公钥的交易发起者想要发起交易的地址确实是这个地址。但不确定是不是私钥所有者发起的。
第2点是为了证明确实是地址对应的私钥所有者发起的这笔交易。
通过上述的机制,我们能差不多确定一笔交易中,包含哪些信息了:
· 1或多个发币方信息
· 1或多个收币方信息
发币方信息详情:
1)发币地址
2)发比特币的个数
3)用私钥对本交易加密之后的结果(币圈称之为称签名)
4)公钥
5)上一笔交易时这个地址作为收币地址时的锁定条件及解锁规则(币圈称之为锁定脚本)
收币方信息详情:
1)收币地址
2)收比特币的个数
3)给这个地址使用权上的锁(币圈称之为锁定脚本)
锁里包含:校验流程、校验需要对比的内容。
除此之外,一笔交易也需要指定交易id、发起地址的个数、收币地址的个数。
于是,交易整体结构如下:
名称 | 描述 |
版本 | 几乎都是1,没变化 |
输入数量 | 总共有多少个发币方 |
交易输入方 | 一个或多个发币方的详细信息 |
输出数量 | 总共有多少个收币方 |
交易输出方 | 一个或多个收币方的详细信息 |
时钟时间 | 代表时间或区块号。大于5亿,代表时间,0到5亿,代表这笔交易所属的区块号 |
交易输入方(发币方)的整体结构如下(将发币方称为输入交易):
名称 | 说明 |
上笔交易id | 发币地址所对应的上一笔交易,在上一笔交易中,这个地址是收币地址 |
上笔地址序号 | 这个发币地址在上一笔交易中,作为收币地址时,是排在第几位,第一位则为0,第二位则为1,等等 |
解锁脚本尺寸 | 后面的解锁脚本长度 |
解锁脚本 | 即“签名+公钥”,也是能将上笔交易中这个地址对应的锁解开的那串字符 |
序列号 | 无用 |
交易输出方(收币方)的整体结构如下(将收币方称为输出交易):
名称 | 说明 |
收币数额 | 支付给这个收币地址多少比特币 |
锁定脚本尺寸 | 后面的锁定脚本长度 |
锁定脚本 | 给这笔收币地址加锁,锁上说明了下一次用这个收币地址发币时,需要用对应的解锁脚本(即签名+公钥)才能解开 |
假如一笔交易包含多个输入交易、输出交易,则结构如下:
版本 | |
输入数量 | 输出数量 |
输入交易1 | 输出交易1 |
上笔交易id | 收币数额 |
上笔地址序号 | 锁定脚本尺寸 |
解锁脚本尺寸 | 锁定脚本 |
解锁脚本 | -- |
序列号 | -- |
输入交易2 | 输出交易2 |
(与1相同) | (与1相同) |
- 微信
- 扫一扫
-
- 微信公众号
- 扫一扫
-