剖析Gh0stlyGh0sts:可以跨7条链的NFT是如何实现的?

原标题:《那个可以跨链的Gh0stlyGh0sts会成为下一个Azuki吗?》作者:陈剑这篇文章触及代码相对较多,能够会略有单调,请耐烦看完从而了解其中原理。这几天各个群都在传一个叫Gh0stlyGh0sts的项目,作为一个free mint的项目曾经完成了单日百倍涨幅,这面前最主要的缘由是自己都在热议它能够完成跨链的技术创新。还记得上一次技术创新后的蓝筹股是谁吗?Azuki,它带火了ERC721A,精细各位可以看之前的文章web3的世界一片蛮荒-详解ERC721A。之前的文章中也屡次提到过web3是一个极端依赖技术创新的范围,一方面可以释放出更多下层运用潜力,另一方面由于土狗项目太多的因由,使得有技术创新的项目方会直接被视为甘愿暂时做事的,从而发生fomo心境,所以从技术创新这一点来看,Gh0stlyGh0sts是有能够具有Azuki基因的。但是经过研讨后,我以为它的这些操作可复制性不高,相比于ERC721A十分重,带来的收益有限,所以我以为它不会成为下一个Azuki,大约这套处置计划难以像ERC721A一样大范围运用,精细的缘由请耐烦往下看,文末最后会讲到,但请留意本文不提供任何投资建议。在自己都在喊这个项目牛逼能跨链黑科技的时分,我们群众号勤劳于辅佐自己更深化的了解原理实质,所以本文为自己抛析Gh0stlyGh0sts的跨链终究谁怎样回事。我们从它的twitter中可以看到自称是全球首个omnichain全链式NFT项目。我们先依照时间线看一下他们最末尾也是最主要的四条twitter。它说自己说第一个原生的全链NFT,它可以在任何一条链上mint和转移,所在的原始链(即mint链)和以后链这两个要素会区分影响NFT的背景颜色与边框颜色,故你可以一眼看出这个NFT的前世今生,而我们稀有的跨链桥如Wormhole完成的方式是先在一条链上mint后,将其锁定在跨链桥的合约中,再在另外一条链上mint进去一个新的去活动,所以强调了自己与激进跨链桥的区别。所以他相比于激进跨链桥的区别在于三点:·可以在任何一个链上mint而非先在一个链mint·可以实现真正的“转移”的而非先锁定一个再复制一个·原始链和以后链会影响NFT样式可以看到确实由于其前世今生不同使得背景和边框都是不一样的。再向前翻,说到当一个NFT转移时,会先将这条链上的NFT burn掉再在另外一条链mint一个新的进去,那这就是它的原理了,地道从这里看,似乎就是相比于激进跨链桥把锁定举措改成了burn,我们继续研讨看终究有没有点东西。这里他说使用了Layer Zero协议从而实现了跨链,嗯..那说明关键点在这个Layer Zero。上下文了解清楚了,我们末尾解析,那首先从这个Layer Zero开端研讨。首先跨链为什么次要显而易见,每个链你可以将它当作银行,假定银行无法跨行转账,你的资产活动性和效益将会大大削弱,LayerZero刚完成了A16Z、红杉资本等投资的1.35亿美金融资,可见跨链这个操作至少十分受资本喜欢。这是他们的论文,感兴味的可以亲身啃一遍 Zero之所以叫Zero,从名字上就说明它和以太坊、Solana这些Layer1不是一个纬度的,树立在这些Layer1上的跨链桥原理基本都如上所说,在一个链上锁定资产后再在另外一条链发生资产,锁定资产的进程即这些跨链桥托管资产,这也就是为什么经常爆出跨链桥被黑客攻击的事,从而自己关于将资产托管给跨链桥也愈发不怀疑,除去平安性,跨链桥在操作上也十分烦琐需求屡次中止转移并交纳屡次gas费,而Layer Zero并不锁定托管资产,Layer Zero是更底层的一个通讯协议,直接在两条链之间中止音讯传递,其实冗杂粗犷的理解就是Layer Zero在多个链之间布置了自己节点,这些节点辅佐你在两条链之间通讯,比如你在A链的合约中调用B链的节点,通知它你要转移一个NFT,于是该节点辅佐你在B之间创立一个新的NFT进去,这两个节点就承当了通讯的权益,所以原理还是很冗杂的。我们看一下Gh0stlyGh0sts合约代码,其中traverseChains这个函数实施的就是跨链操作,需求输入两个参数chainId链id和tokenId。保守行持有人考证,再将chainId传入了一个trustedRemoteLookup数组考证它的长度能否大于0,这个操作是干嘛的呢?我们上Layer Zero的文档看到该协议每一条链都会对应一个id,所以传入的chainId代表着你要将NFT转移到哪个链下去,所以这个trustedRemoteLookup应当是存储不同链的合约地址的,才需求在这里校验你要转移的手段链能否具有对应合约。我们输入币安链的id2试一下,果真前往了对应的合约地址。接真实施了burn操作将你的NFT保管,burn先获取到了这个NFT的持有人,然后实施了_beforeTokenTransfer,这个函数需求传入的参数有三个,from、to和tokenid,当from为0时期表着铸造,当from和to都不为0时期表转移,当from不为0但是to为0代表着保管,所以在这里将to传入0中止保管,同时实施approve吊销该tokenid的一切授权,然后将原本持有人的余额减1,并在mapping持相联系中删除持有人和tokenid的关联。endpoint即调用了Layer Zero接口区分传入了要转移的手段链chainId、手段链的合约地址trustedRemoteLookup[_chainId]等音讯,其中payload参数代表着你要传输给目的链的音讯,可以在代码中看到它传输过去了两个参数以后用户合约地址msg.sender和tokenId,那我们可以猜想到目的链肯定会有个mint函数用到这两个参数来mint出一个新的NFT。Layer Zero的send音讯被目标链接捕捉后会施行lzReceive函数,我们一层层向上顺藤摸瓜,可以看到lzReceive首先对传过去的payload音讯停止理解码,然后又施行了_safeMint函数新铸造了对应的NFT。怎样在各个链之间转移我们清楚了,接下去让我们看看它是怎样实现可以在不同的链mint的,我刚开端看到这个才干的时分,第一时间想到的是怎样做去重,由于mint都是依照tokenid递减的,比如我在以太坊mint了#1,那接下去polygon必需求从#2开端mint,这么多链来回mint那不乱套了,当我看到他们的处置计划时有点乐了..下图左右两边是两个不同链上的合约代码,区分设定了两个参数为开端和截止的tokenid,即我在以太坊只能mint第0~3084个,我在arbitrum则只能mint第6476~7092个,所以你在哪些链能mint都是事前写死的,外面的人不知道还以为很智能,实际上用的方式很粗犷。别忘了它还有一个特性,就是不同的的链背景色不一样,跨链后的边框色彩也不一样,如下图我翻开了一个跨到以太坊的NFT,显现它的出世链是Polygon,确实是追溯到了,很奇特对不对。等我研讨完后真雷到我了,且听渐渐剖析。我听到这个特性后,第一时间想的是如何能够“静态”识别跨链后的token并自动变卦baseURI?自己都知道每一个token对应的是一个存储在ipfs上的链接,这个链接存储了它的属性和图片,那比方我的NFT原本在A链,这时分我把它跨到了B链,那就首先要有一段代码来自动的生成一个存储跨链前后属性的json文件,并自动生成图片,然后再把它传到ipfs,交流掉旧的链接,再映照到token,可是ipfs是不允许改的呀,这是行不通的,在我百思不得其解的时分,我翻开了他们的ipfs文件。可以看到它是用一个大文件夹包了7条链子文件夹,子文件夹又是对应的json文件,然后每个子文件夹大小都是一样的4.2M。然后我花了近半个小时不时的理解这外面的缘由,这代表着什么呢?最终终究分明了,它事前把一切的能够性局部穷举出来了。还记得上文中说到事前用代码硬编码写好了每个链可以mint的编号区间,然后它教员成了1万个局部NFT的json文件,并依照区间设定好其出世链,以及背景图,比方设定第6000个NFT的降生链为polygon,背景色为紫色,此时是没有边框的,所以假定#6000NFT还没有跨链,那一般的就会经过上图中的poly来索引。接着它把这1万个NFT的json文件复制了7遍,然后再把不属于本链中的NFT加上一个本链边框,比如刚才提到#6000降生链是polygon,于是在eth的文件夹里#6000的图片就会多出来一个灰色的边框,同理在币安链的#6000NFT会多出来个蓝色的边框。这个操作是我怎样样都没想到的,我一开始以为用了很初级的手法所以不时的看代码想找出变卦baseURI的业务逻辑,研讨了整整1小时没看出来,没想到居然用的是这种操作方式。上述文章内容就是Gh0stlyGh0sts是如何实现跨链+多链mint+前后链变卦样式的效果,分析来看,这套计划不具有任何普适性,操作烦琐冗杂度很高,远远没有ERC721A的那种冗杂且收益高的效果,我很敬重Gh0stlyGh0sts项目方仔细勤劳的肉体,但是团体以为这个项目噱头大于实际意义,至少目前的处置计划来看是的。

剖析Gh0stlyGh0sts:可以跨7条链的NFT是如何实现的?文档下载: PDF DOC TXT
文章来源: 肖肖
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2384272385@qq.com举报,一经查实,本站将立刻删除。