当前位置:主页 > 列表页 > 正文

源码解读:你买的NFT到底是什么?

2022-06-14 19:01 | 出处: odaily

安全性设计和以太坊数据上链成本构成。

目录大纲

类比一下:

接下来咱们从代码来看看,其中可能有会意想不到的细节。

3.1 transfer 是如何进行的

他会检测当前交易的 from 方是否是此NFTID的持有者,并且限制该NFT转入0 x00地址。其次进行 from 转出地址和 to 转入地址的余额刷新,修改 _balances全局变量并且重新设置_owners此NFTID的所有者地址修改为to。

这里有个防护的细节会先执行_approve(address(0), tokenId) 清空历史授权,如果没有这一步,则资产完成了转移,但是其NFTID的转移授权依旧在,细思极恐:

3.2 transferFrom是如何进行的

这里的交易本质调用的是_safeTransfer 所以他的核心逻辑是require 部分,

这的一大细节是:_msgSender() 这是openzepplin的标准库Context.sol 中的方法。

其实就是获取当前交易的发送者地址,但这里使用了封装版本,而不是直接使用msg.sender

是考虑到,可能存在一种交易类型“元交易” ,即交易的付费gas方和交易发起方不相同的情况。

所以一些处于中间环节的,类似library的合约需要考虑这种特殊情况。

其余部分判断是确定是否有授权记录,易于理解,不作赘述

IPFS的地址。

咱们可以通过之前Etherscan教程方法来看看一些项目数据有什么?

Azuki上合约地址是:0 xed5af388653567af2f388e6224dc7c4b3241c544

通过Read Contract可以查阅到,其元数据只存放了ipfs上的指向地址

而近期兴起的Metaverse项目元宇宙土地sandbox和****Decentraland ,以及去年火热的****Axie Infinity ,基本链上存储元数据也只是ID 网址。

像mirror那些是专门设计低费用可进行高存储,一个块常规都是30M起步,大约是以太坊的1000倍。

  • 用户发起一笔交易,将要写链上数据作为参数传入,其大小是一笔成本

  • 交易执行合约代码,依据修改和使用,EVM计算消耗的gas成本。

  • 5.1 交易发起的成本

    咱们可以核对下以太坊黄皮书,里对交易数据大小所消耗gas有清晰的定义

    可以看到交易所附带的参数的价格:

    • 每笔交易都有21000 GAS需要支付

    • 为交易的每个非零字节数据或代码支付68 GAS

    • 为交易的每个零字节数据或代码支付4 GAS

    所以如果是再 Mint 的时候,登记上若干NFT属性信息,交易的data部分会将abc等字符转成2个十六进制表示,而每个字符为一个八位二进制,等于一个byte。所以可以约等于将data的长度除以2作为byte数。

    而1kb的数据,如果都是非0的有信息量的文本信息,则等于增加是68*1000=6.8W 的gas消耗。20gwei的gas价格和2000的eth兑换美元价格,可以估算出,每上链1kb数据在交易发起端就要:

    20*(21000 68000)*1e9/1e18 * 2000 = 3.5美金

    5.2合约存储的成本

    由于交易发起后,还有智能合约上存储的逻辑,咱们从以太坊go源代码中(EIP1283),来分析具体的消费量,代码具体在函数内,太长了不全粘来:

    func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64)(uint64, error)

    历史上GAS消耗的估算有经过若干迭代,如果是Petersburg或者 Constantinople 未激活的话,则不按下面逻辑进行计算

    gas消耗计算,依赖3个种数据的管理形式(增删改)

    • 从零值地址到非零值(NEW VALUE),每个存储槽需消耗2Wgas

    • 从非零值地址到零值地址(DELETE),每个存储槽需消耗5Kgas,但会有奖励1.5W gas退回

    • 从非零到非零(CHANGE),每个存储槽需消耗 200 gas

    注意,上述每一个存储槽算32byte,1kb存储则是32个存储槽。Mint 的过程是新增存储,所以如果新增1kb的数据存储在链上代价将是64Wgas,换算成金额则是:

    20*(640000)*1e9/1e18 * 2000 = 25 美金

    真可谓寸土寸金!

    前文回顾

    EIP-5058 能否防止NFT项目方提桶跑路?

    当我们在看Etherscan的时候,到底在看什么?

    当奈飞的NFT忘记了web2的业务安全

    您可能感兴趣的文章:

    相关文章