主页 > 怎么退出imtoken钱包 > 比特币脚本简介

比特币脚本简介

怎么退出imtoken钱包 2023-01-18 18:14:02

目前还不清楚的交易所推荐: 1、欧洲和意大利全球第二大交易所OKX邀请链接:币种多,交易量大! 国际邀请链接:注册简单,交易无需实名,新用户可开立合约,多币种,交易量大! 2、老牌交易所Biter现更名为芝麻开门:网页使用邮箱注册(支持QQ邮箱)。 注册成功后,需在网页完成手机号绑定。 大陆号码输入+086,实名认证。 初级+高级推荐APP端实名认证,上传更方便。 也可以在网页上进行实名认证。 全球最大交易所Binance,国区邀请链接: ?Binance支持多币种,交易安全! 如果不能注册IP地址,就用香港,选择香港作为居住地,使用和之前一样的认证。 推荐使用 gmail、outlook 等邮箱。 TraderWagon币安订单:币安订单邀请码:zoh4gfu

介绍

比特币有时也被称为可编程货币。它的数字性质允许用户在设置资金使用方式方面有很大的灵活性

在讨论比特币时,我们指的是钱包和代币。 但我们也可以将钱包视为钥匙,将代币视为支票,将区块链视为一排排上锁的保险箱。 每个保险箱都有一个细槽,这样任何人都可以存入支票或查看保险箱中有多少价值。 但是,只有钥匙持有人才能打开保险箱。

如果钥匙持有人想把钱给别人,保险箱就会被打开。 他们根据旧支票写了一张新支票(旧支票随后被销毁)并将其重新锁在收款人可以打开的盒子里。 为了花钱,新的收款人需要重复这个过程。

在本文中,我们将更深入地了解脚本,一种由比特币网络上的节点解释的编程语言。 该脚本管理上述保险箱的锁定/解锁机制。

比特币是如何运作的?

用上面的类比,可以说每笔交易都有两部分——钥匙(用来开保险箱)和锁。 您需要一把钥匙来打开装有要发送的支票的盒子,然后将新的支票添加到具有不同锁的新盒子中。 要花掉新箱子里的钱,您需要另一把钥匙。

就这么简单。 系统中的锁类型可能有所不同。 有的保险箱需要你提供多把钥匙,有的需要你证明你知道某个组合,还有很多可以设置的条件。

我们的密钥就是我们所说的 scriptSig,而锁就是我们所说的 scriptPubKey。 如果我们更详细地查看这些组件,我们会发现它们实际上由数据位和代码块组成。 结合起来,它们就形成了一个小程序。

当你进行交易时,你正在将该组合广播到网络。 每个收到这个交易的节点都会检查这个程序,这个程序会告诉节点这个交易是否有效。 如果无效,交易将被丢弃,您将无法使用锁定的资金。

您持有的支票(代币)称为未花费的交易输出(UTXO)。 只要提供与锁匹配的密钥,任何人都可以访问这些资金。 具体来说,钥匙是scriptSig,锁是scriptPubKey。

如果 UTXO 在你的钱包中,它们可能有一个条件,即只有那些能够证明拥有该公钥的人才能解锁这些资金。 要解锁资金,您需要使用映射到 scriptPubKey 中指定的公钥的私钥提供包含数字签名的 scriptSig。 一切都会很快明朗。

了解比特币堆栈

脚本是一种基于堆栈的语言。 这意味着当我们阅读一组指令时,我们将它们放在被认为是垂直的列中。 例如,列表 A、B、C 将产生一个堆栈,其中 A 在底部,C 在顶部。 当一条指令告诉我们做某事时,我们就开始从栈顶开始操作一个或多个元素。

3c4adf106d424fbbb2cf53ec3cb6ab55

添加元素 A、B 和 C,并从堆栈中“弹出”。

我们可以区分数据(例如签名、哈希和公钥)和指令(或操作码)。 该指令删除数据并对其进行处理。 这是一个非常简单的脚本示例:

红色部分代表数据,蓝色部分代表操作码。 我们从左到右读取,所以我们先将字符串放入堆栈。 接下来是操作码。 这个操作码在比特币中不存在,但我们假设它删除了堆栈的顶部元素 ( ) 并使用 MD5 算法对其进行哈希处理。 然后将输出添加回堆栈。 这里的输出恰好是d16fb36f0911f878998c136191af705e。

外勤会计实名认证风险_网上比特币实名认证有风险吗_比特币交易风险

真是巧合! 我们要添加的下一个元素是,所以现在我们的堆栈有两个相同的元素。 最后,将两个元素弹出到顶部并检查它们是否相等。 如果相等,则将其添加到堆栈中。 如果不相等,则将其添加到堆栈中。

我们已经到达指令列表的末尾。 我们的脚本可能以两种方式失败——如果剩余元素为零,或者如果不满足某些条件,其中一个运算符将导致它失败。 在此示例中,我们没有任何此类运算符并以非零元素 () 结尾,因此我们的脚本是有效的。 这些规则也适用于真实的比特币交易。

上面的例子只是一个虚构的程序。 现在让我们看一些实际的例子。

支付公钥 (P2PK)

支付公钥(P2PK)非常简单。 它旨在将资金锁定到特定的公钥。 如果你想通过这种方式接收资金,你需要向发件人提供你的公钥,而不是你的比特币地址。

中本聪和哈尔芬尼在 2009 年的第一笔交易是 P2PK 交易。 这种结构在比特币的早期被大量使用,但今天,payment-to-public-key-hash (P2PKH) 已经在很大程度上取代了它。

P2PK交易的锁定脚本如下

OP_CHECKSIG 的格式。 就这么简单。 您可能已经猜到了,OP_CHECKSIG 根据提供的公钥检查签名。 因此,我们的 scriptSig 将是一个简单的。 请记住网上比特币实名认证有风险吗,scriptSig 是锁的钥匙。

98ae2493135f4e9298d6416ba0b3cced

没有比这更容易的了。 签名被添加到堆栈,然后是公钥。 OP_CHECKSIG 弹出签名和公钥,并根据公钥验证签名。 如果它们匹配,则添加到堆栈中。 否则添加。

由于我们将在下一节中详细说明的原因,实际上不再使用 P2PK。

支付公钥哈希 (P2PKH)

Pay-to-Pubkey-Hash (P2PKH) 现在是最常见的交易类型。 除非你特意下载过时的软件,否则你的钱包可能会默认接受此交易。

P2PKH的scriptPubKey如下:

OP_DUP OP_HASH160

OP_EQUALVERIFY OP_CHECKSIG

在介绍scriptSig之前,我们先分析一下新的opcode做了什么:

网上比特币实名认证有风险吗_比特币交易风险_外勤会计实名认证风险

OP_DUP

OP_DUP 弹出第一个元素,并复制这个元素。 然后它同时将两者添加回堆栈。 通常,这样做是为了在不影响原始元素的情况下对副本进行操作。

OP_HASH160

这将弹出第一个元素,并将其散列两次。 第一轮将使用 SHA-256 算法进行哈希处理。 随后使用 RIPEMD-160 算法对 SHA-256 输出进行哈希处理。 结果输出被添加回堆栈。

OP_EQUALVERIFY

OP_EQUALVERIFY 是另外两个运算符 OP_EQUAL 和 OP_VERIFY 的组合。 OP_EQUAL 弹出两个元素并检查它们是否相等。 如果相同则加1入栈。 如果不是,则添加 0。 OP_VERIFY 弹出顶部元素并检查它是否为 True(是或不是 0)。 如果不是,则交易失败。 综上所述,如果前两个元素不匹配,OP_EQUALVERIFY 会导致事务失败。

这一次,scriptSig 看起来像这样:

您需要提供签名以及相应的公钥才能解锁 P2PKH 输出。

07ee63722f5541b689604cd222d200b2

您可以通过上面的 GIF 了解更多信息。 它与 P2PK 脚本没有太大区别。 我们刚刚添加了一个额外的步骤来检查公钥是否与脚本中的哈希匹配。

但是,有一个警告。 在 P2PKH 锁定脚本中,公钥是不可见的——我们只能看到它的哈希值。 如果我们去区块链浏览器查看尚未花费的 P2PKH 输出网上比特币实名认证有风险吗,我们将无法确定其公钥。 只有当收款人决定转移资金时才会披露。

这有几个优点。 首先是公钥散列比完整的公钥更容易传递。 正是出于这个原因,中本聪在 2009 年引入了公钥哈希。公钥哈希就是我们现在所知道的比特币地址。

第二个好处是公钥哈希可以为量子计算提供额外的安全层。 因为我们的公钥只有在我们花掉资金后才知道,所以其他人更难计算出私钥。 他们必须反转两轮哈希(RIPEMD-160 和 SHA-256)才能获得私钥。

➟想要开启加密货币之旅? 立即前往币安购买比特币!

支付给脚本哈希 (P2SH)

Pay-to-Script Hash (P2SH) 是比特币的一个非常有趣的发展。 它允许发件人将资金锁定到脚本的哈希值——而无需知道脚本实际做了什么。 以下面的 SHA-256 哈希为例:

e145fe9ed5c23aa71fdb443de00c7d9b4a69f8a27a2e4fbb1fe1d0dbfb6583f1

网上比特币实名认证有风险吗_外勤会计实名认证风险_比特币交易风险

您无需知道哈希的输入即可锁定资金。 但是,花费资金的人需要提供用于哈希的脚本,并且需要满足该脚本的条件。

上面的哈希是由以下脚本创建的:

如果你想花费绑定到这个 scriptPubKey 的代币,你不仅要提供这些命令。 对于已完成的脚本,您还需要一个 scriptSig,它的计算结果为 True。 在此示例中,这是您要从中获取结果的元素。 当然,这意味着我们的脚本只是 .

实际情况下,P2SH输出的scriptPubKey为:

OP_HASH160OP_EQUAL

这里没有新的运营商。 但是,我们确实有一个新元素。 顾名思义,这是我们需要提供用于赎回资金的金额的脚本哈希(称之为 redeemScript)。 scriptSig 会根据 redeemScript 中的内容而改变。 不过,通常情况下,您会发现它是签名和附加公钥的某种组合,后跟(强制性)redeemScript:

我们的计算与目前看到的堆栈执行略有不同。 它分为两部分。 第一部分只是检查您是否提供了正确的散列。

3d9e9a62cd6b4f97aef1d82947b35909

您会注意到我们没有对 redeemScript 之前的元素做任何事情。 此时不会使用它们。 我们已经到了这个小程序的结尾,顶部元素是非零的。 也就是说,它有效。

但我们还没有完成。 网络节点将此结构识别为 P2SH,因此它们实际上已使 scriptSig 的元素在另一个堆栈中等待。 这就是签名和公钥发挥作用的地方。

到目前为止,我们已经将 redeemScript 视为一个元素。 但是现在,它被解释为一条指令,可以是任何东西。我们以P2PKH锁定脚本为例,我们必须为其提供

匹配和

>。

7ff796955cd5403ca5b00d4c61f91e9f

扩展 redeemScript 后,看看我们的情况与常规 P2PKH 交易有何相似之处。 之后,你只需要像普通程序一样运行它。

我们已经演示了所谓的 P2SH (P2PKH) 脚本,但您不太可能在野外找到此类脚本。 没有什么能阻止你制作一个,但它不会给你带来任何好处,它最终会占用更多的块空间(因此成本更高)。

P2SH 通常适用于多重签名或 SegWit 兼容交易。 多重签名交易可能非常大,因为它们需要多个密钥。 在实施支付脚本散列之前,发件人必须在其锁定脚本中列出所有可能的公钥。

网上比特币实名认证有风险吗_外勤会计实名认证风险_比特币交易风险

但是对于P2SH来说,再复杂的消费条件也是没有效果的。 redeemScript 的哈希总是固定大小。 因此,成本转移到了想要解锁锁定脚本的用户身上。

SegWit 兼容性是 P2SH 可以派上用场的另一个例子(我们将在下一节中更详细地讨论交易结构的差异)。 SegWit 是一种软分叉,可导致区块/交易格式发生变化。 由于这是可选升级,并非所有钱包软件都能识别这些更改。

如果客户端在 P2SH 中散列 SegWit 脚本,则这无关紧要。 与所有此类交易一样,他们不需要知道解锁 redeemScript 是什么。

SegWit 交易(P2WPKH 和 P2WSH)

如需更全面地介绍 SegWit,请参阅隔离见证初学者教程。

要了解 SegWit 中的交易格式,您需要知道的是我们不再只有 scriptSig 和 scriptPubKey。 现在,我们还有一个新的领域叫做“witness”。 我们之前保存在 scriptSig 中的数据被移动到 witness,所以 scriptSig 是空的。

如果你曾经遇到过以“bc1”开头的地址,那么这些就是我们所说的 SegWit native(不兼容 SegWit,因为它们是 P2SH 地址,所以它们以“3”开头)。

支付见证公钥哈希(P2PKH)

Pay-to-Witness Public Key Hash (P2PKH) 是 P2PKH 的 SegWit 版本。 我们的见证如下:

您会注意到这与 P2PKH 中的 scriptSig 相同。 在这里,scriptSig 是空的。 同时,scriptPubKey类似如下:

这看起来很奇怪,对吧? 让我们比较签名、公钥和它们的哈希值的操作码在哪里?

我们在这里不展示额外的运营商,因为接收交易的节点是基于

长度知道如何处理它。 他们计算长度并理解它必须以与传统 P2PKH 交易相同的方式运行。

未升级的节点不知道如何以这种方式解释交易,但这并不重要。 根据旧规则,没有见证人,所以他们读取一个空的 scriptSig 和一些数据。 他们对其进行评估并将其标记为有效——从他们的角度来看,任何人都可以使用输出。 这就是 SegWit 被认为是向后兼容的软分叉的原因。

支付公钥哈希 (P2PKH)

Pay to Public Key Hash (P2PKH) 是新的 P2SH。 如果你已经走到这一步,你可能会弄清楚它是如何工作的,但我们还是会过一遍。 我们的见证就是我们通常放在 scriptSig 中的东西。 例如,在包装 P2PKH 交易的 P2WSH 中,它可能看起来像这样:

这是我们的 scriptPubKey:

外勤会计实名认证风险_网上比特币实名认证有风险吗_比特币交易风险

同样的规则也适用于此。 SegWit 节点读取脚本哈希的长度并确定它是 P2WSH 输出,其评估方式与 P2SH 类似。 同时,旧节点将其视为任何人都可以花费的输出。

总结

在本文中,我们了解了比特币的构建块。 让我们快速总结一下:

脚本类型说明

支付公钥 (P2PK)

将资金锁定到特定的公钥

支付公钥哈希 (P2PKH)

将资金锁定到特定的公钥哈希(即地址)

支付给脚本哈希 (P2SH)

将资金锁定到收款人可以提供的脚本哈希

支付见证公钥哈希(P2PKH)

隔离见证版本的 P2PK

支付公钥哈希 (P2PKH)

P2SH 的 SegWit 版本

一旦你深入研究了比特币,你就会开始理解为什么它有如此大的潜力。 一个交易可能有几个不同的组成部分。 通过操纵这些构建块,用户可以非常灵活地设置资金使用方式和时间的条件。

Binance下单邀请码:zoh4gfuTraderWagon Binance下单:全球最大交易所Binance,国区邀请链接:? 币安支持多币种,交易安全! 如果不能注册IP地址,就用香港,选择香港作为居住地,使用和之前一样的认证。 推荐使用 gmail、outlook 等邮箱。

目前还不清楚的交易所推荐: 1、欧洲和意大利全球第二大交易所OKX邀请链接:币种多,交易量大! 国际邀请链接:注册简单,交易无需实名,新用户可开立合约,多币种,交易量大! 2、老牌交易所Biter现更名为芝麻开门:网页使用邮箱注册(支持QQ邮箱)。 注册成功后,需在网页完成手机号绑定。 大陆号码输入+086,实名认证。 初级+高级推荐APP端实名认证,上传更方便。 也可以在网页上进行实名认证。

火币所有用户现已开通,但需要重新注册火币账号:

全球最大交易所币安邀请国家和地区链接:支持86个手机号,网页直接注册。

相关文章