08 BTC-脚本
1. 交易信息
a.交易结构
说明:
- locktime:生效延迟时间。
- vin:输入信息。
- vout:输出信息。
- blockhash:哈希值。
- time:交易时间。
- blocktime:区块产生时间。
b.交易的输入
- txid:之前交易的哈希值。
- vout:第几个输出结果。
- scriptSig:输入脚本。
c.交易输出
- reqSigs:需要多少个签名(单/多重签名)。
- address:输出的地址。
d.交易验证
说明:
2.验证模式
a.P2PK
脚本执行
- output:指的是输出结果,里面有下转账交易的目的地址与公钥地址。
- input:为下一个交易的输入信息,sig是对于本次交易的HASH,可以通过以上一个区块的输出的公钥进行验证这个签名的正确性。
b.P2PKH
脚本执行
说明:最常用的
- DUP:赋值栈顶元素。
- EQ:比较是否相等。
- CHECKSIG:用公钥检查签名是否正确。
c.P2SH
验证
- 根据收款账户提供的赎回脚本,进行HASH,判断与之前提供的赎回脚本的HASH是否相等,相等则为同一个人或组织,有权花费上一个交易转入的钱。
- 执行一遍赎回脚本,验证签名是否正确。
实现
总体
验证一
- 进行堆栈操作判断是否符合。
验证二
说明:
- 反序列化。
- 产生签名。
- 对签名进行公钥验证。
普通多重签名:
- 最上面的红叉子,是代码问题,多弹出一个元素。
- 相对顺序必须相同。
- 问题-生成交易需要在输出脚本输入公钥与最少使用的签名个数。
- 问题-签名规则不统一,容易出现分歧。
P2SH多重签名
- 不用消费者输入公钥与认证规则。
- 把信息生成为赎回脚本,便于消费者使用。
- 赎回脚本可以进行反序列化。
脚本执行(一)
执行脚本(二)
说明:展开赎回脚本的信息进行验证。
d.Proof of Burn
- return之后的代码都不会进行存储。
- 用来销毁比特币,这个币永远不能正确验证。
- 销毁以获取小币种的加密货币,AltCoin。
- 进行永久数据的存储。
- coinbase也可以进行随意的写入,但是需要有区块的记账权。
08 BTC-脚本
https://prelearn-code.github.io/2024/07/22/BlockChain/BTC/08 BTC-脚本/