月亮链 月亮链
Ctrl+D收藏月亮链
首页 > 世界币 > 正文

SHI:最流行的ERC721模板比较_ABL

作者:

时间:1900/1/1 0:00:00

除了最近的宏观经济事件导致市场略微看跌外,我认为我们可以确信我们仍处于 NFT 牛市的中间。

在这轮牛市中,每周都有数百个项目推出,其中大部分都是类似的智能合约。由于在这个领域几乎所有的东西都是开源的,因此很容易实施被证明有效的解决方案。

然而,这导致项目复制粘贴当前流行的少数NFT智能合约模板,而没有真正理解每个实施中存在的不同的优缺点。

为了在一定程度上消除这种混乱,有必要研究一下最流行的模板,检查每种模板的优缺点,并尝试得出一些关于不同类型项目的最佳合约的结论。

NFT起源于EIP-721不可替代代币标准提议。这个几乎每个人都使用的提案的OG实现是由OpenZeppelin完成的。

ERC721提供的功能很快被证明是不够的,许多项目开始采用ERC721Enumerable扩展。该扩展通过在合约中添加所有代币ID的可枚举性,以及检查帐户拥有的所有代币ID的方法,来增强原始ERC721的功能。

然而,这就是我们开始遇到麻烦的地方。ERC721Enumerable的问题是,它做了很多不必要的事情,导致了gas成本的上升,给社区造成了数百万美元的损失。

ERC721Enumerable可以优化读取函数,但不利于写入函数。

ERC721Enumerable使用了大量的冗余存储,这不仅提高了代币的铸造成本,而且也提高了代币的转账成本。

ERC721Enumerable.sol

哈萨克斯坦启动未注册加密货币交易服务追查,目前已至少查封5家平台:金色财经报道,哈萨克斯坦共和国金融监督局 (FMA) 开始追查未经许可的加密货币交易服务,目前已至少查封了 5 家平台,分别是:kzobmen[.]com、1wm[.]kz、kazobmen[.]ru、wm007[.]kz 和 kz-exchange[.]com,监管机构还没收了平台运营商有关的物品,比如笔记本电脑、手机和闪存棒,以及银行和会计文件等。哈萨克斯坦金融监督局提醒,目前只有获得监管批准并在阿斯塔纳国际金融中心(AIFC)的特殊法律制度下注册才能从事加密货币交易活动。(bitcoin.com)[2023/1/27 11:31:22]

这些是状态修改函数,在每次更新或转账发生时执行。

我们可以清楚地看到ERC721Enumerable不是一个理想的选择,不应该再被大多数项目使用。

幸运的是,一些聪明的开发人员已经注意到了这些效率低下的问题,并设计了解决方案。

建议大家阅读整篇文章,熟悉解决方案,这个合约的基本前提是,它把优化的重心翻转过来,把写入函数的成本优化为读取函数的成本。这很好,因为如果读取函数在链下被调用 ,那么它们不会花费我们的钱。背后的基本原理ERC721Enumerable可以访问以下三个函数:totalSupply、tokenByIndex和tokenofOwnerByIndex。

我们可以忍受这些函数的低效率和无限循环,因为它们几乎总是在链下被调用。

这个实现首先用一个数组替换ERC721中的_balances和_owners映射。

优化的 ERC721Enumerable by Chance

印度央行将于周四测试零售版数字卢比:11月29日消息,印度中央银行将于周四开始试行其数字货币的零售版本,最初参与试点的 4 家银行包括印度国家银行、ICICI 银行、Yes Bank 和 IDFC First Bank。另外 4 家银行将在稍后阶段加入,试点范围可能会根据需要逐步扩大。

印度中央银行表示,电子卢比将提供“实物现金的特征,如信任、安全和最终结算”,并补充说它不会赚取任何利息,可以转换为其他形式的货币,包括银行存款。银行将通过手机上的数字钱包分发电子卢比。个人对个人的交易和向商家的付款都是可能的。(彭博社)[2022/11/29 21:10:30]

_mint函数更改为:

偶然优化的 ERC721

ERC721Enumerable中的视图函数更改为:

tokenOfOwnerByIndex的循环是非常低效的,但这也无伤大雅,因为它几乎总是在链下被调用,因此是免费的。

如上所述,上面的版本还删除了_balances数组,从而减少了额外的存储写入操作。因此,balanceOf函数循环遍历整个owners数组,以确定地址的余额。这又是一个非常低效的读取操作,然而,与tokenOfOwnerByIndex相反,我可以想象有几十种情况需要在链上检查地址的余额。

例如,通过MetaMorphies,我们已经在开发NFT质押池,一个治理系统,其中以代币所有权授予投票权,以及一个移动增强现实应用程序。这个复杂系统的各个部分将检查链上的余额,所以它必须是高效的。

Web3基础设施WalletConnect宣布完成1250万美元融资:金色财经报道,Web3基础设施WalletConnect宣布完成1250万美元融资,?1kx、Union Square Ventures、Shopify、ConsenSys和Gnosis领投。WalletConnect希望为非托管钱包提供社交功能,例如钱包到钱包的聊天和身份验证。?[2022/11/3 12:14:19]

即使你不想挂载任何其他合约,如果你的mint函数允许一个地址在铸币之前检查它所拥有的代币数量,就应该小心。对于最初的几位矿工来说,这可能是件好事,但对于第8756位矿工来说,这将是一场灾难。

当涉及到高价值的操作时,盲目地复制粘贴代码是不可取的。一个解决方案在其作者的案例中完美地工作并不意味着它将自动应用到我们项目的特殊需求。

Chance建议的另一个优化是预先批准OpenSea代理注册合约,以转移代币,并允许基础合约所有者在未来可以将任何其他合约挂载到基础合约,并在isApprovedForAll中自动为其返回为true。

这个解决方案在很多方面都存在严重的问题:

如果Open Sea代理注册表被破坏了怎么办

如果已安装的合约受到损害怎么办

如果基础合约的所有者决定采取行动,并从合约中拿走所有代币,该怎么办

如果基础合约所有者的钱包被盗怎么办

实施此模式后,如果发生上述任何一种情况,攻击者就可以从每个所有者那里获取所有的NFT。这只会导致更多的攻击向量和信任假设,而节省20美元的批准交易成本,却有损失数百万美元价值的潜在风险。

优化是一件非常好的事情,但还有更高级的东西,这是区块链和加密领域的基本前提:构建无需信任的系统。

观点:通货膨胀伤害了审慎的储蓄者,而比特币会给未来带来希望:8月3日消息,储蓄能力是自我调节和规划未来的重要工具,但当通货膨胀变得不可控制时,那些努力延迟满足的人会为他们的选择受到惩罚。另一方面,临床心理学家Jordan Peterson认为,比特币的作用恰恰相反。

根据Peterson的说法,恶性通货膨胀伤害了那些耐心投入工作并为未来储蓄的人。他将这些人描述为“我们社会的支柱”,Peterson认为,这些人对文明的安全和生存至关重要。

他强调,在通货膨胀扭曲市场的情况下,比特币却没有受到这种扭曲或干扰,这是他对比特币感兴趣的原因之一。这位心理学家表示,加密货币使自由市场成为可能。(Cointelegraph)[2022/8/3 2:56:42]

另一个非常聪明,而且最近非常流行的解决方案是由Chiru Labs开发的ERC721A合约。让我们看看在这个智能合约中发生了什么。

ERC721A的基本前提是能够以铸造单个 NFT的成本铸造多个 NFT。让我们看看都做了哪些优化,以及合约是如何工作的。

根据开发团队的描述,第一个优化是去除ERC721Enumerable引入的冗余存储,类似于Chance的做法。

第二,第三优化的是每个批次铸币请求更新一次所有者的余额和代币所有权数据。

for循环被移除,因此ERC721A兑现了它的承诺,以铸造单个 NFT的成本铸造多个 NFT。

但这引发了多个问题:合约如何存储代币ID和所有权数据?如何确定代币的所有权?如何代币转账?

ERC721A利用两个结构和两个映射来存储所有权数据。

SHIB二层扩展解决方案Shibarium或将于6月推出测试网:6月7日消息,社区成员猜测,Shiba Inu(SHIB)的第二层扩展解决方案Shibarium测试网可能将于6月推出。SHIB首席开发者Shytoshi Kusama最近在推特发布GIF动图,并配文“laughter in Shibarium”,引发了这一猜想。

此外,该团队的一篇博客文章指出,交易将“在几秒钟内获得批准,只需花费几分钱”。Shytoshi Kusama在Shiba Discord中证实,“Shibarium将为每项服务、游戏或任何基于其构建的东西提供低费用(标准)。”(Beincrypto)[2022/6/7 4:07:53]

ERC721A 结构

看这些名字,就可以了解其用途。TokenOwnership使用单个存储槽来存储关于代币所有权的一些信息,AddressData使用单个存储槽来存储关于铸币人地址的信息。

ERC721A所采用的方法乍一看似乎是反直觉的,所以让我们来看看在不同操作期间如何写入和读取存储以达到合约的正确状态。

假设我们是从合约中创建的第一个地址,并且我们铸造了10个代币。在这种情况下,会发生以下情况:

图 1:ERC721A 中的 Mint 操作

在我们的批处理中,第一个ID是0,因此合约为了代币ID和时间戳而使用批处理大小和tokenownership结构来配置AddressData结构。其余代币ID的数据为空。那么我们如何确定所有权呢?这不是问题吗?

要理解为什么不是,让我们看看合约如何确定代币的所有权。

图 2:在 ERC721A 上调用 ownerOf()

让我们假设这个操作遵循上一个铸造10个代币的操作。我们感兴趣的是代币ID为3的所有者,因此我们调用ownerOf(3)。ownerOf(3)]处的槽是空的,所以函数移动到前面的ID。直到找到一个具有所有权地址的代币为止。

但是如果我将代币ID为0的转移到另一个地址会发生什么呢?我的所有代币都带有空数据吗?在这种情况下,如何确定所有权?让我们看看_transfer函数内部发生了什么。

图 3:ERC721A 中的 _transfer()

当代币转账时,代码检查下一个代币是否设置了所有者,如果没有,就将from地址设置为所有者。我们知道,代币ID是在造币时按升序分配的,因此如果一个地址铸造了多个代币,如果所有权数据没有初始化,它也必须拥有下一个代币。

当检查ERC721A合约时,我的第一个想法是它确实为批量铸造保持了低成本,但它在ownershipOf中有一个讨厌的循环,并且每次发生代币转移时它都会调用ownershipOf。这似乎是一种可以反咬用户一口的东西。

ERC721A 中的 _ownershipOf

这确实是一个合理的担忧。为了说明这些成本会增加多少,让我们想象一个不现实的场景,在一个交易中铸造350个代币,然后检查代币ID为330的所有权并进行转账。(getOwner函数是一个简单的函数,它调用ownerOf,然后将一些内容写入存储,以说明任何写入函数调用的成本)。

ERC721A 的gas估算

在2708美元/ETH和70 gwei/gas的价格下,检查所有权和转移ID为 330 的单个代币的成本高于铸造 350 个代币。这是因为_ownershipOf中的循环从330变为0,并且每个SLOAD操作都要消耗gas。

如果我们再次铸造350代币,但转移代币ID 1 而不是 330,则数字看起来会有很大的不同。

我们会阻止任何人从我们的合约中铸造那么多代币。假设我们限制最大的批量大小为10个。如果有人铸造了10个代币,然后试图转移ID为9的代币,数字是这样的:

因此,根据正在转账的代币ID,检查其所有权,gas成本可能会有很大的差异。

对于许多考虑实施该合约的项目来说,这可能会破坏交易。一方面,如果你把批量的大小限制在一个小的数量,这可以节省很多钱且是有效的。我认为大多数集合都有一个有限的批量大小,假设是10个,所以对大多数人来说,这应该不是问题。

如果不限制批处理大小,就会归结为你是否相信你自己的客户在代币转账之前对智能合约进行了深入的思考,以及是否对你的项目进行了篡改,即单个代币转账会让他们付出巨大的代价。

如果你打算将此合约安装到任何类型的复杂生态系统中,还必须考虑_ownershipOf函数的潜在缺陷。正如我在上面所说的,许多合约(比如质押池)会检查代币的余额和所有权,所以如果在链上调用这些函数,我们的目标应该是使它们高效。

最后,让我们进行几次测试,以直观了解每种解决方案的潜在gas成本。下面我们从每个实现中创建1、3、5和10个代币,各5次。Custom721A是我们的ERC721A实现,CustomEnumerable是优化后的ERC721Enumerable, OZEnumerable是Open Zeppelin版本。

铸造一些代币的结果

这些观察结果与我们上面讨论的一致。Open Zeppelin 版本在任何地方都非常昂贵且效率低下。如果你只铸造一个代币,Custom721A和CustomEnumerable的成本大致相同,如果你铸造多个代币,则Custom721A的成本几乎保持不变,并随着CustomEnumerable的循环大小而增加。

现在让我们从上面的假设场景中尝试一下:我们铸造350个代币,然后随机挑选20个代币ID,然后检查所有权并进行转账(ERC721A的已知弱点)。

铸造和代币转账的结果

这与我们之前讨论的是一致的。检查所有权的成本约为ERC721A的5倍,而代币转账的成本约为4倍。

我们还可以清楚地看到,批量铸造正是ERC721A真正的亮点所在。铸造350个代币只需要147美元,而对于CustomEnumerable来说,同样的操作需要11倍以上的成本。但是,在一批铸造350个代币是非常不现实的。

那么,你是不是正站在十字路口,使用哪个?我可以很自信地说,这要视情况而定。

本文最重要的一点应该是,当涉及到智能合约时,你必须了解导入到代码库中的所有内容的来龙去脉。请不要盲目地复制-粘贴代码,即使它来自一个非常可靠的来源,因为他们的解决方案可能不适合你正在进行的项目的特定需求。

Source:https://medium.com/coinmonks/comparison-of-the-most-popular-erc721-templates-b3614353e31e

标签:SHIOWNNERABLFLOSHIN价格Top Down Survival Shooter6 GenerationABL币

世界币热门资讯
AND:如何为The Sandbox地块估值?是什么推动了地价?_sandwich币怎么样

自Meta公司去年10月宣布进军元宇宙以来,虚拟地块NFT的需求激增,推动了价格上涨。The Sandbox已经在领先的元宇宙区块链项目中确立了自己的地位.

1900/1/1 0:00:00
区块链:德勤:元宇宙综观—愿景、技术和应对_区块链dapp开发框架

序?2021年11月,元宇宙在经过了长期酝酿后,随着Facebook公司的改名产生了一个高潮,资本市场估值也随之飙高。3个月后,到2022 年的2月,相关公司的市值已经明显下降.

1900/1/1 0:00:00
WEB:金色学院前沿课第二讲:Web3.0时代,从创新到创造_BSP

课程介绍:有人说Web3.0是互联网的下一个时代,对于很多人来讲,这一词属于这个时代的“新物种”.

1900/1/1 0:00:00
2022元宇宙产业发展趋势报告:元宇宙的四大特性

《2022元宇宙产业趋势报告》(下称《报告》),将元宇宙发展理论与产业实际发展状况相结合,深度解读元宇宙产业发展的形势,并为元宇宙产业未来发展趋势把脉.

1900/1/1 0:00:00
比特币:为解决环境问题 比特币矿工建造再生能源驱动的工厂_CargoX

本文由”老雅痞laoyapicom“授权转载在德克萨斯州乡村深处一条泥泞的道路上,加密货币公司Argo Blockchain正在为互联网时代建造一座发电厂:这是一个加密货币“挖矿”据点.

1900/1/1 0:00:00
NFT:Digital Fashion :元宇宙里的下一个万亿机会_DIGITALAX

在安徒生 1837 年撰写的童话《国王的新装》中,讲述了一位皇帝被两个子愚弄,穿上了一件看不见的——实际上根本不存在的新装,赤裸裸地举行游行大典的故事.

1900/1/1 0:00:00