火星链 火星链
Ctrl+D收藏火星链
首页 > BNB价格 > 正文

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

作者:

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

内容概要

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

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

目录大纲

1.所谓NFT资产是什么?

2.Mint和safeMint的差别

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

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

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

面向对象

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

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

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

1.所谓NFT资产是什么?

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

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

1.1资产在标准ERC721协议里是什么?

消息人士:Prime Trust准备进行大裁员,比例或达75%:金色财经报道,据Coindesk援引前雇员消息称,陷入困境的加密货币托管机构Prime Trust最近被勒令停止运营,似乎准备进行大规模裁员,多达 75% 的工作岗位可能会被取消。消息人士称 ,今年早些时候,该公司将员工人数削减了三分之一。

Prime Trust正在应对严峻的财务和监管挑战,内华达州一家法院最近将该公司置于破产管理状态,该州下令 Prime Trust 停止所有活动,原因是客户资金短缺,并被指控利用客户资金来满足提款请求,这发生在BitGo终止收购该公司的交易后不久。[2023/8/12 16:21:34]

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

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

2.Mint和safeMint的差别

2.1?Mint是如何进行的

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

加密衍生品交易平台Power Trade为机构客户推出托管和结算服务:11月15日消息,加密衍生品交易平台Power Trade周一宣布,已与总部位于伦敦的托管公司Copper合作,为其机构客户提供托管和结算服务。

Power Trade将使用Copper的Clear Loop技术,让客户能够在交易平台进行交易,同时将交易平台外的资产保持在独立托管之下,从而最大限度地降低交易对手风险。上个月,PowerTrade表示正在为期权市场推出RFQ(询价)模型以迎合机构投资者的需求。[2022/11/15 13:06:08]

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

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

判断1:确保转入的不是0x00地址

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

最终代码执行的操作是:

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

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

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

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

AAVE新提案:Aave DAO应在以太坊合并上明确立场,承诺支持POS共识的主网而非分叉:8月17日消息,AAVE新提案要求,Aave DAO应承诺选择在权益证明共识下运行的以太坊主网,而不是运行替代共识(例如工作证明)的任何以太坊分叉。如果提案通过,Aave协议将在工作量证明(PoW)以太坊链上关闭。

提案认为,Aave协议作为TVL最大的DeFi应用之一和基础设施的重要组成部分,为DeFi生态系统中的数百个其他dApp和体验提供动力。DAO应该向DeFi生态系统发出明确的信号,Aave DAO被应该明确以太坊合并方面的立场,表明Aave协议应致力于以太坊主网,并在权益证明共识下运行。[2022/8/17 12:30:03]

2.2为何safeMint更安全

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

2.3ERC165是如何防止资产转入黑洞的?

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

以太坊链上智能合约数量突破5000万:8月9日消息,据Dune Analytics数据显示,以太坊链上智能合约数量已突破5000万个,截至目前约为5110万个。此外,当前以太坊链上地址数量为2.12亿个,交易数量达到16.7亿笔。[2022/8/9 12:11:30]

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

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

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

使用流程是:

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

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

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

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

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

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

欧易OKX与Tether达成合作,将基于OKX Chain发行USDT:7月13日,欧易OKX与Tether正式达成合作,Tether将基于OKX Chain(下称OKC)网络发行USDT。OKC基于Cosmos SDK构建,100%兼容EVM。未来,用户可以使用OKX Web3 Wallet将USDT跨链至Cosmos生态中。此举可以大大缩短用户参与Cosmos 生态的路径,让用户体验更为快速、便捷的USDT链上转账服务。

欧易OKX技术负责人谈到:OKC USDT已在大部分交易平台上线。为了能给OKC用户带来更加安全、快速、顺滑的体验,我们从未停歇。

Tether首席技术官Paolo Ardoino亦表示:我们很高兴与OKX这样强大的合作伙伴达成长期合作,这也是Tether在Cosmos生态的首次尝试。对于OKC在未来新场景、新业务中的探索,我们将鼎力支持。

据悉,本次合作也是Tether首次支持交易平台自主研发的公链。[2022/7/13 2:10:55]

类比一下:

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

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

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

3.1?transfer?是如何进行的

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

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

3.2transferFrom是如何进行的

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

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

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

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

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

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

4.还有哪些数据可扩展存储在链上?

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

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

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

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

Azuki上合约地址是:0xed5af388653567af2f388e6224dc7c4b3241c544

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

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

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

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

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

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

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

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

5.1交易发起的成本

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

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

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

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

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

所以如果是再?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源代码中,来分析具体的消费量,代码具体在函数内,太长了不全粘来:

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

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

gas消耗计算,依赖3个种数据的管理形式

从零值地址到非零值,每个存储槽需消耗2Wgas

从非零值地址到零值地址,每个存储槽需消耗5Kgas,但会有奖励1.5Wgas退回

从非零到非零,每个存储槽需消耗200gas

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

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

真可谓寸土寸金!

来源:金色财经

标签:NFTTRAINTGASNFTLASTRADAO价格IntelliSharebnb局gas费

BNB价格热门资讯
ACK:独家对话Dora:如何解决去中心化治理中的隐私及共谋问题

过去两年,去中心化治理中的隐私及共谋问题被频繁提及,相对于“操纵”和“女巫攻击”这两大挑战来说,隐私及共谋也是较难解决的问题。整个加密货币生态的规模化发展,将隐私及共谋的问题充分的暴露了出来.

1900/1/1 0:00:00
CRY:「邀请新人领积分、得奖品」6月6日-6月12日获奖结果公布

6月6日-6月12日邀请新用户数量排名前十的用户分别为:请以上获奖用户联系金色财经客服,登记并领取奖励。6月17日23:59前未联系客服的视作放弃奖励.

1900/1/1 0:00:00
HOO:空头趋势 二次下探

6月10日热点;1.美国证交会正在调查UST稳定币崩盘对Terraform所构成的新威胁2.endofsartoshiNFT一级市场收入超过85万美金3.

1900/1/1 0:00:00
加密货币:LUNA 和 UST 崩盘后 稳定币格局如何多样化

像电影戏法一样,以慢动作Terra的稳定币——UST和原生币为背景,LUNA见证了一场巨大的崩盘。于是,震惊了投资者的骨髓.

1900/1/1 0:00:00
1INCH:1inch Network 宣布整合 Opium

1inchNetwork今天宣布整合衍生品平台Opium,整合后用户能够直接在1inchdApp中使用Opium衍生品池,所有交易都可以通过Opium的智能合约完成.

1900/1/1 0:00:00
COIN:数字人民币持续推进 带来哪些利好?

当前,随着数字人民币试点地区范围的扩大,其应用场景也在扩容,除了覆盖生活、商业场景之外,在税务、政务、借贷、对公等领域的试点正加速落地.

1900/1/1 0:00:00