# 0xmons

> 0xmons 是一个实验性的 NFT 项目，它将生成式像素艺术与区块链收藏品相结合。

- Canonical URL: https://iq.wiki/zh/wiki/0xmons
- Categories: Cryptoassets
- Tags: NFT
- Created: 2022-07-22T15:25:27.510Z
- Last updated: 2022-10-04T23:07:13.608Z
- Source: IQ.wiki — the world's largest blockchain and crypto encyclopedia (https://iq.wiki)

---

0xmons (XMON) 是一个实验性的 NFT 项目，它将生成式像素艺术与区块链收藏品相结合。它是模因和 Pokémon 的结合体，但多了 30%。它是一个用于召唤神经网络生成的像素怪物的 NFT 平台。[\[2\]](#cite-id-k270jn08su)[\[3\]](#cite-id-tivhf4ozwk)

## 概述

0xmons 是一个用于召唤神经网络生成的像素怪物的 NFT 平台。(XMON) 是一种加密货币，并在 Ethereum (ETH) 平台上运行。

每件艺术品都由生成对抗模型 (GAN) 生成。这使得每个 NFT 都是完全独一无二的，并且可以选择将 NFT 数据完全注册在链上。[\[1\]](#cite-id-p0estkfq20g)

用户可以查看他们目前创建的所有 0xmons，从 #0 开始。铸造 0xmons NFT 的用户可以选择将他们的整个收藏品（名称、图像、背景故事）编码到链上。[\[1\]](#cite-id-p0estkfq20g)

这些 NFT 像素艺术是由 GAN 的疯狂噩梦创造的。它们由动画程序生成。它们的名字来自大型语言模型。它们完全不是随机的位是从以太坊区块链收集的。[\[1\]](#cite-id-p0estkfq20g)

## 目标

0xmons NFT 的目标是在不依赖 OG 陷阱的情况下引导一种新的有价值的 NFT 资产类别。稀缺性、美学、创作过程和技术是它们受欢迎的基本原因。

除了旗舰 NFT 之外，他们还在努力创建更广泛的 NFT 生态系统的其他有价值的部分。捆绑器允许 NFT 成为通用资产篮子，而多发送器则可以廉价地将任何代币发送到任何地方。[\[3\]](#cite-id-tivhf4ozwk)

他们目前正在努力寻找更多方法来扩展 NFT 背后的技术，为 (XMON) 代币带来实用性，并创造许多很酷的东西。

## 工作原理

0xmons 不是可组合意义上的生成项目，它的图像来自生成模型。但是这些图像是从 GAN 生成的，GAN 的大小至少为 1 GB，包括所有库和模型参数。

没有办法将所需的模型参数直接存储在合约存储中，更不用说实现使所有这些工作所需的棘手的矩阵乘法库了。

此外，这些图像不是由较小的图像构建的，因此我们甚至无法以任何形式依赖预计算来提升性能。[\[1\]](#cite-id-p0estkfq20g)

他们使用的解决方案不会将 GAN 移动到链上。它也不会将直接图像移动到合约存储中。相反，他们从 2017 年的一个关于将胸部放在区块链上的项目中汲取了一些经验。他们公然地利用廉价的 calldata。[\[2\]](#cite-id-k270jn08su)

此外，直接存储 0xmon 图像不是很可行。该模型无法存储在链上（因为它显然大大超过了 24kb 的限制），以及为什么他们无法从较小的部分组成图像（没有用于创建图像的组合）。

所有这些的原因当然是 gas 成本。目前，将 uint256（即 256 位 = 32 字节）直接存储到智能合约存储中需要 20,000 gas。

即使使用无损 GIF 压缩，0xmons 图像的大小也从 10kb 到 50kb 不等。假设非常密集的打包，完全写入的成本仍然约为 6,000,000 gas，这大约是区块 gas 限制的一半。这还只是最保守的一面！

合约存储很昂贵，但 calldata 存储却不然。2019 年 EVM 的一次更新将存储一个字节的 gas 成本更改为仅 16 gas。这意味着如果我们上传完整的 0xmons 动画，我们将看到大约 400,000 到 2,000,000 gas 的成本。这更容易管理。但是，这也是权衡取舍的地方。合约存储始终可访问。Calldata 则不然。Calldata 仅由完整节点保存，虽然它对于准确重建区块链是必需的，但可能不会保存在快速节点和轻客户端上。[\[1\]](#cite-id-p0estkfq20g)

Calldata 是指传递给函数的输入，因此我们所需要做的就是进行函数调用来记录我们的数据。但是我们如何访问数据呢？我们可以通过唯一标识每个交易的交易哈希来做到这一点。从那里，我们可以查看通过输入传递到 uploadMon 函数调用中的参数。[\[2\]](#cite-id-k270jn08su)

在此交易中，从 Data 字段传入的字节对一个 0xmon 的数据进行编码，并且只要可以连接到节点，就可以从任何选择的前端访问它。借助 Infura 和 Etherscan 等工具，通常可以获得此类信息。但是，其他智能合约也无法获得此数据。这是使用 calldata 的另一个缺点（除了连接到完整节点的可用性之外）。对于 0xmons 项目，决定权衡取舍是值得的，以便能够以最经济的方式对完整动画进行编码。[\[3\]](#cite-id-tivhf4ozwk)

然后，一旦存储了输入，就可以将交易哈希保存在合约上的映射中，以便将来可以轻松知道要查找哪个哈希。不幸的是，还有一个问题——交易无法访问它们自己的哈希。这意味着他们无法在一个函数调用中同时存储数据（通过输入）和更新链上映射。因此，实际发生的情况是：首先，我们进行一个“空”交易来存储编码的数据。然后，我们调用注册表合约来存储第一个交易的交易哈希。[\[3\]](#cite-id-tivhf4ozwk)

## 0xmons 图像是如何编码的？

鉴于这些图像都是像素艺术，一个直接的想法可能是通过将像素信息密集地打包到 uint256 中来获得额外的巧妙性，也许可以参考另一个值到十六进制颜色的映射。已经尝试过这种方法，但效率不高。事实证明，使用 gifsicle 优化后的原生 GIF 编码仍然做得更好。[\[2\]](#cite-id-k270jn08su)

### 编码您的 0xmons

现在，让我们来回顾一下进行链上编码的实际过程。首先，您只能编码您拥有的 0xmons。如果您转到您拥有的 0xmon 的页面，您将在底部看到一个新菜单：

有一个下拉菜单，可让您在静态和动画之间进行选择。这指的是 0xmon 图像。在这两种情况下，名称、绰号和背景故事也将被编码到有效负载中。即使 400,000-2,000,000 gas 的估计值对于编码 0xmon 来说“更合理”，但还有一个额外的选项可以仅编码静态图像，这应该便宜 10 倍左右，即大约 40,000 到 200,000 gas 来编码。

如果这是用户第一次使用，并且您希望前端处理所有事情，只需选择您希望编码静态图像还是动画图像，然后单击“上传”按钮。如上图所述，您必须接受三个交易才能使事情正常进行。第一个交易在输入字段中编码图像。第二个交易批准注册表合约花费 XMON 作为注册费，第三个交易实际上将交易哈希添加到合约的映射中。[\[1\]](#cite-id-p0estkfq20g)

如果您仅发送了第一个交易，并且想返回进行实际注册，只需保存编码交易的交易哈希（即进行 uploadMon 函数调用的交易），然后将其粘贴到输入字段中。然后，您可以随意注册。

精明的读者可能已经注意到，将整个静态 0xmon 图像直接编码到合约的存储中仍然是“可行的”。这样做的 gas 成本仍然非常高，从 1,000,000 到 4,000,000 gas 不等，这仅适用于非动画图像。尽管如此，对于那些有 ETH 可以燃烧的纯粹主义者，我还添加了一个直接上传选项，该选项将编码的有效负载直接写入合约。前端现在完全支持这一点，并且这样做的人将获得一个闪烁的闪电图标（而不是普通的闪电图标）。[\[1\]](#cite-id-p0estkfq20g)

闪电按钮让其他人知道您已将静态数据编码到链上，而锁定按钮让其他人知道您已将动画数据编码到链上。您也可以单击该图标以转到新的 0xmons 展示页面，该页面直接从链上读取和解码。[\[3\]](#cite-id-tivhf4ozwk)

因此，当此过程完成后，您的 0xmon 将在前端获得两个闪亮的新图标。
