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

news2025/5/18 9:16:18

将序数与比特币智能合约集成:第 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: boolean

    constructor(issuer: PubKey, inscriptLen: bigint) {
        super(...arguments)
        this.issuer = issuer
        this.inscriptLen = inscriptLen
        this.owner = issuer
        this.isMint = true
    }

    @method()
    public transfer(recipient: PubKey, ownerSig: Sig, issuerSig: Sig) {
        assert(this.checkSig(ownerSig, this.owner), 'owner signature check failed')
        // issuer co-sign
        assert(this.checkSig(issuerSig, this.issuer), 'issuer signature check failed')
        
        // save a local copy
        const isMint = this.isMint

        this.owner = recipient
        this.isMint = false
        let 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.coloradmin.cn/o/974036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CPU与GPU渲染的差异有哪些?最佳3D渲染 GPU推荐

什么是 GPU 渲染&#xff1f; GPU 渲染使您可以使用显卡而不是 CPU 进行渲染。从广义上讲&#xff0c;GPU渲染允许许多并行操作同时运行。这提高了执行速度&#xff0c;因为现代 GPU 旨在计算大量数据。快速渲染使 GPU 能够实时处理图形。但是&#xff0c;在这种情况下&#x…

前后端中的异步和事件机制 | 前后端开发

前言 在前后端程序设计开发工作中&#xff0c;小伙伴们一定都接触过事件、异步这些概念。出现这些概念的原因之一是&#xff0c;我们的代码在执行过程中所涉及的逻辑在不同的场合下执行时间的期望是各不相同的。为了尽量做到充分利用CPU等资源做尽可能多的事&#xff0c;免不了…

JWT解决跨域问题详解

介绍 在前后端不分离时&#xff0c;我们利用前面讲过的Spring Security的各种知识点&#xff0c;就可以实现对项目的权限管控。但是在前后端分离时&#xff0c;尤其是在引入了Spring Security后的前后端分离时&#xff0c;我们从前端发来的请求&#xff0c;就会存在一些问题。…

IBM Spectrum LSF Process Manager —— 设计、记录和运行复杂的计算工作流

亮点 ● 快速创建复杂的分布式工作流 ● 开发可重复的最佳实践 ● 自信地运行关键工作流程 ● 提高流程可靠性 IBM Spectrum LSF Process Manager 使您能够设计和自动化计算或分析流程&#xff0c; 捕获和保护可重复的最佳实践。 使用直观的图形界面…

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来 目录 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现PSO-LSSVM时间序列预测未…

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…

如何确认this的值

<script>/*如何确认this的值1.全局执行环境严格模式&#xff0c;非严格模式&#xff1a;全局对象window2.函数内部环境2.1直接调用严格模式下&#xff1a;undefined非严格模式&#xff1a;全局对象&#xff08;window&#xff09;2.2对象方法调用严格模式&#xff0c;非严…

OCR扫描仪选购技巧,轻松将纸质文件转为电子文本

OCR&#xff08;光学字符识别&#xff09;扫描仪是一种特殊扫描仪&#xff0c;能够将纸质文件上的文字转换为可编辑的电子文本。在选购OCR扫描仪时&#xff0c;有一些技巧可以帮助我们选择到适合自己需求的产品。以下介绍几个简单实用的OCR扫描仪选购技巧。 首先&#xff0c;需…

使用pip下载第三方软件包报错超时处理方法

报错如下&#xff1a; WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘ReadTimeoutEr ror(“HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. (read timeout15)”)’: /p…

【AGC】云数据库API9开发问题汇总

【问题描述】 云数据库HarmonyOS API9 SDK已经推出了一段时间了&#xff0c;下面为大家汇总一些在集成使用中遇到的问题和解决方案。 【问题分析】 1. 报错信息&#xff1a;数据库初始化失败&#xff1a;{“message”&#xff1a;“The object type list and permission …

开启Clash和系统代理后Chrome无法打开网页但Edge正常

今天早上打开电脑准备摸鱼&#xff0c;发现Chrome打不开网页了。检查Clash正常&#xff0c;切换了节点&#xff0c;依然不行。关闭系统的代理可以解决。不然只提示ERR_TIMED_OUT。 各种研究配置&#xff0c;然后发现Edge却又不受影响。 通过火绒发现Chrome是有连接到7890端口的…

【LeetCode】328. 奇偶链表

328. 奇偶链表&#xff08;中等&#xff09; 思路 如果链表为空&#xff0c;则直接返回链表。 对于原始链表&#xff0c;每个节点都是奇数节点或偶数节点。头节点是奇数节点&#xff0c;头节点的后一个节点是偶数节点&#xff0c;相邻节点的奇偶性不同。因此可以将奇数节点和偶…

Typora for Mac(Markdown文本编辑器)

Typora是一款简洁、直观的跨平台Markdown编辑器软件。它提供了一个非常直观和简单的界面&#xff0c;让用户可以更轻松地编写和编辑Markdown语言的文档。 Typora具有实时预览功能&#xff0c;这意味着你可以在编辑Markdown文档的同时立即看到最终的效果。它允许用户快速切换编辑…

简化车辆登记流程:利用腾讯云OCR实现自动化信息识别

项目中有一块&#xff0c;需要用到上传车牌车牌号到系统里&#xff0c;用了下腾讯云的ocr车牌号识别做了个小功能。通过腾讯云的orc识别&#xff0c;将车牌号录入到后台。 一&#xff0c;首先我们需要登录到腾讯云&#xff0c;然后搜索一下orc或者车牌号 https://curl.qcloud.…

一阶多智能体的平均一致性

数学表达 一阶多智能体的运动学方程可以描述为 x ˙ i ( t ) u i ( t ) , i ∈ { 1 , 2 , 3 , … , N } \dot x_i(t) u_i(t),i\in\{1,2,3,\dots,N\} x˙i​(t)ui​(t),i∈{1,2,3,…,N} 其中 x i ( t ) x_i(t) xi​(t)为状态&#xff0c; u i ( t ) u_i(t) ui​(t)为控制量&…

SIP mini 对讲终端,带sip热点功能

SV-A10/SV-A10W SIP mini 对讲终端&#xff0c;带sip热点功能 SV-A10/SV-A10W 是专门针对行业用户需求研发的一款 SIP mini 对讲产品&#xff0c;外观小巧&#xff0c;功能 强大&#xff0c;集智能安防、音/视频对讲和广播功能于一体&#xff0c;性价比高。支持壁挂式安装/86…

lv3 嵌入式开发-4 linux shell命令(文件搜索、文件处理、压缩)

目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut 3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 1 …

C++ | 负数比0大?

C | 负数比0大&#xff1f; 文章目录 C | 负数比0大&#xff1f;现象分析剖析赋值运算类型提升标准有符号整数类型的转换级别关系为&#xff1a;char short转换int long double 转换 >>>>> 欢迎关注公众号【三戒纪元】 <<<<< 现象 在 for 的判断…

气传导耳机哪个牌子好?2023气传导耳机排行榜推荐

​在众多的气传导耳机中&#xff0c;如何选择一款适合自己的气传导耳机呢&#xff1f;这需要考虑到自己的需求和预算&#xff0c;同时也需要了解不同品牌和型号的产品特点和优缺点。下面我来推荐几款非常不错的气传导耳机给大家参考&#xff0c;希望大家都能寻找到心仪那款。 …

深入理解联邦学习——联邦学习的价值

分类目录&#xff1a;《深入理解联邦学习》总目录 毫无疑问&#xff0c;如今我们正经历互联网第四次信息革命&#xff0c;坐拥海量的信息与数据。这些数据如果能够用AI的方式进行解读&#xff0c;将会为人类日常生活带来颠覆性变革。联邦学习作为未来AI发展的底层技术&#xff…