在 BSV 脚本中,将数据 0x01 送到栈上,似乎有两种做法:
- 直接使用操作码 OP_1,对应的脚本为 { 0x51 }。根据定义,OP_1 会将 0x01 送到栈顶
- 使用 pushdata 的方式,对应的脚本为 { 0x01 0x01 }。第一个 0x01 表示接下来的 1 字节数据(第二个 0x01)会被送到栈上
实际上,[2] 是错误的,因为它违反了“最小推送”(minimal push)规则。
请立即停止使用 ElectrumSV 1.3.7 及之前版本中实现的 multisig accumulator 多签方案。该方案的锁定脚本有严重 bug,我被盗了 600 BSV。
在双钥系统中,签名可以作为身份认证和授权的手段。
在比特币中也一样,我可以向你提供下列信息,来证明该地址属于我。
项 | 内容 |
---|---|
地址 | 1AfxgwYJrBgriZDLryfyKuSdBsi59jeBX9 |
消息 | 你好世界 |
签名 | H9DnqMSGQmqi0zIWQqVfPXQsq59Qt11F1rUQDxv+4/iUDrSLJ6xHZ7PUSKvVThVWQAy/lLEpE3JeMpOlwUiVGlo= |
比特币以 UTXO 的形式“存储”在全网账本中,被放置在其上的加密难题(锁定脚本)锁定,只有(要)提供正确的解锁脚本解决或满足这个加密难题或条件,才(就)可以用于支付。
结合丰富的操作码,锁定脚本和解锁脚本的形式拥有广泛的可能性。当锁定脚本为OP_ADD 7 OP_EQUAL
时,5 2
和4 3
都是正确解锁脚本。当蔡明使用比特币收款时,她需要提供一个收款模板(锁定脚本),以确保这些比特币只有自己才能花费。很明显,上述这类锁定脚本与现实世界人的身份毫无关联,虽然蔡明可以想方设法将锁定脚本搞的足够复杂,但这种方式并不通用,更没有安全保障,无法彻底杜绝其他人也能提供正确的解锁脚本。
非对称加密中的公钥可以作为身份标识,签名可以作为身份认证和授权的手段。为了做到这一点,蔡明需要在锁定脚本里关联自己的公钥,并限制只有提供了正确的数字签名才能花费这个 UTXO。数学原理可以保证,只要蔡明的私钥没有丢失或泄露就没有其他人能提供正确的签名。
上述这类交易被统称为 P2PKH 交易(P2PK 的演进版),他们的锁定脚本和解锁脚本格式固定,能方便各类钱包集成。比特币网络中的绝大多数交易都是(郭达付款给蔡明)这样的形式,本文将以 P2PKH 交易为例,详细介绍交易签名的细节。