月亮链 月亮链
Ctrl+D收藏月亮链

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

作者:

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

如果你是WEB3加密界的新手,面对众多概念无从入手,那么欢迎你,来对地方了!!

本文围绕标准?ERC721协议,描述了Mint、?safeMint、?transfer等是如何实现资产管理的,并通过解读代码来了解它的安全性设计和以太坊数据上链成本构成。

1.所谓NFT资产是什么?

2.Mint和safeMint的差别

3.交易时会发生什么?有哪些细节设计

4.NFT哪些数据也存储在链上?

5.以太坊上存储有多贵?

Web3新手,有无技术背景均可:

研发——可无障碍阅读,理解精美的合约设计

非研发——可能读不懂列举的代码,但能体会标准协议的设计思路

在opensea上,可看到每个NFT都有个唯一的编号。

比如azuki系列中第4132号,在页面的Details栏目可以看到其合约地址,ID编号,部署所在公链等信息,而Properties栏目则是其设定的具备各种属性,对应的稀有度(非azuki本身携带,而是opensea整合计算的)。

而咱们回顾到源代码(此处取ERC721标准库openzepplin代码),会发现程序记录了全局性的两个字典类型的变量,通过?_owners中用数字映射地址的方式记录每一个ID?当前对应的所有者,同时也附带用_balances?记录了当前所有者总计持有的NFT数量

IMF副总裁:应采取监管行动以避免加密货币对传统金融带来系统性风险:金色财经报道,国际货币基金组织(IMF)副总裁呼吁在监管方面采取更多行动,以避免加密货币的起伏影响银行和传统金融机构。国际货币基金组织金融监管司副处长杉本信泰和国际货币基金组织副总裁李波认为,鉴于传统金融与加密货币之间的联系日益紧密,加密货币的波动性可能会给现有金融体系带来系统性风险。

IMF 博客文章指出,发达经济体也容易受到加密货币带来的金融稳定风险的影响,因为机构投资者在之前 的低利率环境中被更高的回报率所吸引,增加了稳定币的持有量。[2023/1/22 11:25:38]

并且由于ERC721创新性的赋予了一个ID对应地址的变量?_owners,从而与ERC20仅_balances?进行地址与余额的管理,区分出了FT(同质化)与NFT(非同质化)的差别。

Mint?意思为铸造,即每个NFT的创造过程,例如之前的爱死机NFT?当奈飞的NFT忘记了web2的业务安全

Mint?获取到该NFT的资产证明。

从源代码中可以看到,Mint?主要是进行了安全判断:

判断1:确保转入的不是0x00地址(黑洞地址无法转出,转入则资产损失)

判断2:确保此交易所操作的NFTID是不存在的

Meta已支持在Facebook和Instagram上展示个人所属数字收藏品:金色财经报道,Meta宣布已支持在Facebook上展示NFT,用户可将个人数字钱包连接至App后展示个人所有的NFT。Meta最早于5月向少数创作者和收藏家开放在Instagram上分享其持有的NFT的功能,之后于8月初宣布支持CoinbaseWallet和Dapper钱包连接以展示个人所持有的的NFT。[2022/8/30 12:56:17]

最终代码执行的操作是:

操作1:将转入地址的_balances?所持有总数加1

操作2:将对应?NFTID?的所有者修改为转入的地址

操作3:完成交易则发出emit?事件,可以让链下监听到这次交易的数据

中间有_beforeTokenTransfer和_afterTokenTransfer 属于虚函数,作为标准,是让项目方可以再不修改标准协议的情况下增加一些特定的逻辑代码用的。

safeMint 意为安全的铸造,从代码实现中可以看到他本身也是调用了MInt 但是他额外增加了_checkOnERC721Received 的判断,这点是属于ERC165的标准,相当于在完成转入操作后,则判断对方地址,是否是黑洞地址(即无法发起交易NFT操作的地址)是防止转入对象为合约地址时候,其合约没有预设置好转出的函数,导致资产在内无法被转走,从而造成永久损失。

币安发布支持以太坊合并的公告,届时将暂停ETH和ERC-20代币的充提业务:8月25日消息,币安发布关于支持以太坊合并计划的公告,称以太坊Bellatrix升级和合并预计将于北京时间9月6日19:34:47和9月15日8:30进行,币安届时将暂停ETH和ERC-20网络代币的充值、提现业务。

此外若硬分叉后并未产生新的代币,币安将尽快恢复ETH和ERC-20网络代币的充值、提现业务,并另行公告;若硬分叉后产生两条互相竞争的区块链并产生一种新的代币,“ETH”代码将会被用于以太坊PoS链,币安还将根据执行层升级前的ETH的持仓快照(预计于以太坊主网区块高度15540293或北京时间9月15日8:30),以1:1的比例从更少工作完成的链中向用户分发分叉的代币,并将会支持分叉代币的提现业务,关于分发的细节将另行公告说明。[2022/8/25 12:48:45]

设计初衷可见:https://eips.ethereum.org/EIPS/eip-165

是让合约接口标准化的提案,在编程语法中interface 是接口的意思,在其中定义的函数可以不实现仅仅放上函数名字相关参数,在程序复杂的时候,相当于目录一般告诉别人我都有什么功能。

但是接口的写法各有千秋,名字定义参数类型,甚至是否存在都有不同,

数字货币概念走强 楚天龙拉升封板:行情显示,数字货币概念走强,楚天龙拉升封板,神思电子、创识科技、恒宝股份、旗天科技、雄帝科技等纷纷大幅跟涨。[2022/7/26 2:37:43]

所以此提案最终形成了ERC165标准,规范了接口的识别规则。

使用流程是:

STEP 1?判断是否存在?supportsInterface?函数,并且其符合165标准

STEP?2通过?supportsInterface?函数,判断是否具有转出NFT的函数

(PS:让合约具备NFT接收转出功能,可通过引入?IERC721Receiver.sol?拓展包来实现)

标准协议设计有两种转移方式,transfer?和?transferFrom,作用于两种场景:

transfer 转移:由用户调用,将本消息发送的钱包所持有的NFTID转移到指定地址

transferFrom 从转移:用某机构调用,需要用户先授权某地址,让其有权可转移。

类比一下:

transfer?就是现金交易,从自己口袋里拿钱支付

transferFrom?就是扫码扣款,由店家申请扣款,受制于用户是否开通小额代扣权限

Freeway回应FWT代币波动:桥接服务商Coffe遭攻击,暂时禁用平台FWT提款等服务:7月14日消息,质押平台Freeway发推称,其代币FWT价格在7月13日发生了剧烈波动,目前正在调查当中。Freeway的区块链桥接服务提供商Coffe遭到攻击,大量FWT代币从Coffe的桥接钱包中移除,随后被出售。Freeway确认其平台没有受到任何损害,Supercharger也不受影响。但在调查期间,Freeway暂时禁用了平台上的FWT提款、存款和购买服务。[2022/7/14 2:13:33]

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

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

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

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

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

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

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

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

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

交易的环节也看完后,其实很多新同学也顿感奇怪,原来我买的NFT只有一个ID的归属地址指向了我,从而达成了唯一性。那就算如此,稀有度信息放在哪里?我的NFT图像本身在那里?

这就是涉及到ERC721的元数据拓展IERC721Metadata.sol

要放什么都可以,但是项目方往往在链上只存储最基础的ID+IPFS的地址。

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

Azuki上合约地址是:0xed5af388653567af2f388e6224dc7c4b3241c544

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

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

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

这里是本文稍难的地方。咱们从源码来分析链上存储的成本构成以及金额换算

成本产生将有2个方面,按执行流程来看

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

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

咱们可以核对下以太坊黄皮书,里对交易数据大小所消耗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美金

由于交易发起后,还有智能合约上存储的逻辑,咱们从以太坊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 美金

真可谓寸土寸金!

标签:NFTGASINTTRANFTART币gas币是什么币cointiger交易所TRAC价格

狗狗币价格热门资讯
NFT:纽约最高法院首次使用NFT为法院文件提供服务_COIN

上周,纽约最高法院空投了NFT作为“服务通证”,开创了NFT领域的新里程碑事件,可能会在几十年内对NFT领域产生重大影响.

1900/1/1 0:00:00
BOX:灰色的数字藏品二级市场 你买的是NFT还是JPG_铂链币区块链下载

数字藏品(NFT)市场入夏,逐渐火热了起来。有人将现今国内的数字艺术品市场视为“跑马圈地”,各类平台暗流涌动,玩转的花样层出不穷.

1900/1/1 0:00:00
元宇宙:当营销遇上元宇宙 会碰撞出怎样的火花?_ALG

2021年,各大品牌对元宇宙将信将疑,2022年已大势所趋。从国际品牌可口可乐、苏富比、雅诗兰黛、古驰,到中国品牌海信、海尔、元气森林,元宇宙营销确然是摆在桌面上的首要命题.

1900/1/1 0:00:00
NFT:重新定义社交媒体:我们离Web3还有多远?_NFTSHIBA价格

Web2的社交媒体具有流量垄断地位,Web3带来了一些变量,使用户走在产品开发之前。同时社交媒体巨头正在进军NFT领域,并尝试与自己的业务场景做融合.

1900/1/1 0:00:00
WEB:Web3在遥远的未来?不 它已经来了_泰达币区块链交易查询

FaceBook更名MeTa,让元宇宙一词火爆出圈,一时风头无两。在确定了元宇宙未来方向的同时,也同时给目前人类互联网时代的发展方向确定了目标.

1900/1/1 0:00:00
元宇宙:元宇宙进行时:那些跑步入场的互联网大厂在如何谋篇布局?_VER

2021年10月28日,互联网巨头Facebook改名为Meta,瞬间引爆全球各大新闻媒体平台,同时也把Meta这一词汇推到众多人眼前.

1900/1/1 0:00:00