比特币提供了世界上第一种智能合约编程语言。脚本称为这种语言,它使用户可以编码可以使用硬币的不同条件。但是,尽管这是一个革命性的概念,但使用起来并不容易,尤其是对于更复杂的支出条件而言。编写复杂的合同以及验证合同是否按预期进行都容易发生人为错误。但是,尤其是在资金紧张的情况下,正确解释条件至关重要. 在过去的一年中,区块链工程师Andrew Poelstra,Pieter Wuille和Sanket Kanjalkar着手改善这一点。通过将Script精简为基本要素,他们的“新”编程语言-“文字稿” —消除了复杂性,应该使参与其中的每个人都可以更轻松,更安全地进行比特币编程. “从理论上讲,Miniscript比脚本更具限制性,” Blockstream研究总监兼Miniscript联合设计师Andrew Poelstra告诉《比特币杂志》。 “但是它可以完成人们实际使用脚本的所有工作。” 脚本 让我们从头开始. 每个比特币交易都包括两个主要部分:输入和输出,这两个部分都由代码段组成。输入“解锁”硬币,输出再次“锁定”硬币,指定在何种条件下可以在后续交易输入中将其解锁。此类要求通常包括有效的密码签名,但还有更多的可能性。例如,在花费硬币之前可能已经经过了一定的时间,或者必须包含特定的秘密号码. 交易中的此代码是使用Script创建的,Script是专门为比特币设计的编程语言。脚本的灵感来自于Forth,这是一种1960年代发明的编程语言,最初是为操作射电望远镜而设计的。脚本进行了调整,但是使其更适合比特币. 例如,脚本没有使“循环”产生的操作码(指令):该语言不支持无限制次数地执行相同的计算。在比特币中,无需执行无数次相同的计算,因为比特币节点实际上并不计算交易,而是验证交易。 (有关为何会出现这种情况的更多技术说明,请参见 这个帖子 由Blockstream工程师Russell O’Connor设计。) 脚本也是“未键入的”。这意味着可以用不同的方式来解释和使用计算结果。例如,有效签名的结果可以为“ true”,但可以将“ true”依次解释并用作数字“ 1”,然后在数学方程式中使用:“ true”加“ true”将添加最多为“ 2”,例如,如果需要最少两个有效签名,则意味着提供了足够的签名. 在本文中,这将我们带到了Script最重要的属性:很难“关于的原因.实质上,这意味着可以用多种方式来解释计算结果。例如,即使签名无效,也可以编写脚本,以使事务由于某些其他原因仍然有效. Poelstra解释说:“比特币脚本中有一些操作码确实很荒唐。” “就像,将签名解释为真/假值,在其上分支;将该布尔值转换为数字,然后索引到堆栈中,然后根据该数字重新排列堆栈。而如何做到这一点的具体规则实在是太疯狂了。” 这可能会使Script难以使用。特别是如果花费(“解锁”)硬币的要求变得更加复杂,则交易的作者可能会无意中在代码中包含某些内容,以使硬币可以在与预期不同的条件下花费。相反,交易的接收者可能没有注意到这种怪癖,而将硬币丢给了确实注意到这一点的攻击者. 问题的具体示例 这是这些问题如何限制Script有用性的具体示例. Blockstream Green钱包具有标准的“共同签名”设置。钱包用户控制两个键之一,而Blockstream控制另一个键。资金可以两种方式使用。首先,每当用户想要花费硬币时,他们就签署交易并要求Blockstream也对其进行签署。 Blockstream通常会这样做,尽管这可能需要用户通过诸如电子邮件确认之类的辅助手段来确认他们确实要进行交易。但是,Blockstream的一端可能出了点问题–也许公司消失了或丢失了密钥,或者由于其他原因而无法签名。在那种情况下,用户仍然可以使用备用解决方案来花费其比特币:在时间锁定到期后,他们可以在经过预定时间后创建有效交易。大概一个月. 这可以正常工作,但也有一定的局限性。即使他们可能想在设置结束时增加更多的灵活性,用户也无法再利用比特币的智能合约潜力. Poelstra说:“目前,Green具有适用于所有客户的固定脚本,它基本上只是一个简单的多重签名。” “但实际上,我们不应该在乎脚本说的是什么。我们关心的是:在超时之前,没有我们的签名就不可能花掉硬币吗?如果用户想与我们一起使用一些疯狂的策略,只要满足我们关心的一个条件,我们就应该能够支持它。” 例如,用户可能希望在一年过去后允许亲人去世,以防他们去世。或者,也许用户实际上是一家公司,并且它想创建一个多重签名设置,其中三分之二的董事会成员可以一起花费硬币(与Blockstream结合使用). 当前,从技术上讲,这可以通过比特币脚本实现。但是,这将需要用户设计自定义设置,而Blockstream将需要参与此自定义设置. Poelstra解释说:“但是,如果用户给我们一个任意脚本,我们就无法判断我们关心的一个条件是否得到满足,因为所有脚本行为的总和确实很复杂。” “例如,如果脚本似乎带有签名,我们需要考虑如果用户提供非签名会发生什么。可以欺骗硬币花掉吗?” 文字稿 在过去的一年中,Miniscript由Poelstra,Blockstream核心技术工程师Pieter Wuille和Blockstream实习生Sanket Kanjalkar设计。 (但是,Miniscript并不是正式的Blockstream产品。) 简而言之,Miniscript是Script的“精简版”版本:“ Script工具包”中的“工具”选项,使人们更易于使用和验证。精心选择了这些工具以启用几乎可以使用Script进行的任何操作-只有一些附带的例外情况,实际上没有人真正使用过这些例外情况。因此,尽管一行Miniscript仍然是有效的Script行,但它通过防止代码的意外(可能是意外的)结果而从本质上避免了人为错误. 以上述问题为例,使用Miniscript,用户可以轻松地设计设置,使Blockstream可以轻松检查其一个条件是否得到满足。具体来说,Blockstream可以看到,只有在签署或一个月过去之后,这笔资金才能被使用-不管用户设置的结尾是否包括其他条件,无论是额外的时间锁定,多重签名还是其他。使用Miniscript,不会有任何意外的怪癖会超越Blockstream的终结. Miniscript非常直接且可预测,实际上,设置总是可以变成决策树:设置的可视化(“图形编码”),这很容易推理. 例如,下面的可视化显示了一种设置,其中三分之二的用户需要签名才能移动硬币。作为备用选项,可以使用紧急钥匙来移动硬币,但必须经过一段时间后才能移动. 缩图的可视化 [作者注:感谢Tejaswi Nadahalli的贡献 […]
核心协议,技术
运营编辑:想学习如何为比特币做贡献?尝试“好第一期”
继续学习人们可以了解比特币技术方面的各种方式的系列文章,在本文中,我们将重点介绍比特币核心GitHub存储库中的良好先发问题。. 比特币核心被广泛认为是比特币的参考实现。尽管直到那时才使用“ Bitcoin Core”这个名字 2013年, 客户本身可以追溯到2009年中本聪(Satoshi Nakomoto)的第一个发行版。后来创建了其他比特币实现,例如libbitcoin(C ++),bcoin(Javascript)和btcd(Go)。. 认识GitHub Bitcoin Core是一个开源项目。拥有互联网连接的任何人都可以查看和下载代码和文档。比特币核心(以及许多其他软件项目)使用开源且非专有的Git版本控制系统来跟踪分布式贡献者之间代码库中的更改. Git由Linux内核的创建者Linus Torvalds开发。相反,GitHub(最近被Microsoft收购)提供专有软件,该软件围绕Git协议提供便捷的工具和社交功能。 Bitcoin Core并不依赖GitHub的持续生存,尽管如果将来突然迁移或阻止该项目使用GitHub软件会带来不便和破坏性,. 在微软收购GitHub期间, 讨论 在比特币社区和其他开源项目中,它们是否应该摆脱对GitHub的任何未来依赖。随着越来越多的贡献者和潜在贡献者的出现,这种观点变得越来越流行。 被禁止 从使用GitHub软件开始。微软也可能会先采取行动, 禁止整个项目 如果他们被认为在政治上有争议。时间将证明,在未来几年中,Bitcoin Core和其他比特币实施是否会继续利用GitHub公认的精心设计的,用户友好的功能. 寻找“良好的第一期” 这些功能之一是GitHub Issues,用于发布和跟踪错误,增强功能和请求。任何GitHub用户都可以创建问题,尽管建议他们仅在研究问题并与IRC上的现有贡献者讨论后才打开问题。您无需请求权限即可开始处理问题。但是,如果您这样做,我们鼓励您对此问题发表评论,以鼓励与其他贡献者的合作。如果需要的话,这也是一种寻求帮助的好方法. 目的 “好第一期” 标签旨在突出显示哪些问题适合于可能对代码库没有深入了解的新贡献者。优秀的第一期并不是针对软件开发初学者的。至少,您需要基本的Git熟练度,理想情况下也需要C ++和/或Python熟练度,因为Bitcoin Core代码库是用这些语言编写的. 比特币核心的良好第一期凸显了解决该问题的“有用技能”。学习C ++和/或Python做出与代码相关的贡献是个好主意,但是如果您不精通这些语言,则可以选择从对文档进行实质性改进或找到需要解决的第一问题作为开始 外壳脚本, 自动制作 或者 CMake的 经验. “错别字”与“真实”问题 有些人是通过更正变量名,注释或文档中的基本错字开始的。杰里米·鲁宾(Jeremy Rubin)有 开玩笑的 他故意将错别字留在自己的贡献中,以便新的贡献者可以找到它们并进行更正。尽管这是开始成为新贡献者的一种方法,但最好是专注于良好的先发问题,而不是为错别字提交拉取请求(PR). 好的先期问题已被突出显示为现有贡献者所缺少的,对项目具有重大价值的事物。不会设置它们来识别拼写错误,并且现有的贡献者和维护者宁愿将时间集中在审查和合并上 高优先级审查 拉取请求。 (拉动请求是由贡献者提出的更改建议,只有在维护人员经过审查并在有足够的共识后才能合并,才可以进行合并。) 因此,最好将错别字作为更实质性的拉动请求的一部分进行更正。如前所述,值得记住的是,审查现有的PR通常比提交新的PR更有价值。约翰·纽伯里(John Newbery)建议,一个好的经验法则是,对于您个人提交的每个PR,都要审查5-15个PR。在撰写本文时,大约有300个未决请求和700个未决问题需要测试和审查. 大量的实践和学习机会 Fabian Jahr是最近对Bitcoin Core的新贡献者,他发现新贡献者中经常缺乏的主要技能是足够的Git熟练程度,例如 壁球犯. 要求参与者在命令行中输入Git命令。如果您是命令行和/或Git的初学者,最好完成不受Bitcoin […]
Bitcoin Core 0.14.0发布:有什么新功能?
今天标志着Bitcoin Core 0.14.0的正式发布,Bitcoin Core 0.14.0是八年前由中本聪(Satoshi Nakamoto)推出的第十四代比特币原始软件客户端。监督者 比特币核心 首席维护者Wladimir van der Laan,这个最新的主要版本是由近100位贡献者在六个月的时间内开发的. Bitcoin Core 0.14.0具有重要的改进清单。但是,与某些以前的发行版相比,这些发行版中的大多数都涉及软件的“内部”:性能提高是在后台进行的,但对于日常用户而言可能并不十分明显。. 也就是说,这是一些更显着的变化. “ Assumevalid”块 每当新节点在网络上引导时,它就会同步整个区块链。它下载并验证曾经开采过的所有区块,并验证所有这些区块中的所有交易。不幸的是,这可能要花费一些时间。即使是新的高端笔记本电脑,通常也需要一天以上的时间才能赶上。对于较旧或较低等级的机器,它需要更长的时间. “ Assumevalid”显着加快了此过程。本质上,Bitcoin Core 0.14.0节点假定直到某个区块的所有交易都是有效的。尽管同步节点仍在验证所有块的工作量证明并记录整个交易历史,但它不再为每个单独的交易检查签名和类似数据. 关于哪个块有效的假设是可配置的。默认情况下 块453354 适用于Bitcoin Core 0.14.0。但是,想要完全验证每笔交易的用户,即使是数年前的那些用户,仍然可以. 值得注意的是,与建立特定区块必须是区块链一部分的检查点系统相反,假定的有效区块不一定具有约束力。如果一个替代的区块链更长,那么一个比特币核心0.14.0节点将很容易地切换到没有假定有效区块的替代区块链. 改进的费用估算 由于比特币区块已被填满,尤其是在过去的一年中,并非所有通过网络发送的交易都可以放入下一个区块。因此,矿工通常会优先考虑费用最高的交易。包含更多费用的交易更有可能被包含在下一个区块中或此后不久的区块中。包含较低费用的交易出价高,需要更长的时间才能确认. 当然,并不是每个人都需要他们的交易尽快确认。由于价格快速波动而将比特币发送到交易所的用户可能会急于确认其交易。同时,在自己的钱包之间移动比特币的用户可能会更耐心. 从Bitcoin Core 0.10.0开始,用户可以相应地调整其费用。如果他们比较着急,可以手动收取较高的费用,如果不是,则可以手动收取较低的费用。 Bitcoin Core 0.11.0和0.12.0均完善了费用估算软件,Bitcoin 0.14.0现在包括另一组改进,特别是在边缘情况下,该算法更加健壮. 此外,默认的确认目标已从25个区块降低到6个区块;即使用户未触摸费用设置,大多数由Bitcoin Core进行的交易也应在一个小时内确认. 选择加入收费寄送 除了改进的费用估算外,Bitcoin Core 0.14.0用户还有另一种选择可以加快交易速度. 一年前首次发布时,Bitcoin Core 0.12.0发行了,比特币交易可以用“按费用替换”标记来标记。交易的发件人可以用包含更高费用的较新交易替换其初始交易。这使他们能够“跳过生产线”并更快地确认交易. 到目前为止,Bitcoin Core仅在节点行为中包括选择加入按费用收费:它接受并转发带有“按费用收费”标志的交易(而不是将其拒绝为双倍支出)。但是,比特币核心用户无法利用选择加入的收费替代自己的费用;到目前为止,只有钱包用户喜欢 电子 或者 绿色地址 可以. 现在,在Bitcoin Core […]
Bitcoin Core 0.20.0发布:新功能
今天标志着的正式发布 比特币核心0.20.0, 中本聪(Satoshi Nakamoto)于11年前发布的第20个主要版本的比特币原始软件客户端. 监督者 比特币核心 首席维护者Wladimir van der Laan,这个最新的主要版本是由100多个贡献者在大约六个月的时间内开发的。超过500个合并的拉取请求的结果,Bitcoin Core 0.20.0主要清理并强化了Bitcoin Core代码库,改进了硬件钱包集成,提高了网络可靠性,并进行了其他一些改进. 以下是一些比较明显的变化. GUI中的进一步硬件钱包集成 自0.18.0版以来,Bitcoin Core已与硬件钱包兼容。但是,用户仍无法通过Bitcoin Core的图形用户界面(GUI)使用硬件钱包进行交易;他们必须改为使用命令行界面(CLI)来执行此操作. Bitcoin Core 0.20.0正在朝着将硬件钱包集成到GUI中迈出一步。用户现在可以使用部分签名的比特币交易(PSBT)格式在Bitcoin Core GUI中创建不带签名的交易,并将其复制到剪贴板。复制后,他们可以将交易转移到其硬件钱包中进行签名-但是,这种转移尚未实现自动化,并且广播交易仍需要使用CLI. 未来的比特币核心版本将继续推进硬件钱包集成. Asmap提供更可靠的网络连接 比特币核心连接到比特币网络上的多个对等点(其他比特币节点)。 Bitcoin Core根据其IP地址映射其他节点,以与来自不同地区和Internet服务提供商(ISP)的对等方建立连接。如果节点从世界各地的对等节点接收到数据块和交易,则可以降低保留某些数据(例如特定交易)的风险. 比特币核心目前通过以下方式映射IP地址 网络运营商组. 但是,其中一些组实际上是同一组的一部分 自治系统 (AS):网络运营商群组的群集共享关键的互联网路由,因此可能共享相同的路由瓶颈,从而可能过滤数据. Bitcoin Core 0.20.0包含一个称为Asmap的新配置选项,该选项通过自治系统编号(ASN)映射IP地址。这样可以确保该节点与来自不同AS的对等方连接,从而减少了潜在的网络瓶颈,从而进一步限制了保留特定数据的风险。 (但是,将IP地址映射到网络运营商的组中仍然是当前的默认配置。) 删除BIP61拒绝消息 拒绝邮件(BIP61)是节点从对等方收到的交易被拒绝时返回的通知,以及原因。 (也许是因为该交易无效,也许是因为该交易未包含足够的费用,也许还有其他原因被拒绝。) 但是,比特币核心开发人员并不认为拒绝消息很有用。最重要的是,不应假定对等方可靠地返回拒绝消息。换句话说,如果节点未收到拒绝消息,则不一定表示交易已被接受。这限制了消息的实用性,同时还有更好的解决方案来检查交易是否有效并包含足够的费用。同时,这些消息使对等协议变得更加复杂,并且占用了带宽. 因此,默认情况下,BIP61拒绝消息已在Bitcoin Core 0.18.0中被禁用。比特币0.20.0现在已经完全删除了该功能. 删除BIP70付款协议(和OpenSSL) 付款协议(BIP 70)是几年前设计的,目的是改善比特币的付款体验。用户和商家可以交流有关付款的其他详细信息,例如人类可读的目的地地址(商家名称)和退款地址,以防购买出现问题. 尽管比特币核心集成了支付协议,但该标准从未得到广泛采用。相反,大多数钱包仍然使用更基本的URI方案(BIP21):可点击的链接或可扫描的QR码格式,例如,传达付款地址和金额. 也许比缺乏采用更为重要的是,BIP70支付协议遭受了 许多安全和隐私漏洞 这些年来。最值得注意的是,它依赖于OpenSSL软件库的加密功能,需要进行一系列的紧急通知紧急升级。由于这些原因,一些比特币钱包有, 拒绝了 完全实施BIP70. Bitcoin Core […]
Bitcoin Core 0.15.0发布:这是新功能
今天标志着的正式发布 比特币核心0.15.0, 中本聪(Satoshi Nakamoto)在大约九年前推出的第15代比特币原始软件客户端。监督者 比特币核心 首席维护者Wladimir van der Laan,这个最新的主要版本是在六个月的时间内由近100位贡献者开发的,主要贡献是通过 链码实验室, 区块流 和 麻省理工学院的数字货币计划. 与先前版本的软件实现相比,Bitcoin Core 0.15.0提供了显着的性能和可用性改进。它还引入了一些新功能,可以更好地处理网络的当前状态。. 这些是一些更显着的变化. Chainstate数据库重组 与该软件的先前版本相比,最大的变化之一是如何存储比特币区块链的状态。该“ chainstate”或“ UTXO-set”保存在专用数据库中,而之前已按交易进行了分类。如果一项交易将比特币发送到多个输出(“地址”),则这些不同的输出将存储为单个数据库条目,并引用该交易. 在Bitcoin Core 0.15.0中,这些输出分别存储在单个数据库条目中。如果单个交易将比特币发送到不同的输出,则每个输出将单独存储。尽管此方法确实占用了更多的磁盘空间,但如果稍后将这些输出之一用于以下操作,则它需要较少的计算资源。. 这种新数据结构最具体的好处是,新节点的初始同步时间减少了约40%。它还引入了更简单的代码,减少了内存使用量等等。此外,该漏洞还修复了一个理论上可能导致比特币核心节点崩溃的错误,该漏洞在上周末于巴黎举行的“破坏比特币”会议上有争议地披露。. 改进的费用估算 在过去的一两年中,由于比特币区块已被填满,因此并非所有交易都适合开采的第一个区块。取而代之的是,矿工通常会优先考虑包含最多费用的交易。如果用户希望快速确认其交易,则应支付足够高的费用。如果他不着急,那么较低的费用就足够了. 但是,比特币网络在发现块的速度或随时传输的交易数量方面具有固有的不可预测性。这使得很难包括正确的交易费. Bitcoin Core 0.15.0降低了费用不确定性:该软件的最新版本包含明显更好的费用估算算法。这主要是因为该软件在进行估算时会考虑更多数据,例如,较早的已确认交易中包含的费用以及未确认的交易中的费用-证明不足的费用. 此外,用户可以享受更大的灵活性。首先,Bitcoin Core 0.15.0首次允许用户包括可能使他们的交易长达一周才能确认的费用。而且,也是新近推出的,用户可以选择接受或多或少的风险,因为交易突然涌入可能导致交易延迟. 用户界面中的按费用替换 即使通过改进的费用估算,用户仍可能需要等待比其确认交易更长时间的时间,这也许是因为网络上突然出现交易繁忙,或者可能是因为用户改变了主意而宁愿这样做。由于其他原因或其他原因,使交易确认的速度比最初支付的速度快. 对于这些情况,某些钱包允许用户在其交易中添加“按费用替换”标签。有了这样的标签,网络上的节点和矿工就知道发件人可能希望用包含更高费用的较新交易来代替该交易。这有效地使用户能够顺畅地进行交易,以更快地确认交易. 比特币核心节点已经支持按费用替换超过一年了:如果新交易包含更多费用,它们已经可以替换“按费用替换”标记的交易。但是对于比特币核心钱包用户本身来说,利用它绝非易事. 到目前为止. 比特币核心0.15.0钱包在其用户界面中引入了“按费用替换”切换。这使用户可以包含适当的标签,从而使他们以后可以轻松地增加交易费用. 多钱包支持(仅客户端和RPC) Bitcoin Core 0.15.0允许用户首次创建多个钱包。这些钱包都有各自独立的比特币地址,私钥和资金。用户可以将不同的钱包用于不同的目的;例如,一个钱包可用于个人日常购买,另一个钱包可用于与业务相关的交易,而另一个钱包仅用于交易. 使用多个钱包可以带来很多好处。例如,它使记帐更加容易和方便。此外,由于不同的钱包无法通过区块链分析相互链接,因此用户可以更轻松地从增加的隐私中受益。也可以将不同的钱包用于特定的应用程序等等. 目前,普通钱包用户还没有多钱包支持。只有通过命令行或通过连接的应用程序进行操作的高级用户才能使用该功能. 其他改进 除了上述值得注意的更改外,Bitcoin Core 0.15.0还包括大多数其他主要的主要Bitcoin Core版本所做的其他性能改进。具体而言,这些更改加快了从网络下载块的速度,使节点启动更快,并且最新的节点将能够更快地验证新块,从而缩短了网络传播时间. 最后,值得一提的是,Bitcoin Core 0.15.0将与网络上的BTC1对等方断开连接。这意味着,如果SegWit2x硬分叉将网络拆分,则比特币网络的中断较少,因为两种类型的节点都可以更轻松地找到兼容的对等点。尽管此更改已引起了媒体的关注,但此更改不应真正引起注意. 感谢Chaincode […]

Facebook
Twitter