通常比特币都是以虚拟货币的概念出现在大众眼前,实际上比特币是第一个真正的区块链“平台”,利用它去中心化、不可篡改、可追溯等特点不光可以实现多种交易模式(如点对点交易、多重签名交易等),还可以实现虚拟货币以外的其他功能(如数据染色等,这些功能内容不是本节讨论范畴)。

那比特币究竟是如何实现多种多样的功能的呢?

最重要的原因是比特币的交易过程是非静态的,而是通过锁定脚本(locking script)与解锁脚本(unlocking script)实现动态的交易过程。今天我们主要来探寻比特币在普通交易中锁定脚本与解锁脚本是如何发挥作用的。

首先,我们先了解比特币交易脚本的特性:

1.图灵非完备

比特币交易脚本故意使用一种图灵非完备的语言,没有循环或复杂流程控制,减少了灵活性,但极大的提高了安全性。

2.无状态验证

比特币交易脚本是无状态的,所以一个脚本能在任何系统上以相同的方式执行,如果你的系统验证了一个脚本,可以确信的是每一个比特币网络中的其他系统也将验证这个脚本,这意味着一个有效的交易对每个人而言都是有效的,而且每一个人都知道这一点。

3.基于堆栈的语言

堆栈语言极其简单,也增强了比特币的安全性。

比特币交易P2PKH(Pay-to-Public-Key-Hash)解锁过程示例

比特币最基本的交易类型为P2PKH,顾名思义交易付款的对象是公钥哈希

解锁脚本:<Sig> <PubKey>

解锁脚本是由签名与公钥组成,这就保证了必须拥有私钥的用户才能对某一笔交易进行解锁。

锁定脚本:OP_DUP OP_HASH160 <PubkeyHash> OP_EQUALVERIFY OP_CHECKSIG

锁定脚本是由一连串堆栈命令和公钥哈希组成,公钥哈希即RIPEMD160(SHA256(公钥)),大小20字节;由第二节的知识可知比特币地址实际是由该公钥Hash进行Base58check编码而来,所以必须拥有该地址的私钥才能将锁定脚本解锁。

下面演示解锁脚本如何解锁锁定脚本

从上图可知,比特币将解锁脚本与锁定脚本拼接后,使用堆栈语言按后进先出的顺序执行,最后完成CHECK,如果返回结果为TRUE,代表解锁成功,用户可以使用该笔输出作为新交易的输入进行交易。如果返回为FALSE或者执行过程中出现问题,则花费这笔输出的请求被拒绝。

作者:Aaron

深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)的更多相关文章

  1. 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本

    P2SH(pay-to-script-hash)多重签名的脚本 P2SH是多重签名的一种应用形式.在P2SH的交易中,多了一个Redeem Script的概念,称为赎回脚本.当向P2SH脚本的地址转账 ...

  2. 比特币中P2PKH(pay-to-public-key-hash)的锁定脚本和解锁脚本

    脚本格式 P2PKH的锁定脚本为: OP_DUP OP_HASH160 PUSHDATA(<Cafe Public Key Hash>) OP_EQUALVERIFY OP_CHECKSI ...

  3. 深入比特币原理(三)——交易的输入(input)与输出(output)

    本节内容非常重要,如果你不能很好的掌握本节内容,你无法真正理解比特币的运行原理,请务必要学习清楚. 比特币的交易模型为UTXO(unspend transaction output),即只记录未花费的 ...

  4. RMAN_学习笔记5_RMAN Catalog Script恢复目录脚本

    2014-12-24 Created By BaoXinjian

  5. 比特币解锁脚本中的ScriptSignature都包含了什么东西

    比特币 解锁脚本signature script 包含了那些东西? 使用 UTXO 需要私钥签名,私钥到底都签了什么东西呢?一直比较好奇. 比特币的私钥签名总共有五中类型,具体见 btcd 代码,如下 ...

  6. [转]Script标签和脚本执行顺序

    Script标签和脚本执行顺序 这里详细聊聊和script标签相关的脚本执行顺序. Script标签的默认行为 几个首要特性: script标签(不带defer或async属性)的会阻止文档渲染.相关 ...

  7. XFS: Cross Frame Script (跨框架脚本) 攻击。

    一.Cross Frame Script (跨框架脚本) 攻击什么是Cross Frame Script?很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开 ...

  8. Cross Frame Script (跨框架脚本) 攻击

    一.Cross Frame Script (跨框架脚本) 攻击 什么是Cross Frame Script? 很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器 ...

  9. Unity脚本引用原理,修复Unity脚本引用丢失,源码脚本与dll中的脚本引用互换 .

    http://blog.csdn.net/gz_huangzl/article/details/52486509 前言 在我们开发游戏的过程中,经常会碰到脚本引用丢失的情况,但是怎么把它们修复到我们的 ...

随机推荐

  1. Project Euler 56: Powerful digit sum

    一个古戈尔也就是\(10^{100}\)是一个天文数字,一后面跟着一百个零.\(100^{100}\)更是难以想像的大,一后面跟着两百个零.但是尽管这个数字很大,它们各位数字的和却只等于一.考虑两个自 ...

  2. JS面试题-<变量和类型>-JavaScript浅拷贝与深拷贝

    前言 最开始了解到深浅拷贝是因为准备面试,但那个时候因为在学校做的项目比较少需求也比较简单,所以没有在项目中遇到这类问题,所以对这个问题就属于知道这个知识点,看过相关内容,却没有自己的总结,也没有深入 ...

  3. 每天3分钟操作系统修炼秘籍(13):两个缓冲空间Kernel Buffer和IO Buffer

    两个缓冲空间:kernel buffer和io buffer 先看一张图,稍后将围绕这张图展开描述.图中的fd table.open file table以及两个inode table都可以不用理解, ...

  4. maven的项目结构

    1.标准目录结构: src -main       –bin 脚本库       –java java源代码文件       –resources 资源库,会自动复制到classes目录里       ...

  5. C# II: Class ViewModelBase and RelayCommand in MVVM

    好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...

  6. C++中对C的扩展学习新增语法——For循环以及AUTO类型

    For循环以及AUTO类型 For代码实现: AUTO类型: 1.auto自动类型推导,省事. 2.auto主要在模板中用的多,模板的类型比较长,使用auto可以简化代码. 3.不要轻易使用,我们在编 ...

  7. 设置Ubuntu下vim缩进为4个空格

    输入命令编辑vim配置文件: sudo vim /etc/vim/vimrc 文件中添加如下: 保存退出即可

  8. lqb 基础练习 数列排序 (sort的使用)

    基础练习 数列排序 时间限制:1.0s   内存限制:512.0MB     问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整 ...

  9. Linux入门之安装及相关知识。

    一.VMware虚拟机安装与使用 1.1.VMware 简介 VMware是一个虚拟PC的软件,可以在现有的操 作系统上虚拟出一个新的硬件环境,相当于模拟 出一台新的PC.以此来实现在一台机器上真正 ...

  10. 力扣(LeetCode)移除链表元素 个人题解

    删除链表中等于给定值 val 的所有节点. 这题粗看并不困难,链表的特性让移除元素特别轻松,只用遇到和val相同的就跳过,将指针指向下一个,以此类推. 但是,一个比较麻烦的问题是,当链表所有元素都和v ...