比特币原生脚本是一种低级语言,是比特币虚拟机的操作码集合。通常情况下,比特币智能合约开发者不必直接处理它,可以使用 sCrypt 等高级语言。 但是,在某些情况下可能需要直接使用原生脚本。例如,自定义的脚本经过优化,可能比 sCrypt 生成的脚本更高效;又或者脚本是使用 MiniForth 等外部工具生成的,需要集成到 sCrypt 中。 内联脚本函数 我们在 sCrypt IDE 0.4.0 中引入支持内联脚本函数的功能。 用户可以将 ASM 形式的脚本代码嵌入到 sCrypt 源代码中。 sCrypt
我们开发了一个基于智能合约的比特币保险库,其中锁定的比特币只能在延迟用户定义的时间后转移。 密钥盗窃是困扰比特币用户的一个主要问题。一种保护比特币的方法是将它们存储在不允许即时取款的保险库中。要花费保险库中比特币,需要两个连续的步骤。 通过第一笔交易发出将硬币移出金库的请求,这称为出库 (unvault) 等待预定义的时间, 称为出库期 (unvaulting),比如在第一笔交易入块后 24 小时,然后硬币可以在后续交易中移出。 这两个步骤都使用称为保险库密钥的密钥。另一个称为恢复密钥的密钥可以在 2
在此之前,我们发布了一个基于 UTXO 的 token 方案,其中包括可替换 token和不可替换 token。像发行和转账这样的 token 规则都在层一由矿工来执行。但是,像 token 认证这样的额外规则,则需要在层二执行。这满足不了那些希望自己验证所有内容(如SPV)的用户的需求。我们设计了新的方案来解决这个问题,让所有的规则都可以在层一进行验证。 问题 有两种方法来假冒一个 token,如上图所示。每个框都表示一个 Tx,左侧是 input,右侧是 output。箭头从一个 Tx 指向它花费的
一个纯粹的点对点游戏,可以让玩家不通过游戏公司就能玩。数字签名提供了部分解决方案,但是如果仍然需要可信的第三方来防止欺骗,那么就失去了它的主要优势。我们提出了一种利用 BSV 网络解决欺诈问题的方案。具体来说,就是把游戏完全放到链上:不仅仅是游戏数据,还包括游戏逻辑。我们通过实现一个井字棋游戏来演示这个方案。 实现 游戏开始时,Alice 和 Bob 每个人都把一定数量的 BSV 锁定在一个合约里。然后,他们发送签名过的交易与这个有状态的合约进行交互,来轮流行动。如果一方获胜,获胜方将赢走所有锁定在合约里
我们之前的token方案针对的是可替换(fungible)的 token。这里来看看另一种方案如何实现 NFT(non-fungible token)合约。这类 token 可以代表独一无二的和不可分割的资产,比如房地产和收藏品。 概览 与可替换 token 类似,在每个 UTXO 中,token 合约的数据部分也有两个部分与 NFT 有关: 一个公钥:用于控制 token 的发行或转让。 一个整数:唯一标识一个 token。 同样,通过使用与公钥对应的私钥进行签名来对 UTXO 中的 token 进行
本文中我们将展示一种基于支付通道,按需提供电影流媒体和其他类型服务的经济且高效的方式。 延展性 在比特币的背景下,延展性意味着修改交易而不使其无效的能力。有两个层次: 脚本级别:签名不包括解锁脚本,因此修改它不会改变签名有效性; 交易级别:SIGHASH 标志可用于控制对哪些输入/输出进行签名。 我们在这里专注于脚本级的延展性。 流媒体 假设 Alice 想从 Bob 那里购买一部电影。这部电影分为多个小块:D₀、D₁、D₂、…、Dn。Alice 和 Bob 创建了一个支付通道来交换链下消息。Bob
在本系列前几部分奠定的基础上,在本文中将演示如何在比特币中实现相对锁定时间,而无需新的操作码 OP_CheckSequenceVerify。 时间锁 时间锁会限制某些比特币的支出,直到指定的未来时间或区块高度。有两种类型的时间锁: 绝对时间锁:例如,可以锁定 1 个比特币,直到区块高度 800,000,或直到 2025 年 1 月 1 日后可解锁使用。 相对时间锁:例如,可以锁定 1 个比特币,只能在 100 个区块或 3 天后可解锁使用。 为了启用绝对和相对时间锁,BIP65 和 BIP68/112/
一个区块中的交易总数是一个重要的信息。我们展示了如何在没有受信任的第三方的情况下获得它,这在以前被认为是不可能的。 范围 让我们将 Merkle 路径的长度表示为 n。叶子的数量,即一个区块中的交易数量,介于 2^(n-1) + 1 和 2^n 之间。这是因为高度为 n 的满二叉树¹ 恰好有 2^n 个叶子。Merkle 路径的长度与 Merkle 树的高度相同。 高度 2 的满二叉树 确切数字 查找最后一笔交易 在上一篇文章中,我们访问了区块中的第一个 coinbase 交易。如果我们还可以访问最后一笔
区块头包含区块创建时的时间戳。但通常我们想要访问块高度,它不包含在块头中。我们设计了一种新技术来无需信任地获取包含在 coinbase 交易中的块高度。 Coinbase 交易的区块高度 coinbase 交易是区块中的第一笔交易。 区块中的 Coinbase 交易 BIP34 规定区块高度必须是 coinbase 交易解锁脚本中的第一项,如下所示。 一个Coinbase 交易 函数 blockHeight() 返回具有给定区块头的块的高度,如下所示。使用我们之前的技术,我们可以在第 13 行和第 16
上海区块链开发者大会(2021.11) BSV 区块链基础设施软件及工具介绍 PDF 区块链知识讲堂,合肥工业大学(2021.07) 比特币签名技术入门及交易构建演示 BSV 线上研讨会,比特币签名技术系列课程(2021.03) 椭圆曲线上点的运算和比特币密钥 椭圆曲线数字签名算法 对交易签名 对任意消息签名 第二届“打点创新营”(2020.09) 门限签名实战之玩转 Nakasendo BSV 中文开发者大会(2020.08) 从“点对点”到“小世界” - 节点和比特币网络 BSV 线