解读MOPN:如何设计一款NFT放置挖矿全链游戏?
文摘
2024-06-12 12:35
广东
摘要:可能每个人都有自己设计一款游戏的冲动,闲暇时的各种脑洞如果组合到一起,能否促成一款游戏的诞生?如果让你自己设计一款全链游戏,你会怎么做?可能想着容易做起来难,如果你真的下场设计一款全链游戏,需要考虑的问题其实比想象的更多更复杂。本文以一款名为MOPN的NFT放置挖矿游戏为例,其主要玩法是在有限的公共土地上放置NFT来赚取收益,即放置挖矿。在设计这款游戏时,游戏设计者不但要考虑为其原生Token制造销毁/通缩场景,还要思考怎么反女巫、为关键的数据指标构造合适的数学公式,以及解决全链游戏对预言机等第三方组件的依赖。下文中,我们将从MOPN的机制设计和经济模型等多角度展开解析,帮助更多人理解Web3游戏的设计思路和全链游戏的实现路径。作为一款Token本位的放置游戏,MOPN的核心玩法很简单:该游戏创建了一个包含近100万个地块的开放地图,玩家在开放地图上放置NFT以获取奖励。MOPN中包含4种资产:1. MOPN的原生Token——MT(MOPN Token),其中,MT Token是游戏内的核心资产,所有经济活动都与MT相关,玩家把NFT放置于某个地块后,可以根据NFT的积分权重和放置时间获得MT奖励。NFT放置挖矿产出的MT,90%会被该NFT的主人获得,5%的挖矿产出被地块的主人获得,相当于地租,5%进入该NFT所属IP的金库(比如BAYC有自己的游戏内金库)——Collection Vault中,相当于税收。在MOPN的设计方案中,地块隶属于名为MOPN Land的NFT。MOPN LAND总供应量为10981个,每个Land覆盖地图上的91个地块,所有Land合起来覆盖了地图中全部近100万个地块。Land的获得途径包括铸造和拍卖。玩家获取Land后,可以将其放置在地图上,激活那些处于休眠状态的地块,被Land覆盖后激活的地块才可以放置NFT。任何玩家都可以把NFT放置在某个Land下辖的地块上,但要把5%的收益分给地主(Land的所有者)。MOPN游戏规则中比较有趣的是, 你可以用“炸弹”把你周围的异类NFT清理掉。游戏规定,以你放置NFT的地块为中心,两个地块的距离内,不能有其他IP系列的NFT(比如BAYC和胖企鹅就是彼此冲突的IP)。此时,如果你非要在这个地块放置NFT,那就要用炸弹将异类NFT清除。最终达到的效果如下图:每个NFT周围两个地块的距离内,都是同类NFT。总体概括,游戏的规则比较简单:把自己的NFT放置在某个地块上获取挖矿奖励,你要分一部分挖矿产出给地主,同时你要保证自己周围没有非同类NFT。另外,MOPN为参与放置挖矿的NFT合集配备了特定的Collection Vault金库,由于MOPN是全链游戏,与NFT相关的市场数据不应依赖于预言机,所以MOPN设置了Collection Vault通过特定机制来获取NFT市场价格等场外信息(后面会提到怎么实现)。上述规则构建起了以 MT Token为核心的经济系统,如图所示。下文中,我们将从游戏设计者的视角,对MOPN的实现方式进行简要介绍。ERC-6551账户解析
MOPN为每个参与放置挖矿的NFT创建了ERC-6551抽象账户,而ERC-6551账户是MOPN游戏系统的核心组件,大量的业务逻辑都依赖于它来实现。
ERC-6551标准源自EIP-6551,旨在为NFT创建专属的AA钱包账户,让NFT可以像普通的以太坊用户一样拥有诸多权利。比如说,你可以为BAYC注册一个ERC-6551账户,利用该账户进行收款及链上操作。当用户转让NFT时,相应ERC-6551 账户的所有权也会被一并转移。
这么做有什么意义呢?在某游戏场景中,假设以太坊地址A拥有一个名为Bob的虚拟游戏角色,而Bob本身是以ERC-721 NFT的形式来实现的,其持有多个道具(如帽子、鞋子、武器等)以及其他资产(如金元宝),这些资产可能借ERC-20、ERC-721等形式来实现。虽然这些道具在游戏的设定中被视为属于Bob,但在底层合约的视角,上述资产关联在地址A名下。
假设地址A的控制者将虚拟角色Bob出售给别人,需将Bob及其持有的游戏资产逐一转移给买家,这在实际操作中比较繁琐且并不合理。EIP-6551的目标在于,直接为游戏中的虚拟角色Bob创建一个专属的钱包账户,用于管理其持有的道具和资产,使得整个交互流程更简洁更合理化。 1.Registry。Registry是一个工厂合约,用户可以把自己的NFT合约地址和tokenId提交过去,Registry将为其生成一个专属的固定地址,在此地址内为用户的NFT部署账户。2.Account Implementation。该模块涵盖了ERC-6551账户的具体实现细节,各个项目方会根据自身需求,采用适合自己的具体实现方案。MOPN配备了自己的Registry和Account Implementation模块,用户可以输入NFT合约地址以及 tokenId,以确定性的方式为NFT创建一个专属的ERC-6551账户,用于适配游戏操作中的各种需求。前面我们曾提到,用户进入游戏后的第一步,便是选择NFT并将其放置于适合的区域,下图展示了目前MOPN的部分地图:在游戏地图上,我们可以观察到属于不同IP合集的NFT以及不同颜色的地块。每个NFT都会将自己周围1格的地块辐射成特定颜色,只有同类NFT才可以紧挨着放置,非同类NFT之间至少要拉开两个地块的距离。对此,MOPN采用了六边形地块,并建立了坐标系如下图:显然,地图上的每个地块都有唯一的坐标,整个地图被分为10981个区域,划分为10981个MOPN Land,每个Land有自己专属的LandId。在MOPN的设计中,Land拥有者可以向NFT放置者收取租金,即5%的NFT挖矿收益会流入地块拥有者的ERC-6551账户。每个被放置的NFT,其ERC-6551账户中存在一个titleAccounts字段,表示该NFT所属的集合。当你尝试将NFT放置在某个地块上时,相关合约会读取该地块紧邻的19个地块上的NFT对应的ERC-6551账户,通过检查titleAccounts字段判断是否有异类的NFT被放置在了临近区域。上面讲到的内容还只是整个MOPN机制设计的冰山一角。站在游戏设计者的角度,你还要考虑很多麻烦的问题。首先,在游戏早期,你要考虑哪些NFT可以参与到MOPN游戏中,如果你不对NFT种类进行限制,一定会有人把大量的垃圾NFT放置在地图中快速获取大量MT Token收益,最终使得Token严重通胀,这本质就是反女巫问题。为了避免此类情况,一定要采取限制措施,仅允许特定类型的NFT参与到游戏中。MOPN在正式启动前,使用以下公式为市场上所有的NFT合集进行评分:以下是MOPN官方根据最近的快照信息给出的统计表格。我们可以看到表格内有个名为STAGES的列,代表该NFT所属的IP合集何时能够参与游戏。标记为Stage1的NFT系列在游戏启动之初就可以参与放置挖矿,而Stage2和Stage3则需要等游戏进行到一定阶段时。答案是任何人都可以,放置NFT的人可以不是NFT的主人,但只有NFT的主人能直接提取放置挖矿的奖励,之后分一部分给替他放置NFT的人。我们将这种不是该NFT的主人,但代其放置NFT的人称为“Agent代理人”。按照MOPN的设计,当NFT持有者提走挖矿奖励,或NFT被移动、炸掉时,Agent可以分得部分挖矿收益,具体数值为:放置挖矿收益的其中n指该NFT系列已有的Agent数量(比如有n个人做了BAYC NFT放置挖矿的代理人)。显然,作为Agent,越早参与游戏可获得的奖励越多。这个问题其实要结合MOPN自身的经济模型来解答。MT的总供应量为10亿,Blast每出一个区块(大概2秒),MOPN就会向NFT矿工释放一定的Token奖励。MT初始时设定为,Blast每出一个块就释放60枚,每过50000个区块(1.2天),MT释放量衰减千分之三。具体的释放曲线如下:当我们确定每个区块的MT释放量后,就可以计算每个NFT分得的挖矿奖励,因为每个区块中释放的MT会按照权重,分配给参与挖矿的不同NFT。上文提到的MOPN Point,决定了每个NFT的奖励权重其中,Tile Point根据NFT所在的地块进行分类,分为+1、+5和+15三档,对应地图上不同稀有度的三类地块。Collection Point与NFT所属的IP合集以及质押情况相关,在后文关于NFT金库的部分会详述。最终,每个NFT按照其Point占所有NFT总Point的比例,分取每个区块中释放的MT奖励。在前面我们曾提到,当你在MOPN地图上放置NFT时,必须声明目标地块所在的LandId。LandID代表该地块所属的LAND编号,当NFT放置者提取MT挖矿奖励时,5%的MT将流入地块所属的LAND的地主账户中(每个地主控制不同的LAND)。在MOPN中,Land的功能是管理地块,而地块和NFT的关系就像花朵和花盆。所以,LAND也是游戏中的核心资产之一。(Land实质是个NFT,左下角标记的(-48,10)代表这块Land的中心点地块在MOPN地图中的坐标)LAND的所有权以NFT的形式来表达,所有LAND NFT都通过两种方式发行:用ETH铸造或通过MT Token参与拍卖铸造。ETH铸造Land的模型比较简单,玩家可以花费一定ETH直接铸造并获得Land。第一个Land 的铸造价格为0.02 ETH,之后每个Land被铸造时,价格比前一个上涨千分之一。而用MT拍卖铸造Land的过程相对复杂一些,采用荷兰拍模式。每个Land的起拍价为100万MT,每轮拍卖一块土地,起拍价每5轮自动下调1%。一轮拍卖完成后,下一轮将自动启动。所有用于购买/铸造Land的MT将被烧毁,这是在整个MOPN游戏中,MT被销毁的第一种途径。Bomb 机制放置NFT时,若目标地块周围2个地块的距离内有异类NFT,就要用Bomb把异类NFT炸掉,清空其所在地块。Bomb是一种将异类NFT强制移出地图的方式,需要通过燃烧MT的方式来获得,用过的Bomb即被销毁,这是MOPN中MT的第二个销毁场景。
其中MT Production为目标地块上已挖出的MT产量,titles代表这枚炸弹要清除的地块数量,而bomb production代表过去7200个区块内的Bomb使用量,目标地块上NFT已挖出的MT越多,或过去一段时间内人们使用Bomb的次数越多,炸弹价格越贵。NFT合集金库(NFT Collection Vault)在前面我们曾提到,MOPN按照一个评分系统为放置在地图上的NFT分配奖励,这个评分系统叫MOPN Point,MOPN Point包括Title Point和Collection Point两部分。Title Point按照NFT所处地块的稀有度来定,而Collection Point与该NFT合集(如BAYC)在游戏内专属的金库有关。Collection Point度量的是NFT金库内的MT存量,金库内MT数量越多,该类NFT放置挖矿收益越高,其初始计算公式是
其中,Vault $MT是该NFT金库的MT存量。向金库内添加MT的途径,包括挖矿税收和质押两种,第一种是我们前面提到的,任何NFT放置挖矿,在提取收益时都会自动向金库内提交5%的税收(另外5%是土地租金),另外一种就是自愿形式的质押,你把MOPN质押到某个NFT金库中可以获得APY。MOPN的NFT金库还有其他功能,比如它可以为MOPN提供NFT的市场价格数据。由于整个MOPN游戏都是围绕NFT来运转的,NFT的市场价格是一个重要的数据指标,然而作为一款全链游戏,MOPN不希望依赖于预言机等中心化组件。为此,MOPN自己设置了一个类似于AMM的NFT买卖平台(说白了就是自己搭个池子),玩家可以在这个平台上买入/卖出NFT,各种套利行为会使得该平台上的NFT价格与外部市场的价格保持一致,这样系统可以在不依赖于预言机的情况下,设法获知NFT在外部市场的报价。MOPN的NFT买卖平台采用了类似于Uniswap的模式,本质是点对池,然而,相比于ERC-20的 AMM,NFT的AMM较难实现,一方面因为NFT是非同质化的,任何人对特定NFT都有自己的心理价位,无法直接对一个IP系列直接定价,另一方面NFT本身数量有限,流动性远不如FT,这使得NFT的成交较为困难。针对这个问题,MOPN将拍卖和AMM结合起来,由金库合约直接参与NFT的买卖,直接贡献流动性。NFT金库向玩家收购NFT的过程,遵循自动出价制,起始出价为金库内MT余额的20%,第一次成交后,下一次的初始买入价会设置为金库最后要价的75%,每个区块增加0.05%,最高限额为金库余额的20%。当某NFT持有者认为报价符合自己的预期,可以出售自己的NFT。之后金库会从买入NFT切换为售出NFT的模式,启动荷兰拍,公开出售其刚刚收购的NFT。荷兰拍的起始报价为收购价的125%,每个区块下降0.05,下限为1MT。拍卖完成后,占成交价0.5%的MT将被销毁,这是MT被销毁的第三种途径。完成NFT售出后,金库可以再次转入收购状态,向外界提供NFT报价,如此循环往复。相比于常规的x * y = k模式,基于拍卖机制的广义AMM可以帮助每一个NFT被充分定价,最终使得金库以接近于最优报价成交。若未来MOPN有足够的影响力,大量 NFT可能以这种方式进行交易,NFT的流动性会在一定程度上得到解决。由于上述拍卖机制使得NFT被充分定价,所以我们可以粗略认为,金库中NFT的买卖成交价,就是当前NFT合集的地板价,这代替了预言机的喂价功能。回到MOPN Point这里,由于金库内的MT存量可能不稳定,无论是NFT买入和卖出,金库内的MT库存都会有很大变动,出于公平和稳定,在某NFT的金库卖出NFT后,Point计算公式变为:其中,vault last ask-accept price是该NFT最后一次被金库售出后,其获得的MT量,而vault $MT是售出NFT前金库内MT的存款。从技术实现角度看,MOPN引入了ERC-6551账户,提高了游戏系统的灵活度和可组合性,同时采用基于拍卖的NFT交易平台,提供了一个基于点对池的NFT市场,通过内部市场的报价,解决了全链游戏对预言机的依赖问题。作为一个比较易懂的全链游戏经济模型设计案例,MOPN还是值得我们去深入学习的。