将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成:第 1 部分

最近,比特币序数在区块链领域引起了广泛关注。 据称,与以太坊 ERC-721 等其他代币标准相比,Ordinals 的一个主要缺点是缺乏对智能合约的支持。

我们展示了如何向 Ordinals 添加智能合约功能,从而扩大其用例范围。 与普遍看法相反,序数不仅与智能合约兼容,而且实际上非常适合智能合约。

作为展示,我们开发了一个支持许可序数的智能合约。 与常规/无需许可的序数相比,每次转让都需要由发行人批准和共同签署。

基本思想

比特币采用UTXO(Unspent Transaction Output)模型。每个UTXO由两个字段组成:

  • value:此输出中的聪数量
  • script:锁定输出的比特币脚本。

如果使用 1Sat Ordinals 将 UTXO 记录为不可替代代币 (NFT),则该value 为 1,并且 script 控制如何铸造或转移代币。 由于聪和脚本位于两个正交字段中,因此序数代币可以锁定到任何脚本中。 这意味着代币可以由任何智能合约控制。

铸造(Mint)

正如我们之前介绍的,序数被刻在操作码 OP_FALSE OP_IFOP_ENDIF 之间的“信封”中。

文本铭文“Hello, world!”

OP_FALSE 确保铭文脚本永远不会进入 OP_IF 分支并且永远不会被执行。 整个铭文脚本可以被视为一个 NOP,并与其他脚本结合在一起,而不改变后者的执行。

对于 sCrypt,它被添加到从 sCrypt 智能合约编译的锁定脚本之前。 它不会改变合约的行为,因此可以安全地与任何合约结合。

<Inscription Script> <Locking Script>

转移(Transfer)

代币铸造后,其转移由智能合约决定,就像原生比特币一样。 每次转账都可以将代币/聪转移到新的智能合约中。 注意,确保转移时没有前面的铭文,只有在第一次铭文时才会有。

<Locking Script>

许可序数

如今,大多数序数都使用 Pay To Pubkey Hash (P2PKH) 作为锁定脚本。 当 Alice 想要将序数转移给 Bob 时,她不需要任何第三方的许可。

在某些情况下,每次转让都必须得到发行人的批准,例如为了遵守法律。 当铸造这样的序数时,我们可以使用以下智能合约。

export class PermissionedOrdinal extends SmartContract {@prop()readonly issuer: PubKey// length of inscription script@prop()readonly inscriptLen: bigint@prop(true)owner: PubKey// is being minted@prop(true)isMint: booleanconstructor(issuer: PubKey, inscriptLen: bigint) {super(...arguments)this.issuer = issuerthis.inscriptLen = inscriptLenthis.owner = issuerthis.isMint = true}@method()public transfer(recipient: PubKey, ownerSig: Sig, issuerSig: Sig) {assert(this.checkSig(ownerSig, this.owner), 'owner signature check failed')// issuer co-signassert(this.checkSig(issuerSig, this.issuer), 'issuer signature check failed')// save a local copyconst isMint = this.isMintthis.owner = recipientthis.isMint = falselet stateScript = this.getStateScript()if (isMint) {// Cut leading inscription script.stateScript = slice(stateScript, this.inscriptLen)}// Propagate contract to next output and ensure the value stays 1 sat.let outputs = Utils.buildOutput(stateScript, 1n)outputs += this.buildChangeOutput()assert(this.ctx.hashOutputs == hash256(outputs), 'hashOutputs mismatch')}
}

PermissionedOrdinal 合约

除了第 26 行当前所有者的签名(第 10 行是合同状态)之外,第 28 行还需要发行人的签名。

由于合约是有状态的,因此每次转让都必须确保聪被转移到同一个合约中,确保所有后续转让都需要发行人签名,而不仅仅是铸币后的第一次转让。 请注意,主要铭文脚本在第 38 行的第一次传输时被剪切。

其他潜在用例

Ordinal 代币和智能合约的正交性意味着它们是无限可组合的。 有多种方法可以将它们结合起来。 下面我们只列出几个例子:

  1. 序数锁:锁定一个序数 utxo,任何人都可以通过购买来解锁该序数 utxo,或者由列出者取消。
  2. OP-NS:使用迷你工作量证明支持的 Ordinals Inscriptions 为比特币数据空间创建一个 fair-mint 分层命名系统
  3. 序数和比特币之间的原子交换:将序数锁定在 HLTC 中以允许无需信任的序数销售
  4. 供应上限:目前,BSV-20² 允许铸造的代币数量超过部署中的最大供应量。 使用合约,我们可以禁止链上的此类铸造交易,而不是事后在索引器上使它们在链下无效
  5. 黑名单/白名单
  6. 冻结与恢复

[1] 事实上,当 sCrypt 智能合约是无状态时,铭文脚本可以插入到任何地方。 例如,它可以附加到合同脚本中。 但追加不适用于有状态合约。 为了使其能够与任何 sCrypt 合约一起使用,我们在一开始就将其作为约定。

[2] 基于 1Sat Ordinals 的可替代代币标准。


即刻关注sCrypt官方账号,获取更多资讯:马上关注!sCrypt官方账号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106947.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python趣味编程-恐龙克隆游戏

Python 中使用 Turtle 的恐龙克隆游戏免费源代码 使用 Turtle 的恐龙克隆游戏是一个用Python编程语言编码的桌面游戏应用程序。该项目包含在 Chrome 浏览器中克隆实际恐龙游戏的多种功能。该项目可以使正在修读 IT 相关课程的学生受益。这个应用程序非常有趣,可以帮助您学习创…

scoped样式修饰符的使用

在Vue.js中&#xff0c;scoped 是一个用于样式的修饰符&#xff0c;它用于限定样式的作用范围&#xff0c;使得样式只在当前组件的作用域内生效&#xff0c;而不会影响到父组件或子组件的样式。这个特性通常用于解决 CSS 样式污染的问题&#xff0c;确保样式只会影响到当前组件…

电子科大软件系统架构设计——系统规划

文章目录 系统规划定义意义目标任务路径规划规划步骤规划方法业务系统规划法业务流程重组法价值链分析法战略目标集转移法关键成功因素法 项目计划定义要素工作分解活动排序工期预算三点估计法德尔菲法 成本估算与计算进度安排甘特图法PERT图方法 可行性分析技术可行性分析进度…

推荐一个图像生成开源项目——Fooocus

目录 什么是Fooocus&#xff1f; 项目地址 性能消耗 如何安装 效果对比 总结 什么是Fooocus&#xff1f; Fooocus是一款图像生成软件&#xff0c;但它不同寻常&#xff0c;是对稳定扩散&#xff08;Stable Diffusion&#xff09;和Midjourney的设计理念的巧妙重新思考。本…

MHA高可用及故障切换

一、什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

【docker】Mac M1 构建 x64 linux镜像

亲测教程 文章目录 首先构建环境 首先 首先你需要有一个 Dockerfile 比如&#xff1a;这里以一个 python 项目举例 FROM python:3.10-slimWORKDIR /appCOPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD [ "pyth…

SOME/IP

介绍 SOME/IP是一种汽车中间件解决方案&#xff0c;可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备&#xff0c;如相机、AUTOSAR 设备&#xff0c;以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域…

Redis6搭建高可用的多主多从集群

Redis6搭建高可用的多主多从集群 环境准备搭建redis6集群安装redis6修改配置文件修改cluster-enabled修改cluster-config-file修改cluster-node-timeout 启动集群 环境准备 首先我们需要6台redis&#xff0c;那么为啥是6太呢&#xff1f;是因为我们要部署多master和多slaver集…

Competitive Collaboration 论文阅读

论文信息 题目&#xff1a;Competitive Collaboration: Joint Unsupervised Learning of Depth, Camera Motion, Optical Flow and Motion Segmentation 作者&#xff1a;Anurag Ranjan&#xff0c; Varun Jampani&#xff0c; Lukas Balles 来源&#xff1a;CVPR 时间&#x…

自己开发一个接口文档页面html

演示效果 具体代码如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>框架框架文档页面</…

前端实现页面通过canvas添加全屏水印

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;从事前端工作5年了&#xff0c;做过十多个大大小小不同类型的项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何…

IDEA新建的Moudle失效显示为灰色

现象&#xff1a;IDEA新建的Moudle失效显示为灰色&#xff01;&#xff01;&#xff01; 解决方案&#xff1a; 1. 右键点击父模块&#xff0c;选择Open Moudle Settings&#xff1a; 2. 点击加号&#xff0c;选择Import Moudle - 导入模块&#xff1a; 3. 找到对应模块的po…