安全性设计和以太坊数据上链成本构成。目录大纲
NFT资产是什么?
2.Mint和safeMint的差别
4.NFT哪些数据也存储在链上?
面向对象
Web3新手,有无技术背景均可:
研发——可无障碍阅读,理解精美的合约设计
非研发——可能读不懂列举的代码,但能体会标准协议的设计思路
公链等信息,而Properties栏目则是其设定的具备各种属性,对应的稀有度。
1.1资产在标准ERC721协议里是什么?
而咱们回顾到源代码,会发现程序记录了全局性的两个字典类型的变量,通过?_owners中用数字映射地址的方式记录每一个ID?当前对应的所有者,同时也附带用_balances?记录了当前所有者总计持有的NFT数量
并且由于ERC721创新性的赋予了一个ID对应地址的变量?_owners,从而与ERC20仅_balances?进行地址与余额的管理,区分出了FT与NFT的差别。
Lookonchain:过去10小时内多个巨鲸地址出售GRT:7月4日消息,据 Lookonchain 监测,0xde32开头巨鲸地址在过去 7 小时内向 Binance 存入 600 万枚 GRT (约合 77.6 万美元),并通过另一个钱包在 DEX 上出售 75 万枚 GRT(约合 10 万美元)。目前,该鲸鱼钱包中仍持有 322 万枚 GRT(约合 41.6 万美元),并质押了 2530 万枚 GRT(约合 325 万美元)。
此外,另两个巨鲸地址也在 10 小时前向 KuCoin 存入 680 万枚 GRT(约合 88.6 万美元)。[2023/7/4 22:16:59]
2.Mint和safeMint的差别
2.1?Mint是如何进行的
Mint?意思为铸造,即每个NFT的创造过程,例如之前的爱死机NFT?当奈飞的NFT忘记了web2的业务安全
Mint?获取到该NFT的资产证明。
从源代码中可以看到,Mint?主要是进行了安全判断:
判断1:确保转入的不是0x00地址
华尔街日报:FTX寻求收回SBF的数百万美元慈善捐款:1月8日消息,FTX的新管理层正在寻求追回该加密交易所及其前首席执行官SBF捐赠的数百万美元。SBF的一位发言人表示,慈善捐款并非来自客户存款,而是来自交易利润。该慈善机构于2022年2月宣布,计划在第一年部署超过1亿美元,捐款高达10亿美元。[2023/1/9 11:01:37]
判断2:确保此交易所操作的NFTID是不存在的
最终代码执行的操作是:
操作1:将转入地址的_balances?所持有总数加1
操作2:将对应?NFTID?的所有者修改为转入的地址
操作3:完成交易则发出emit?事件,可以让链下监听到这次交易的数据
中间有_beforeTokenTransfer和_afterTokenTransfer属于虚函数,作为标准,是让项目方可以再不修改标准协议的情况下增加一些特定的逻辑代码用的。
2.2为何safeMint更安全
safeMint意为安全的铸造,从代码实现中可以看到他本身也是调用了MInt但是他额外增加了_checkOnERC721Received的判断,这点是属于ERC165的标准,相当于在完成转入操作后,则判断对方地址,是否是黑洞地址是防止转入对象为合约地址时候,其合约没有预设置好转出的函数,导致资产在内无法被转走,从而造成永久损失。
FTX CEO:公司控制彻底失效、财务信息毫无可信度:金色财经报道,FTX新任CEO JOHN J. RAY III在提交给特拉华州法院的文件中对SBF管理不善的行为进行了评估。John Ray批评FTX存在记录保存不力问题、高级管理人员缺乏经验。
John Ray表示,在其职业生涯中,从未见过如此彻底的公司控制失效,以及如此缺乏可信度的财务信息,就像在FTX发生的那样。从系统完整性受损、国外监管失误,到控制权集中在极少数缺乏经验、不成熟且可能受到损害的个人手中,这种情况是前所未有的。[2022/11/17 13:18:22]
2.3ERC165是如何防止资产转入黑洞的?
设计初衷可见:https://eips.ethereum.org/EIPS/eip-165
是让合约接口标准化的提案,在编程语法中interface是接口的意思,在其中定义的函数可以不实现仅仅放上函数名字相关参数,在程序复杂的时候,相当于目录一般告诉别人我都有什么功能。
但是接口的写法各有千秋,名字定义参数类型,甚至是否存在都有不同,
所以此提案最终形成了ERC165标准,规范了接口的识别规则。
花旗:加密货币市场蔓延的担忧已经停止:金色财经报道,花旗 (C) 在周三的一份研究报告中表示,随着众多经纪商和做市商披露交易对手风险敞口,Celsius提交破产保护申请,并且以太坊回归平价,对加密货币蔓延的担忧可能在此期间达到顶峰。
鉴于该行业的许多大型经纪商和做市商已经披露了他们的资产,“急性去杠杆阶段”现已结束。另一个积极的迹象是,稳定币的外流已经得到遏制,最近几周加密交易所交易基金(ETF)的外流也已经稳定下来。交易所和期货杠杆也是“良性的”。
花旗表示,加密市场可能太小且太孤立,无法对更广泛的金融市场或经济产生溢出效应,但它们仍会影响投资者情绪。报告补充说,对市场传染的担忧可能已经达到顶峰,至少目前是这样。(coindesk)[2022/7/22 2:31:21]
使用流程是:
STEP1?判断是否存在?supportsInterface?函数,并且其符合165标准
STEP?2通过?supportsInterface?函数,判断是否具有转出NFT的函数
3.交易时会发生什么?有哪些细节?
钱包所持有的NFTID转移到指定地址
应莹:只要人民银行宽松的货币政策没变,反弹还将持续:7月17日消息,徐翔妻子应莹今日在个人公众号上发布“每周市场点评”:全球疫情突变,世卫称奥密克戎变体的传播令病例数增加,或将引发经济衰退。全球持续高通胀使美联储提升加息概率,引发市场担忧,导致外资流出。但市场政策只要人民银行宽松的货币政策没变,反弹还将持续。未来新一轮经济驱动需要破坏性创造,降低经济活动的交易费用,创新的企业和生产率高的产业将引领经济。风险方面,通胀超预期,流动性收紧。(金十)[2022/7/17 2:19:15]
transferFrom从转移:用某机构调用,需要用户先授权某地址,让其有权可转移。
类比一下:
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的合约需要考虑这种特殊情况。
其余部分判断是确定是否有授权记录,易于理解,不作赘述
IPFS的地址。
咱们可以通过之前Etherscan教程方法来看看一些项目数据有什么?
Azuki上合约地址是:0xed5af388653567af2f388e6224dc7c4b3241c544
通过ReadContract可以查阅到,其元数据只存放了ipfs上的指向地址
而近期兴起的Metaverse项目元宇宙土地sandbox和****Decentraland,以及去年火热的****AxieInfinity,基本链上存储元数据也只是ID网址。
像mirror那些是专门设计低费用可进行高存储,一个块常规都是30M起步,大约是以太坊的1000倍。
用户发起一笔交易,将要写链上数据作为参数传入,其大小是一笔成本
交易执行合约代码,依据修改和使用,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*(2100068000)*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美金
真可谓寸土寸金!
前文回顾
EIP-5058能否防止NFT项目方提桶跑路?
当我们在看Etherscan的时候,到底在看什么?
当奈飞的NFT忘记了web2的业务安全
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。