深入理解Polygon zkEVM (一)

Polygon zkEVM系列文章的第一篇,简要的阐述了polygon zkEVM的的整体架构和交易执行流程,并且分析了polygon zkEVM是如何实现计算扩容的同时继承以太坊的安全性的。

同时还会在接下来两篇文章会详细介绍Polygon zkEVM的zkEVM Bridge和zkEVM的设计细节,以及polygon zkEVM接下来的去中心化sequencer的路线图。

目录

  • Rollup 是为了给以太坊实现计算扩容

    • 不同 Rollup 路线之间的区别

  • Polygon zkEVM 的具体执行流程 & 整体架构

  • 从模块化区块链的角度解析 Polygon zkEVM

  • Polygon zkEVM 如何继承L1的安全性

  • Polygon zkEVM 激励机制

1.Rollup为了给以太坊实现计算扩容

首先,我们需要明确rollup的大概工作原理:

rollup的出现的是为了给Ethereum实现计算扩容,具体的实现方法是将交易的执行外包给 Rollup,然后将交易和交易执行后的状态(state)存储在 Ethereum 的合约内。

由于技术路线的不同演变出了两种类型的 Rollup:

  • Optimistic Rollup:

  • 乐观的认为发送到 EthereumRollup 交易(Rollup transaction)和对应的 Rollup 状态(Rollup State )都是正确的,任何人都可以通过提供欺诈证明(fraud proof)对还处于挑战期的Rollup State进行挑战(challenge)

  • Zero-knowledge Rollup:

  • 会为发送到 EthereumRollup交易(Rollup Transaction)和对应的 Rollup 状态(Rollup state)提供一个有效性证明(validity proof)(由以太坊上的合约验证,来证明 Rollup 的执行对应交易后的状态时正确的)

  • (参考以太坊官方定义) Scaling | ethereum.org

Zero-knowledge RollupOptimistic Rollup 最大的区别就是由于验证状态有效性的不同方式导致达成 finality 的时间不同;

Optimistic Rollup 乐观的认为提交到 Ethereum 上的交易和状态都是正确的,所以存在7天的挑战期(达成finality的时间是7天),期间任何人发现在 Ethereum 上的交易对应状态不正确都可以通过提交正确的状态进行挑战。

Zero-knowledge Rollup( zk-Rollup ) 达成 finality 的时间,则取决于: 交易对应的有效性证明( validity proof )提交到以太坊并且验证通过所花费的时间。目前可能在1个小时左右的finality居多。(因为需要考虑到Gas成本问题)

2.Polygon zkEVM 执行流程

接下里我们以一个简单的交易被确认流程来看看 Polygon zkEVM是怎么工作的,从而对整体协议有一个具体的理解;

整个过程可以主要分为三个步骤:

  • Optimistic Rollup:

  • 乐观的认为发送到 EthereumRollup 交易(Rollup transaction)和对应的 Rollup 状态(Rollup State )都是正确的,任何人都可以通过提供欺诈证明(fraud proof)对还处于挑战期的Rollup State进行挑战(challenge)

  • Zero-knowledge Rollup:

  • 会为发送到 EthereumRollup交易(Rollup Transaction)和对应的 Rollup 状态(Rollup state)提供一个有效性证明(validity proof)(由以太坊上的合约验证,来证明 Rollup 的执行对应交易后的状态时正确的)

  • (参考以太坊官方定义) Scaling | ethereum.org

Zero-knowledge RollupOptimistic Rollup 最大的区别就是由于验证状态有效性的不同方式导致达成 finality 的时间不同;

Optimistic Rollup 乐观的认为提交到 Ethereum 上的交易和状态都是正确的,所以存在7天的挑战期(达成finality的时间是7天),期间任何人发现在 Ethereum 上的交易对应状态不正确都可以通过提交正确的状态进行挑战。

Zero-knowledge Rollup( zk-Rollup ) 达成 finality 的时间,则取决于: 交易对应的有效性证明( validity proof )提交到以太坊并且验证通过所花费的时间。目前可能在1个小时左右的finality居多。(因为需要考虑到Gas成本问题)

2.Polygon zkEVM 执行流程

接下里我们以一个简单的交易被确认流程来看看 Polygon zkEVM是怎么工作的,从而对整体协议有一个具体的理解;

整个过程可以主要分为三个步骤:

  • Optimistic Rollup:

  • 乐观的认为发送到 EthereumRollup 交易(Rollup transaction)和对应的 Rollup 状态(Rollup State )都是正确的,任何人都可以通过提供欺诈证明(fraud proof)对还处于挑战期的Rollup State进行挑战(challenge)

  • Zero-knowledge Rollup:

  • 会为发送到 EthereumRollup交易(Rollup Transaction)和对应的 Rollup 状态(Rollup state)提供一个有效性证明(validity proof)(由以太坊上的合约验证,来证明 Rollup 的执行对应交易后的状态时正确的)

  • (参考以太坊官方定义) Scaling | ethereum.org

Zero-knowledge RollupOptimistic Rollup 最大的区别就是由于验证状态有效性的不同方式导致达成 finality 的时间不同;

Optimistic Rollup 乐观的认为提交到 Ethereum 上的交易和状态都是正确的,所以存在7天的挑战期(达成finality的时间是7天),期间任何人发现在 Ethereum 上的交易对应状态不正确都可以通过提交正确的状态进行挑战。

Zero-knowledge Rollup( zk-Rollup ) 达成 finality 的时间,则取决于: 交易对应的有效性证明( validity proof )提交到以太坊并且验证通过所花费的时间。目前可能在1个小时左右的finality居多。(因为需要考虑到Gas成本问题)

2.Polygon zkEVM 执行流程

接下里我们以一个简单的交易被确认流程来看看 Polygon zkEVM是怎么工作的,从而对整体协议有一个具体的理解;

整个过程可以主要分为三个步骤:

  1. Sequencer 将多个用户交易打包成 Batch 提交到L1的合约上。

  2. Prover 为每笔交易生成有效性证明(validity proof),并将多个交易的有效性证明聚合成一个有效性证明。

  3. Aggregator 提交聚合了多个交易的有效性证明(validity proof) 到 L1 的合约中。

1) Sequencer 将用户交易打包成 Batch 提交到 L1 合约上

  1. 用户将交易发送给Sequencer,Sequencer会在本地按照收到交易的快慢顺序进行处理(FRFS),当Sequencer在本地将交易执行成功后,如果用户相信Sequencer是诚实的,那么他可以认为这个时候的交易已经达成了finality。

    1. 这里需要注意,目前大多数Sequencer内部的Mempool(交易池)都是私有的,所以暂时可以获取的MEV是比较少的

  2. Sequencer 会将多笔交易打包进一个Batch里(目前是一个Batch里只包含一个交易) , 然后在收集到多个Batches之后,通过L1上的 PolygonZKEvm.solsequenceBatch()函数将多个Batch一起送到L1的交易calldata上。

    function sequenceBatches(
            BatchData[] memory batches
        ) public ifNotEmergencyState onlyTrustedSequencer

需要注意这里一次性提交多个Batch是为了尽可能减少L1的gas消耗

  1. PolygonZkEvm.sol 收到 Sequencer 提供的 Batches 后,它会依次在合约内计算每个Batch的哈希,然后在后一个Batch里记录前一个Batch的哈希,于是我们就得到了下图的Batch结构

  1. 每个Batch里的交易顺序也是确定的,所以当Batch的顺序确定之后,我们认为所有被包含在Batch提交到L1的 polygonZkEVM合约的交易的顺序都被确定了。

以上实际上过程也是L1充当Rollup DA层需要完成的工作(这个时候并没有完成任何状态检验或推进的工作)。

2) Aggregator 为多个Batch的交易生成 validity Proof

  1. 当Aggregator监听到L1的 PolyonZKEVM.sol 合约中已经有新的 Batch 被成功的提交之后,它会把这些 Batch 同步到自己的节点里,然后给 zkProver 发送这些交易.

  2. zkProver 接收到这些交易之后会并行为每笔交易生成 validity proof,再将多个Batch包含的交易的 validity proof再聚合成一个有效性证明(validity proof).

  3. zkProver 将聚合多个交易的validity proof发送给 Aggregator

3) Aggregator 提交聚合证明到 L1 的合约

  1. Aggregator 会将这个有效性证明(validity proof)以及对应的这些 Batch 执行后的状态一起提交到 L1 的 polygonZkEvm.sol 合约内(通过调用以下方法)

合约内接下来会执行以下操作来验证状态转换是否正确:

  1. 从合约内拿到最后一个被验证过的BatchBatchIndex :currentLastVerifiedBatch (理想情况下initNumBatch ==currentLastVerifiedBatch

  2. 根据 BatchIndex 拿到合约内最新的状态 oldStateRoot

    1. oldStateRoot = batchNumToStateRoot[initNumBatch];

    2. 合约内有这样一这个mapping: batchNumToStateRoot 维护一个batchIndex映射到该batch执行结束后对应的状态

  3. 然后传入validity proof对应([proofA,proofB,proofC]) ,这个validity proof要验证的batches的范围和这部分batch执行前的状态和执行后的状态;

    1. 其中执行前的状态必须选定为合约内已有的经过验证的状态

  4. 将合约内的 MATIC 转帐给提交正确 validity proofAggregator

  5. 更新 batchNumToStateRoot 这个mapping,和 lastVerifiedBatch

    1. batchNumToStateRoot[finalNewBatch] = newStateRoot;

    2. lastVerifiedBatch = finalNewBatch;

  6. globalExitRootManager.updateExitRoot(newLocalExitRoot);

当这一步在L1合约内执行成功时,这部分batch包含的所有交易也就真正达成了finality(对应op的7天挑战期结束)

  1. Ethereum 在 polygon-zkEVM 中充当的角色

上文我们已经了解了polygon zkEVM的整体流程,可以回顾下EthereumRollup 做了哪些工作:

  1. SequencerRollup 的交易收集起来打成 Batch 之后,提交到L1的合约中。

  2. Aggregator 将validity proof 提及到L1合约上来达成新的状态

在第一步,实际上L1不仅仅提供了DA层的功能,实际上还完成了一部分交易排序的功能;实际上当你把交易提交到Sequencer时,交易是没有真正被定序的,因为Sequencer有权力可以随便改变交易的顺序,但是当交易被包含在Batch里提交到L1合约上之后,任何人都没有权利再修改其中的交易顺序。

在第二步,Aggregator则是类似Proposer的角色,合约则类似validator的角色;Aggregator 提供了一个validity proof来声明一个新的状态是正确的,并告诉validator我提供的validity proof涉及哪些交易Batch,他们都存在了L1的哪个位置。

接着validator从合约中提取对应的Batch,与validity proof结合在一起就可以验证状态转换的合法性了,如果验证成功实际上合约内也会更新到对应validity proof的新状态。

  1. 从模块化的角度结构 Smart Contract Rollup

如果从模块化的角度来看,Polygon zkEVM 属于Smart Contract Rollup 类型,我们可以尝试解构下它的各个模块:

从 Delphi 给的图中, 我们也可以看出实际上 Polygon ZkEVM 作为 Smart Contrat Rollup的Consensus Layer,DA Layer 和 Settlement Layer其实都是耦合在polygonZkEVM.sol合约中,并不能很好的区分。

但是我们尝试着去解构各个模块:

  • 数据可用层(Data Availability Layer): Rollup交易存放的地方

  • 对于Polygon-zkEVM来说 ,当Sequencer调用SequenceBatch() 方法的时候,实际上就包含了往DA层提交交易数据

  • 结算层(Settlement Layer): 具体指的是Rollup和L1之间的资金流动机制

  • 具体指的是Polygon-zkEVM的官方桥(在下一篇文章会有详细介绍)

  • 共识层(Consensus Layer): 包含交易排序和如何确定下一个合法状态(分叉选择)

  • Sequencer 调用L1合约中的SequenceBatch() 的时候完成了交易排序的工作,当Aggregator 调用L1合约中的trustedVerifyBatches() 的时候完成了确认下一个合法状态的工作。

  • 执行层(Execution Layer): 执行交易并且得到新的世界状态

  • 当用户向Sequencer提交交易,并且Sequencer执行完之后得到新状态的过程(所以我们往往说rollup是计算扩容,因为L1把执行交易得出新状态的这个过程外包给了Rollup)

  • Sequencer会通过aggregator委托zkProver帮忙生成validity proof

  1. 为什么说 polygon-zkEVM 继承了L1的安全性

    1. 从上面介绍的整体流程上看,实际上Sequencer做了类似以太坊 Proposer的工作,提议了一批交易是有效交易,并且给出了这批交易执行后的新状态;而L1合约的验证逻辑,相当于所有L1的validator实际上都会在自己的以太坊客户端里执行一遍,实际上是所有的以太坊验证者充当了Rollup的验证者,因此我们认为 polygon zkEVM 继承了以太坊的安全性。

    2. 从另外一个角度上看,因为rollup的所有交易以及状态都存储在以太坊上,所以即便polygon zkEVM 这个团队跑路了,任何人都还是有能力依托以太坊上存储的数据,恢复整个Rollup网络。

  2. Polygon zkEVM 激励机制

      Rollup激励机制主要指的是如何让Sequencer和Aggregator有利可图,从而保持持续性的工作。

      首先用户需要支付自己在Rollup上的交易的手续费,这部分的手续费是采用ETH计价的,用Bridged ETH支付。

      Sequencer 则需要支付这些包含Rollup交易的Batch上传到L1交易的calldata上的成本(调用SequenceBatch(batches)的成本),同时需要在上传Batch的同时支付一定的Matic到L1合约中,用于之后支付Aggregator为这些Batches提供validity proof的成本。

      Aggregator 在调用trustedVerifyBatches() 为L1合约内还没有被finality的Batches提供validity proof的同时,也可以取出Sequencer提前支付在合约内的Matic代币,作为提供validity proof的报酬。

      Sequencer的收入如下:

      Aggregator的收入如下

    1. 收入 = Rollup所有交易的Gas费用 - 将Batches上传到L1花费的L1网络Gas费用 - 支付给Aggregator的证明费用(Matic计价)

    2. 收入 = Sequencer支付的Matic报酬 - 提交到validity proof到L1的Gas费用 - validity proof生成花费的硬件费用

调整支付给Aggregator的证明费用

同时为了避免Sequencer因为无利可图罢工,提供了以下的机制来调整Sequencer支付给Aggregator 的证明费用。

合约中存在这样一个方法用来调整为batch提供证明的费用:

function _updateBatchFee(uint64 newLastVerifiedBatch) internal

它会更改合约中一个名为batchFee的变量,而这个变量决定了Sequencer为每个Batch支付的Matic代币数量。

更改机制如下:

合约中维护了这样一个变量veryBatchTimeTarget ,代表每个Batch被Sequencer提交到L1之后期望在这个时间内被验证状态。

合约内会记录所有超过了veryBatchTimeTarget 之后还没有被验证状态的Batches,并且将这些batches的总数量记为 diffBatches

于是当有batches迟到的时候,会用以下公式来调整batchFee:

  • multiplierBatchFee 是一个被限制在1000~1024范围的数,可以通过函数setMultiplierBatchFee() 由合约管理员更改

 

function setMultiplierBatchFee(uint16 newMultiplierBatchFee) public onlyAdmin

  • 需要注意这里的 采用multiplierBatchFee 和10^3是为了实现3个小数点后的调整精度

同理假如Batches提前了也会触发相应的batchFee调整机制:

  • diffBatches 表示提前验证状态的Batches的数量

总结

在这篇文章里我们梳理了Polygon zkEVM的核心机制,并分析了它实现以太坊计算扩容的可行性。有了一个整体的大纲后,在接下来的文章里我们会深入到协议内部,依次解析zkEVM Bridge的设计细节,Sequencer的去中心化路线,zkProver的实现以及zkEVM的设计原理。

原文地址:https://blog.csdn.net/shangsongwww/article/details/134600805

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读903次。文章主要介绍了收益聚合器Beefy协议在币安智能链测试网网上的编译测试部署流程,以Pancake上的USDC-BUSD最新Curve版流动池的农场质押为例,详细介绍了完整的操作流程。_怎么在bsc网络上部署应用
文章浏览阅读952次。比特币的主要思路是,构建一个无中心、去信任的分布式记账系统。交易签名只能保证交易不是他人伪造的,却不能阻止交易的发起者自己进行多重交易,即交易的发起者将一个比特币同时转账给两个人,也就是所谓的双花。比特币应用的区块链场景也叫做公链,因为这个区块链对所有人都是公开的。除此之外,还有一种区块链应用场景,被称作联盟链。区块链的出现,使得低成本,去信任的跨组织合作成为可能,将重构组织间的关系,这个关系既包括企业间的关系,也包括政府和企业间的关系,还有政府部门间的关系。
文章浏览阅读2.5k次。虚拟人从最初的不温不火,到现在步入“出生高峰期”,元宇宙可以说是功不可没。此前,量子位发布了《虚拟数字人深度产业报告》,报告显示,到2030年我国虚拟数字人整体市场规模将达到2700亿元。其中,“身份型虚拟人”市场规模预计达到1750亿元,占主导地位,而“服务型虚拟人”总规模也将超过950亿元。得益于AI、VR/AR 等技术的发展,虚拟人的应用场景正在从传统的虚拟偶像等娱乐行业迈向更多元化的领域。_最喜欢的虚拟角色
文章浏览阅读1.3k次,点赞25次,收藏13次。通过调查和分析用户需求、兴趣和行为,你可以更好地定位你的目标受众,并在市场中找到你的定位。在设计你的Web3.0项目时,注重用户界面的友好性、交互流畅性和功能的创新性,以提供独特的用户体验。通过与有影响力的人或组织进行合作,推广你的Web3.0项目。通过与他们分享你的项目并抓住他们的推荐,可以迅速获得更多的关注度。通过优化你的网站和内容,将有助于提高你的排名,并增加有机流量。通过提供奖励激励计划,如空投、奖励机制等,激励用户参与你的Web3.0项目。的人或组织合作,可以增加你的项目的曝光度。
文章浏览阅读1.7k次。这个智能合约安全系列提供了一个广泛的列表,列出了在 Solidity 智能合约中容易反复出现的问题和漏洞。Solidity 中的安全问题可以归结为智能合约的行为方式不符合它们的意图。我们不可能对所有可能出错的事情做一个全面的列表。然而,正如传统的软件工程有常见的漏洞主题,如 SQL 注入、缓冲区超限和跨网站脚本,智能合约中也有反复出现的。_solidity安全漏洞
文章浏览阅读1.3k次。本文描述了比特币核心的编译与交互方法_编译比特币
文章浏览阅读884次。四水归堂,是中国建筑艺术中的一种独特形式。这种形式下,由四面房屋围出一个天井,房屋内侧坡向天井内倾斜,下雨时雨水会从东西南北四方流入天井,从而起到收集水源,防涝护屋的作用,寓意水聚天心,天人合一。在科技产业当中,很多时候我们需要学习古人的智慧与意蕴,尝试打通各个生态,聚四方之力为我所用,这样才能为最终用户带来最大化价值。随着数字化、智能化的发展,算力成为生产力的根基。在这一大背景下,算力需要贯通软..._超聚变csdn
文章浏览阅读1k次,点赞24次,收藏19次。云计算和区块链是当代科技领域两个备受关注的核心技术。本文将深入探讨云计算和区块链的发展历程,详细剖析其起初阶段的奠基、面临的问题、业务内容、当前研究方向、用到的技术、实际应用场景、未来发展趋势,并提供相关链接供读者深入了解。
文章浏览阅读1.5k次。融入对等网络的奥妙,了解集中式、全分布式和混合式对等网络的差异,以及区块链网络的结构与协议,让你跃入区块链的连结网络。揭开密码学的神秘面纱,探寻对称密码学、非对称密码学、哈希函数、数字签名等关键技术,让你了解信息安全的核心。解码共识算法的精髓,从理论到实践,从PoW、PoS到PBFT,让你深入了解区块链如何达成共识。探索智能合约的世界,从定义到生命周期,从执行引擎到开发与部署,带你进入无限可能的合约领域。了解令人惊叹的区块链世界,从概念到价值,从发展历程到政策法规,一篇章串联出区块链的精髓。
文章浏览阅读777次。8 月份,加密货币市场经历了明显的波动,比特币价格波动幅度较大。与此同时,NFT 市场出现大幅下跌,引发了人们对这一新兴行业未来发展趋势的担忧
文章浏览阅读8.8k次,点赞53次,收藏37次。近二十年来,我国信息科技发展日益成熟,出现的网络完全问题也是“百花齐放”。而元宇宙作为5G技术、AR/VR技术、云计算以及区块链等技术的组合体,其安全性指定会被人们所广泛关注。根据前面所讲,元宇宙融合了虚拟世界和现实世界,通过数据将现实世界的各种元素映射到数字化的虚拟世界中。所以没有数据,就等于没有元宇宙的一切;没有信息安全,元宇宙的社会生产、生活就不能正常有序地进行。所以足以可见数据安全、信息安全对元宇宙发展起到的重要作用!!_元宇宙 安全计算
文章浏览阅读1.4k次。最早使用历史 1991年采用 时间戳 追溯 数字文档,之后 2009年后创始人**中本聪** (satoshi nakamoto )日裔美国人,在设计比特币数字货币中将此理念写入应用程序中_web3.0学习
文章浏览阅读1.7k次。DeFi收益来源全面概述_drfi收益
文章浏览阅读941次,点赞17次,收藏21次。号外:教链内参1.28《从BTC现货ETF的近期数据看到的》隔夜BTC经历现货ETF通过后的情绪冷静,一度破位40k后又逐渐修复至42k上方。请珍惜42k的BTC吧。也许到下个周期,我们将不再有机会见到这个高度的BTC了。下面,让我们重温,42k的BTC,在过去四年穿越牛熊的过程中,带给我们的启迪吧。需要提醒的是,历史文字,自有历史局限性,回顾,也须带着批判性的目光阅读和审视。2021年2月8日,...
文章浏览阅读1.2k次,点赞23次,收藏21次。其实一开始我也是这么想的,但根据PoW算法机制,如果你的计算量不够大,是无法控制区块链的走向的,也就是说,即使你投入了大量的成本用于完成任务,也不能保证自己成功。例如,你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,那么你的币龄就会被减去一定的值,每减少365个币龄,将会从区块中获得0.05个币的利息(可理解为年利率5%),那么在这个案例中,利息=3000×5%/365=0.41个币。前面说过,谁的算力强,谁最先解决问题的概率就越大。
文章浏览阅读1.9k次。这里主要实现的部分继续下去,对 Blockchain 这个对象有一些修改,如果使用 TS 的话可能要修改对应的 interface,但是如果是 JS 的话就无所谓了。需要安装的依赖有:express现在的 express 已经不内置 body-parser,需要作为单独的依赖下载request不下载会报错,是使用 request-promise 所需要的依赖和已经 deprecated 了,具体 reference 可以参考。_js区块链
文章浏览阅读1k次,点赞19次,收藏19次。作者:Zach Pandl Grayscale编译:象牙山首席村民 碳链价值以太坊在2023年取得了丰厚的回报。但表现不如比特币以及其他一些智能合约公链代币。我们认为,这反映了今年比特币特有的积极因素以及以太坊链上活动的缓慢复苏。尽管以太坊的涨幅低于比特币,但从绝对值和风险调整值来看,今年以太坊的表现优于传统资产类别。以太坊不断增长的L2生态系统的发展可能会吸引新用户,并在2024年支撑以太币的...
文章浏览阅读908次,点赞20次,收藏20次。通证是以数字形式存在,代表的是一种权利、一种固有和内在的价值。徐教授告诉我:多年的职业经历,多年的为易货贸易的思考,认识到在处理贸易和经济领域的关系时,应以提高人民生活水平、保证社会成员充分就业、保证就业成员实际收入和有效需求的大幅稳定增长、实现世界资源的充分利用以及扩大货物的生产和交换为目的,期望通过达成互惠互利安排,实行公开、公平、公正的“三公原则”,开展国家与国家、企业与企业之间的易货贸易,规避因信用问题引起的各类风险,消除国际贸易中的歧视待遇,促进全球国家的经济发展,从而为实现上述目标做出贡献。
文章浏览阅读2.5k次。由于webase文档原因,查找起来比较局限,有时候想找一个api却又忘了在哪个模块的目录下,需要一步一步单独点,而利用文档自带的检索功能又因为查找文档全部信息,显得十分缓慢,所以整理了有关WeBASE的api列表但不可否认,现在只有列表,没有对应的页面跳转,文章目的也只是为了多了解webase的接口_webase私钥管理里获取
文章浏览阅读1.4k次,点赞28次,收藏21次。基于​openzeppelin来构建我们的NFT,并用一个例子来手把手的说明如何在opensea快速发布自己的NFT智能合约(ERC721)。