• Bitcoin交易及验证


    UTXO 理解

    未花费交易输出: Unspent Transxtion output

    • UTXO---用比特币拥有者的公钥锁定(加密)的一个数字
    • UTXO == 比特币
    • 比特币系统里没有必有比特币,只有UTXO
    • 比特币系统没有账户, 只有UTXO(公钥锁定)
    • 比特币系统里没有账户余额,只有UTXO(账户月只是比特币钱包的概念)
    • UTXO存在全节点的数据库里
    • 转账将消耗掉属于自己的UTXO,同时生成新的UTXO,并用接收者的公钥锁定。
    • 比特币系统没有账户概念。

    交易的结构

    • 交易的输出(UTXO)
      • 锁定的比特币数量
      • 锁定的脚本(用接收者的公钥哈希)
    • 交易的输入(UTXO+解锁脚本)
      • 解锁(自己的私钥)脚本(用发送者签名,接收者的公钥hash)

    交易的确认

    交易的确认必须放在区块链上才算完成

    交易验证

    基于栈的脚本语言

    • 栈(stack)- 操作数据的一种结构

      • 只能从一端操作数据,后进新出LIFO(Last In, First Out)
      • 如同子弹匣,先压入的子弹最后打出
      • 压栈(PUSH),出栈(POP
    • 验证交易- 基于栈的脚本语言

      • 对栈的操作: OP_DUP ---

      • 逻辑运算符:OP_EQUALVERIFY

      • 加解密运算符:

        • OP_HASH160
        • OP_CHECKSIG
      • 算数运算符:

        • OP_ADD--- 加
        • 0P_SUB--- 减
        • OP_MUL--- 乘
        • OP_DIV--- 除

    逆波兰表示法

    • 简易运算规则:
      • 所有造作符号位于操作数的后面
      • 遇到操作数(数字),则压栈(PUSH)
      • Y遇到二元运算符(+,-, x ,/ )
        • 先将2个操作数出栈pop
        • 然后对运算数进行计算
        • 最后将计算结构压栈
    • 传统表达式(中缀表示法): (1+2)*3 == 9
    • 逆波兰表示法(后缀表示法):1 2 + 3 * 9 ==

    使用逆波兰表示法验证交易

    • 锁定脚本

      • OP_DUP OP_HASH160<发送者公钥哈希> OP_EQUALVERIFY OP_CHECKSIG
    • 解锁脚本

      • <发送者的签名><发送者公钥>
    • 交易验证:

      • 签名 公钥 DUP HASH 公钥哈希 == 验证签名
      • 运行解锁脚本 + 锁定脚本 => True

      过程如下(逆波兰表示法):

      • a. 发送者签名发送者公钥 进行压栈(保护在解锁脚本正)

      • b. DUP --将公钥copy到栈顶

      • c. HASH 运算符,只需要一个数,将公钥POP出去进行hash算法,生成一个公钥hash

      • d. 将新生成的公钥哈希 压栈

      • e. 将锁定脚本(UTXO)中的公钥哈希压栈;

      • f. OP_EQUALVERIFY---遇到 ==操作符,将栈中两个公钥哈希比较,为True的话,栈中的两个哈希公钥会废除掉,继续进行压栈操作

      • g. 验证签名(OP_CHECKSI)--POP出栈中的发送者签名发送者公钥,使用公钥验证签名,如果通过,则UTXO可以使用

  • 相关阅读:
    Extjs4 MVC Controller中refs使用
    Mac下下载android4.2源码,进行源码调试
    来博客园一年三个月
    今天写的比较多
    Extjs4 MVC 添加view层
    mac自带vim7配置
    动态测试及调试工具
    等价类划分的延伸
    用javascript进行测试用例的验证
    同行评审在软件测试中的应用
  • 原文地址:https://www.cnblogs.com/failymao/p/9788769.html
Copyright © 2020-2023  润新知