介绍 sCrypt:BTC 的 Layer-1 智能合约框架

这篇具有很好参考价值的文章主要介绍了介绍 sCrypt:BTC 的 Layer-1 智能合约框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 TypeScript 中开发 BTC 智能合约

我们非常高兴地推出 sCrypt:一种现代 Typescript 框架,用于在 BTC 上开发第一层智能合约,无需分叉。 现在,人们可以使用现代开发工具在易于使用的统一框架中编写、测试、调试、部署和调用智能合约。 任何 web2 开发人员都可以在 BTC 上开发智能合约驱动的应用程序,只要她了解 JavaScript/TypeScript。 它为将 BTC 转变为智能合约平台奠定了坚实的基础。

介绍 sCrypt:BTC 的 Layer-1 智能合约框架,区块链开发平台,智能合约,区块链,脚本语言

BTC 上的智能合约

传统上,比特币被认为只能支付和存储价值。 Ordinals 通过证明它也支持令牌来改变这种误解。 另一个误解是比特币缺乏智能合约功能。 事实上,BTC 从第一天起就以比特币脚本的形式支持智能合约。 哈希锁、时间锁和多重签名是一些突出的例子。

BTC 智能合约的最大障碍之一在于脚本。 作为一种低级汇编语言,Script 非常难以编码和推理。 实际上没有像典型软件开发工作流程那样的测试、调试和部署工具。 用原生脚本编写智能合约既麻烦又容易出错。 当合约规模和复杂性增加时,它很快就会变得棘手。

sCrypt

输入密码。 借助 sCrypt,开发人员可以直接使用 Typescript 编写 BTC 智能合约,Typescript 是世界上最流行的编程语言之一,每天都有数百万开发人员使用。 sCrypt 合约被编译成比特币脚本。

sCrypt 提供了很多好处:

无需学习新的编程语言。 我们选择 TypeScript 是因为它提供了一种简单、熟悉的语言 (JavaScript),而且具有类型安全性,可以轻松开始编写安全的智能合约。 如果您已经熟悉 TypeScript/JavaScript,则无需学习新的编程语言或工具。

无需学习新工具。 Web2 开发人员可以重用数百万现有的 TypeScript/JavaScript 库和他们最喜欢的工具:用于 IDE 的 Visual Studio Code/WebStorm、用于包管理的 NPM、用于测试的 Jest/Mocha/Jasmine。

一个有效示例

让我们来看看一个实用的智能合约。

下面的代码代表了 BitVM 的简单逻辑 NAND (NOT-AND) 门承诺,取自其白皮书中的图 2。 它检查门的两个输入位 (A, B) 和一个输出位 (E)(全部使用哈希值提前提交)是否匹配,即 E = NAND(A, B)

该代码如何工作的具体细节并不重要。 这里的中心信息是,它与现代编程语言的样子相去甚远,而且显得深奥。

// Reveal Preimage of hashE0 or hashE1
<hashE0/1>
OP_BITCOMMITMENT
OP_TOALTSTACK
// Now the bit value of "E" is on the stack
// Reveal Preimage of hashB0 or hashB1
<hashB0/1>
OP_BITCOMMITMENT
OP_TOALTSTACK
// Now the bit value of "B" is on the stack
// Reveal Preimage of hashA0 or hashA1
<hashA0/1>
OP_BITCOMMITMENT
OP_TOALTSTACK
// Now the bit value of "A" is on the stack
//
// Verify that "A NAND B == E"
//
// Read "B" from alt stack
OP_FROMALTSTACK
// Compute A NAND B
OP_NAND
// Read "E" from alt stack
OP_FROMALTSTACK
// Check A NAND B == E
OP_EQUALVERIFY
脚本中的 NAND 门承诺

功能上的等价物在 sCrypt 中简单地表示为:

const bitA = BitVM.bitCommit(this.hashPairA, preimageA)
const bitB = BitVM.bitCommit(this.hashPairB, preimageB)
const bitE = BitVM.bitCommit(this.hashPairE, preimageE)
assert(BitVM.nand(bitA, bitB) == bitE)

比较 Script 和 sCrypt 实现,很明显后者对于现代开发人员来说更加友好和平易近人。 前者只有少数能够使用过时的汇编语言进行编码的开发人员知道,而后者可以由数百万了解 JavaScript/TypeScript 或任何其他面向对象编程语言(例如 Java、C++ 或 Golang)的开发人员掌握。 智能合约越复杂,用 sCrypt 开发比用 Script 开发就越有利。

下面列出了基于 sCrypt 库 scrypt-ts-btc 的完整代码。

import {
    assert, ByteString, hash160, method, prop, Ripemd160, SmartContract,
} from 'scrypt-ts-btc'

type HashPair = {
    hash0: Ripemd160
    hash1: Ripemd160
}

export class BitVM extends SmartContract {
    @prop()
    hashPairA: HashPair
    @prop()
    hashPairB: HashPair
    @prop()
    hashPairE: HashPair
    
    constructor(hashPairA: HashPair, hashPairB: HashPair, hashPairE: HashPair) {
        super(...arguments)
        this.hashPairA = hashPairA
        this.hashPairB = hashPairB
        this.hashPairE = hashPairE
    }
    
    @method()
    public openGateCommit(
        preimageA: ByteString,
        preimageB: ByteString,
        preimageE: ByteString
    ) {
        const bitA = DemoBitVM.bitCommit(this.hashPairA, preimageA)
        const bitB = DemoBitVM.bitCommit(this.hashPairB, preimageB)
        const bitE = DemoBitVM.bitCommit(this.hashPairE, preimageE)
        assert(DemoBitVM.nand(bitA, bitB) == bitE)
    }
    
    @method()
    static bitCommit(hashPair: HashPair, preimage: ByteString): boolean {
        const h = hash160(preimage)
        assert(h == hashPair.hash0 || h == hashPair.hash1)
        return h == hashPair.hash1
    }
    
    @method()
    static nand(A: boolean, B: boolean): boolean {
        return !(A && B)
    }
}

BitVM 合约

部署和调用智能合约

我们使用 Pay-to-Witness-Script-Hash (P2WSH) 进行合约部署。 部署包括编译智能合约代码以生成脚本、对该脚本进行哈希处理,并将哈希值放入 P2WSH 交易 (Tx0) 中,该交易将广播到网络。

当有人想要调用已部署的合约时,她将嵌入完整的合约脚本以及被调用方法的输入,作为后续交易(Tx1)中花费 Tx0 的见证数据。

介绍 sCrypt:BTC 的 Layer-1 智能合约框架,区块链开发平台,智能合约,区块链,脚本语言

部署和调用交易:左边代表输入,右边代表输出

以下是部署和调用合约的代码片段:

await BitVM.loadArtifact()

// instantiate a new contract
const instance = new BitVM(hashPairA, hashPairB, hashPairE)
await instance.connect(getDefaultSigner())

// deploy with 1000 sats
const deployTx = await instance.deploy(1000)
console.log(`Deployed contract "DemoBitVM": ${deployTx.id}`)

// call contract
const callRes = await instance.methods.openGateCommit(preimageA, preimageB, preimageE)
console.log(`Called "openGateCommit" method: ${callRes.tx.id}`)

部署和调用

值得注意的是,部署(第 8 行)和调用(第 12行)合约只需要一行。

部署交易 ID:

a651b22a8fc6d424233d94087d89744694f7710f175d9cd6fe2a0f66b3b35227

调用交易ID:

fa06d0f10f2642f9f677c105970559b15e8d9281e744b5ddc1da49fafc15b9d7

这些交易 ID 代表在 BTC 上部署和调用的 BitVM 合约的实例。

该示例的完整代码可在 GitHub 上找到。 有兴趣的开发人员可以访问完整的代码并自行运行。 有关 sCrypt 的更多信息,请参阅我们的详细文档。

已知限制

sCrypt 可以在任何支持比特币脚本的区块链上运行。 这包括比特币分叉和比特币衍生链,例如莱特币和Doge。

BTC 禁用了 OP_CATOP_MUL 等许多 Script 操作码,极大地限制了 sCrypt 可以表达的智能合约类型。 BTC 社区正在积极讨论重新启用此类操作码并引入新的操作码,如果提议的更改被接受,这将使 BTC 上的 sCrypt 比现在更强大。

与此同时,有些链拥有全套脚本操作码,例如 Bitcoin SV 和 MVC。 sCrypt 今天在这些链上达到了其全部能力。

在Taproot中使用

为了便于在示例中进行说明,我们使用 P2WSH 类型脚本嵌入 sCrypt 合约,该脚本允许最大脚本大小为 10KB。 sCrypt 合约也可以在 Taproot 脚本中使用。 它们可以变得更具表现力和复杂性,因为 Taproot 的脚本大小限制更大,约为 4MB。

相关工作

与其他 Layer-1 (L1) 比较

还有其他一些尝试来提高脚本的可编程性,我们在下面列出了一些。

  • Miniscript:一种独立的语言,用于以可组合且可读的方式表示比特币脚本。 它的范围非常有限,并且表达能力不如脚本:它只能表达签名要求、时间锁、哈希原像以及这些的任意组合。
  • Simplicity:一种正在开发的低级编程语言,比比特币脚本具有更大的灵活性和表现力。 它需要一个分叉才能在 BTC 上实现。

与这两者相反,sCrypt 并没有发明一种新的编程语言,只是重用了 TypeScript,它的学习曲线明显更浅。 它还提供了除智能合约语言之外更全面的框架,包括 IDE、包管理、调试器、SDK 和 API。 也就是说,它提供了开发人员构建由智能合约支持的全栈应用程序所需的一切。

与第 2 层 (L2) 比较

sCrypt 是一种基于 Typescript 的领域特定语言 (DSL),编译为比特币脚本,目前无需任何分叉即可在 BTC 上运行。 它继承了 BTC 的全部安全性,从而使其比任何 BTC L2 都更加安全和去信任。

话虽如此,如果 BTC L2 也使用脚本并启用比 BTC L1 更多的操作码,那么 BTC L2 可以使用更多的 sCrypt 功能。 事实上,已经有 L2 以这种方式利用 sCrypt,例如 Note Protocol。文章来源地址https://www.toymoban.com/news/detail-800422.html

到了这里,关于介绍 sCrypt:BTC 的 Layer-1 智能合约框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链技术开发】十个比较流行的以太坊智能合约开发框架

    专栏:【区块链技术开发】 前期文章: 【区块链技术开发】剖析区块链Ganache模拟器工具及其智能合约部署区块链的查询方式 【区块链技术开发】基于Web3.js以太坊网络上的智能合约的交互及其应用 【区块链技术开发】OpenZeppelin智能合约库:提高智能合约的安全性和可靠性,

    2024年02月02日
    浏览(64)
  • 智能合约平台开发指南

    随着区块链技术的普及,智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款,大大减少了执行和监督合同条款所需的成本和时间。那么,如何开发一个智能合约平台呢?以下是一些关键步骤。 一、选择合适的区块链平台 智能合约通常运行

    2024年04月14日
    浏览(34)
  • sCrypt 合约中的椭圆曲线算法:第二部分

    我们在脚本中实现了椭圆曲线 (EC) 算法。在之前的实现中,我们进行链下计算并在脚本中验证结果。我们这里直接用脚本计算。 基于EC的应用非常多,特别是在密码学领域,如数字签名、加密、承诺方案等。作为具体示例,我们重新实现了 ECDSA 签名验证,允许使用任意消息验

    2024年01月16日
    浏览(48)
  • 我们应该怎样定义 BTC Layer2?

    撰文:Jademont,水滴资本创始人 原文来自Techub News:我们应该怎样定义 BTC Layer2? 只要消耗 BTC 作为 gas,以 BTC 为底层资产,可以做为 dapp 平台,性能又远优于 BTC 一层,都算。包括但不限于,基于 Indexer 的应用平台,EVM rollup, EVM crosschain, 侧链,闪电网络,RGB 等等。这些最终

    2024年01月25日
    浏览(42)
  • 【区块链 | 智能合约】Ethereum源代码 - 智能合约地址生成算法

    当提交智能合约部署后,会返回智能合约的地址。智能合约地址的生成逻辑在eth.api.go的submitTransaction函数中:

    2024年02月13日
    浏览(47)
  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(52)
  • 区块链智能合约代码示例

            以下是一个简单的区块链智能合约代码示例: 该合约具有以下功能: 定义了一个名为 SimpleContract 的合约。 定义了一个名为 myData 的公共整数变量。 定义了一个名为 setMyData 的公共函数,该函数接受一个 uint 类型的参数 newData,并将其设置为 myData 的新值。 在 So

    2024年02月14日
    浏览(45)
  • 区块链与智能合约

    要想理解什么区块链,我们先来从本质上认识一下它 区块链:本质上是一个去中心化的分布式账本数据库,是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方法。 没有基础的人可能理解起来有点困难,我们来解释一下里边的名词 分布式账本数据库:了解过

    2024年03月26日
    浏览(88)
  • 区块链智能合约基础

    什么是智能合约 简单来说,智能合约是一种满足在一定条件时,就执行的程序,例如自动售货机就类似一个智能合约系统。 1.向自动售货机投入足够硬币,按下按钮 2.售货机供出商品 3.售货机回到初始状态 智能合约的工作原理 智能合约是一段程序(代码和数据的集合),可

    2024年02月13日
    浏览(41)
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。 先上图,是我最近学习知识点的一个概括总结,此外还包

    2023年04月18日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包