分类
外汇平台

3種最常見的比特幣交易方式

Sorry, this is not allowed.

Thank you for visiting our website, unfortunately our website protection system has detected an issue with your IP 3種最常見的比特幣交易方式 address and wont let you proceed any further.

If you 3種最常見的比特幣交易方式 feel this is an error, please submit a support request. Thank you for your patience.

是谁控制了比特币,是你?还是钱包?——BTC地址与交易原理大剖析

为了便于理解,我们可以把比特币区块链上的资产交易比喻成 将资产锁进保险箱,只有持有保险箱钥匙的人(即收款人)才能拿出保险箱中的资产进行交易。举个例子,如果 Alice 要向 Bob 支付一笔资产,Alice 将这笔资产锁进一个保险箱中,只有 Bob 才有这个保险箱的钥匙,即只有Bob才能取出这笔资产。如果 Bob 要取出资产,那么要求 Bob 必须同时花掉这笔资产(即锁入另一个保险箱)。在 Bob 没有取出资产前,资产并不真正属于 Bob。设想如果 Bob 丢了钥匙,那么将无法再取出资产。 换句话说,这笔资产还在保险箱中保存的时候,既不属于Alice,也不完全属于Bob。当然,Alice 也可以把资产放入任何人都可以打开的保险箱中,这也被称之为 Anyone-Can-Spend 交易。

• 若收款人为 1-地址,我们称保险箱为1-类保险箱 。而相应的钥匙必须是指定收款地址对应的私钥。解锁保险箱的过程也就是验证 1-地址公钥以及公钥对应的数字签名,这也是我们通常所理解的向普通账户地址转账的验证过程。

• 若收款人为 3-地址,我们称为3-类保险箱 。开启钥匙必须为一段可以执行的比特币脚本。解锁保险箱的过程是:比特币脚本的Hash值对应到 3-地址 ,同时比特币脚本执行器运行该脚本后成功返回。也就是说只有拥有脚本原文并可以成功执行的人才可以提取这个保险箱里的资产。

通过上面的解释,我们可知:当 pywallet 开源库误将 1-地址 识别为 3-地址 时,就好像将原本的1-类保险箱 改造成了3-类保险箱,而账户持有者还是拿着 1-类保险箱 的钥匙去解锁,那么自然无法打开保险箱。那么之前 zer0to0ne 发现的被误锁住的 OmniLayer 数字资产是否能恢复?

是否存在一种可能性,采用 1-地址 的钥匙去开启 3-保险箱 ?

zer0to0ne 接着向我们详细解释了两个重要概念 P2PKH(Pay to Public Key Hash) 与 P2SH (Pay to Hash)的来龙去脉。这两个名词分别代表了两种不同的比特币交易类型。

下面是 zer0to0ne 的精彩技术细节分析

P2PKH——中本聪的伟大发明

Pay to Public Key Hash 3種最常見的比特幣交易方式 顾名思义,是将比特币放入一个保险箱,钥匙孔为公钥 Hash(Public Key Hash)。我们最常见到的 1-地址 3種最常見的比特幣交易方式 本质上就是 Public Key Hash 的一种编码。1-地址 的生成过程也很简单,将公钥经过Hash160运算得到 Public Key Hash,在 Public Key Hash 头部补上前缀 0x00,Hash 尾部补上校验和,经过Base58便得到了1开头的比特币地址。

付款方 Alice 在构造保险箱的时候需要设置一个锁定脚本:

OP_DUP OP_HASH160 (Bob收款地址蕴含的Public Key Hash) OP_EQUALVERIFY OP_CHECKSIG

注:我们可以把这一步理解为 Alice 为 Bob 定制了一个保险箱,把比特币放入保险箱并用 Bob 的公钥 PubKey Hash上锁。现在这把锁除了持有私钥的 Bob,谁都无法打开。

当 Bob 需要花费 Alice 3種最常見的比特幣交易方式 给他的比特币时,需要提供必要的参数:交易签名 + 公钥(技术黑话:Sig)来开启保险箱,使得锁定脚本执行后返回 True,这一步通常由钱包自动完成。

我们来看看比特币节点是如何校验 Sig 合法性的。

脚本执行过程如图所示,Bob将交易签名后得到的数据(实际上还要包含数据长度信息),真正的Sig 应该为 ,比特币脚本执行器从 PUSH 数据开始,PUSH 操作会读取第一个字节获取将要入栈的数据长度信息,然后持续执行比特币脚本,直到最后执行完毕检查执行结果。

首先入栈的是 ,然后将 入栈,一次DUP操作将在栈顶复制一份 ,HASH160弹出栈顶的 并计算Hash,将结果压回栈中,之后使用 EQUALVERIFY 弹出Hash对比是否合相等,如果相等则返回True,不相等便标记交易为无效。执行到这一步,暴露了公钥,确保了签名者的身份的正确性,但是黑客或矿工可以通过暴露的公钥构造出一个新的交易替换原始交易,无法保证安全,那么便需要下一步来保证交易无法伪造。此时栈上还有 和 ,执行 CHECKSIG,将校验数字签名的正确性,确保了签名者拥有地址对应的私钥。

再解释一遍:当 Bob 要花费 Alice 给他的比特币时,Bob 只有用正确的钥匙才能打开 Alice 留给他的保险箱,把钱放入 Bob 新构造的一个保险箱里。

这时候一些聪明的读者会注意到一个细节:如果 Bob 取出钥匙,在还未打开保险箱的时刻,区块链上的任何矿工都能看得见这把钥匙的形状,理论上他们是可以立即复制一把钥匙,把 Alice 留给 Bob 的保险箱打开并花掉(俗称 Front-running 攻击)。真的可以这样做吗?显然中本聪考虑了这个问题,这把钥匙中的交易签名是 Bob 发起的交易的完整签名。假设 Bob 要将 Alice 构造的保险箱中的比特币 装入一个新的保险箱(留给Charlie),这时候 Bob 3種最常見的比特幣交易方式 出示的钥匙包含了 Charlie 的公钥Hash,矿工虽然可以复制 Bob 的钥匙,但是这把钥匙已经隐藏了下一个新保险箱的关键信息,因此矿工无法使用这个复制钥匙来完成别的动作(无法挪用数字签名)。

P2SH——后中本聪时代的重大创新

例如我们可以构造一个用 Hash 原象(Pre-image)来解锁交易的脚本:

我们继续通过保险箱的例子来解释,并给这类保险箱起名为 3-类保险箱。现在 Alice 给 Bob 的比特币锁定在一个由上述 Hash160保护的保险箱里,我们姑且称之为哈希锁吧。

这把锁依然需要正确的形状才能开启,但是安全性却弱很多,缺少数字签名机制导致钥匙隐藏的关键信息不会随着Bob 新建的保险箱而变化。任何矿工都能在 Bob 3種最常見的比特幣交易方式 亮出钥匙的一瞬间复制出一摸一样的钥匙,抢着去开Alice留给Bob的保险箱(Front-running),将币转给另一个人 Eve,于是原本属于 Bob 的比特币会被洗劫一空。

1. 交易构造的输出足够短,意味着比特币节点维护的 UTXO 缓存占用空间将会大大减小

2. Pre-image 总是在交易被花费时作为 input 3種最常見的比特幣交易方式 来引用,不会在交易的 output 侧出现,UTXO依然保持精简,同时可以把手续费负担转嫁给接收方。

比特币中常用的交易类型(Transaction Types)

jason_cuijiahui 于 2018-04-02 10:56:57 发布 2912 收藏

版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

Bitcoin的Script

比特币中常用的交易类型

P2PKH – Pay to Public Key Hash

This is the most common type of transaction. To gain access to its outputs, the recipient needs to prove that he can sign a message with the private key (S) which corresponds to public key (P) that hashes to H.

To create a transaction, the payer needs to know the recipient’s address. P2PKH addresses are the Base58Check encoding of version number 0, a hash of the recipient’s public key (H), and a checksum. Due to the way they are constructed,

all P2PKH addresses start with the character “1” .
Example: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2

P2PK – Pay to Public Key

With this transaction type, the public key itself is stored in the locking script,
rather than a public-key-hash.

OP_RETURN – Data Output

P2SH – Pay to Script Hash

To gain access to outputs sent via P2SH, the recipient must provide a script which matches the given hash and data which makes that script evaluate to True. This allows the recipient to implement various unusual security schemes.

For example, one can thus send bitcoins to 3種最常見的比特幣交易方式 multi-signature addresses, which require the signatures of multiple people to spend the outputs.

P2SH addresses are the Base58Check encoding of version number 5, a hash
of the recipient’s public key (H), and a checksum. Due to the way they are constructed,

all P2SH addresses start with the character “3” .
Example: 3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX

香港对数字代币和加密货币交易所严加管制

证监会于2018年3月19日发布最新公告,宣布已对一家名为Black Cell Technology Limited(以下简称“Black Cell”)的公司采取监管行动。Black Cell曾在其网站上宣传KROPS数字代币,指出会利用收益来开发一项移动应用程序,而该网站一般开放予香港公众人士浏览。经证监会调查后,因应证监会关注到Black Cell可能曾进行未获认可的推销活动及无牌进行受规管活动,Black Cell同意停止出售KROPS代币,并取消先前与香港投资者进行的所有代币交易。此外,Black Cell也在其网站设置以下弹出信息:“此项代币销售不适用于美国公民(和/或美国居民)、香港市民和不允许参与此类交易的国家的任何公民或居民。”

购买数字代币之前需要考虑的问题

1. 发行的是“功能型代币”还是投资代币?抑或是两者的组合?
2. 发行行为是否符合当地法律法规?
3. 发行目的是什么?尤其是,发行人会将募得的资金用于何种用途?
4. 代币是否在交易所合法交易?
5. 交易所是否依照当地法律合法运营?
6. 代币交易是否公开透明?
7. 代币的安全性如何?是否存在黑客入侵风险?

三项重要总结

1. 数字货币引发的兴趣日益高涨,2017年代币发行集资额超过50亿美元这一事实就充分证明了这一点。
2. 其中的风险在于,在个别国家的监管制度下,数字代币会被视为受监管的投资项目或者证券,甚至是加密货币。
3. 数字代币的监管力度正在不断加强,香港证监会表示不会姑息任何违反香港证券法律的行为。