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-脚本/
作者
prelearn
发布于
2024年7月22日
更新于
2024年8月8日
许可协议