joelone.eth

Posted on Feb 26, 2022Read on Mirror.xyz

笔记 - Pixel Devs NFT的跨链问题

背景

Pixel Devs NFT是 Developer DAO的第一个原生项目,目标是给成员创建社区标识和更个性化的衍生NFT。以太坊的gas费太高,项目最终决定部署在Ploygon上。

这篇文章主要根据英文的blog总结一下,跨链问题是如何权衡和解决的:

https://blog.developerdao.com/launching-pixel-devs-nft-on-polygon

面临的问题

Developer DAO的会员NFT和Loot类似,它有8个特征,称之为 "Genesis NFT"。

衍生的Pixel Devs NFT就是将这8个特质的可视化,并且与Genesis NFT的token ID一一对应。

任何在以太坊主网上持有Genesis NFT的钱包地址,都有资格在Polygon上铸造相应的衍生NFT。

现在的挑战是,Polygon上衍生NFT的智能合约不能访问以太坊,我们如何验证钱包地址持有Genesis NFT?

最初的想法

最初的想法是用Snapshot白名单或者Merkle Tree,但是我们希望结果是实时的,这就需要我们定时运行Cron Job后台任务来更新智能合约上的数据。这部分涉及额外的维护和费用问题。

另一个方法是用Chainlink Keepers来维护Snapshot/Merkle Tree。这是Chainlink 提供的自动服务,也是会产生费用的。

除了费用,这两种方法的结果都不是实时的。

最终的解决方案

如果我们把执行验证的工作,放在智能合约之外会怎么样呢?

那就是说,不需要Snapshot和更新智能合约,我们照样能进行实时验证的工作。

验证和铸造的流程

具体的实现,就是用服务器对钱包地址执行授权,创建签名,然后传给智能合约。

  • 1、客户端给服务器发送授权请求,请允许地址0x1abc23铸造ID是1234的NFT
  • 2、服务器到以太坊一查,地址0x1abc23的确持有ID是1234的创世NFT,就用自己的私钥给数据签名,加上10分钟的有效期。
  • 3、客户端就用这个签名,发给Polygon上的智能合约,申请铸造ID是1234的衍生NFT
  • 4、智能合约主要验证:
    • a、 签名合法并来自服务器(合约里事先保存有服务器的钱包地址)
    • b、 签名的信息与申请信息相符(地址0x1abc23和ID1234
    • c、 签名还在有效期内

业务逻辑上的优点:

  1. 可以用在任何兼容EVM的侧链上。
  2. 业务逻辑可控,可以在铸造前添加抽奖,或者给特殊贡献者发NFT。
  3. 更重要的是,我们不需要等合约提前准备好,就可以尝试新的想法。

参考资料

英文版的笔记

https://twitter.com/0xmknod/status/1497667396798087168

铸造的网站:

https://pixel-devs.developerdao.com/

在github上的代码:

https://github.com/Developer-DAO/pixel-avatars

英文Blog:

https://blog.developerdao.com/launching-pixel-devs-nft-on-polygon

OpenSea

Genesis NFT:

https://opensea.io/collection/devs-for-revolution

Pixel Devs NFT

https://opensea.io/collection/pixel-devs

NFT