# 4.8 ERC-1155：为区块链游戏而生（故事）

在ERC-1155问世刚好一年时，它成为了一个以太坊官方的通证标准并且可被整个以太坊开发者社区使用。

大约2018年6月17日，Enjin首席技术官Witek Radomski在以太坊的github仓库里发布了最初版本的ERC-1155多通证标准并且开放了一个讨论用来评论和反馈。

从那时起，这个标准就收到了大量的来自社区的超过50个版本和400个评论的支持。社区进行了大量投入并且帮助改进ERC-1155使之成为以太坊上最好的通证标准。

为什么要耗费这么多的精力去做这件事？

### ERC-1155是什么

一个可管理多个通证的标准合约接口，只用部署一个合约更可以发行并管理任意多种同质通证、非同质通证或者半同质通证。

官方的总结说法是：

“用于管理多通证类型合约的标准接口。单一部署的合约可包括同质通证、非同质通证或其它配置（例如半同质通证）的任何组合。”

### 以太坊改进目标

几年前，以太坊社区提出了一系列新的以太坊改进目标。其中一位社区成员在以太坊github页面上提出了一个新的议题，它描绘了一个有利于区块链和围绕它的生态环境的新的特性、流程或者标准。

在Enjin，我们于2017年在内部建立了称之为单一通证合约的事务。我们认识到当前的ERC-20和ERC-721通证标准并没有达到我们想象中可应用于游戏中的灵活性。

最终，我们认识到这种单一通证合约结构拥有大量的优点并且可以应用于游戏或者其它业务场景，如果我们想将这些新通证成为一个实现，就必须标准化它。

创建一个标准意味着大多数的以太坊社区会开始支持它，这就会为那些钱包、交易对、游戏进行调整和新项目使用通证化的区块链资产铺平道路。

### 一个智能合约，多种通证

当前，ERC-20和ERC-721标准每发行一种通证便需要部署一个新的合约，而隐藏在ERC-1155标准后面的核心概念是**一个单一的智能合约可以管理无限种类的通证。**

想你一下一台自动购物机，它里面有苏打水、果汁和小食品。消费者通过一个单一的安全接口（投一个币、按一下按钮）来和机器交互。机器根据消费者选择来提供商品。相似的，一个ERC-1155标准的游戏合约可以由大量物品或者组件组成，代表从武器到盔甲到血量值、魔法值等等。

所有这些物品或组件都是可重复的，你可以得到不只一件。可重复通证经常用作可拆分货币（绝大多数ERC-20通证），重复通证对于可堆叠物品十分有用（它们不需要被区分），比如说某个弓用到一筒箭。

另一种通证叫着不可重复通证（NFTs)。这种结构允许每一个通证都有自己独特的参数、历史和对真实世界的映射。在一个视频游戏里的宠物龙可以是一个NFTs，它在游戏中拥有自己独特的名字，等级和历史。

### 批量交易

在ERC-1155里，可以在一个交易里发送多种通证，它会节省gas费用并且防止用户在单一交易中必须等待每一个块。

使用ERC-1155的项目也可以建立原子交换（类似于事务，译者注），它允许用户绝对安全的交换某两种通证，期间不会有诈骗和第三方参与。

### 进一步的优化

一些作者的进一步体验形成了了更多的优化和费用节省。

沙箱开发者Ronan Sandford使用ERC-1155实现已经完成了在保持正确拥有关系的前提下，在一个块中发行超过1500种通证的尝试。

地平线游戏开发者Phillippe Castonguay已经能够使用一种叫着余额打包技术来节省80-90%的gas费用（同正常的transfer相比）

同时，Phillippe 使用ERC-1155也达到了一秒发送155种资产的传输速度。

### 数据经济

ERC-1155多通证合约最主要的特点是在一个合约中实例化多种通证。这就意味着创建一种通证只是简单的方法调用，它仅在通证池里增加一个新的ID。

作为对比，创建一个新的ERC20或者ERC-721通证意味着编辑源码并且部署一个新的合约。部署合约会花大量的gas，因为在以区块链上储存数据是昂贵的。绝大多数ERC-20合约基于相同的代码，只需要改动几行，因此其余代码其实是不必要的。这就意味着整个以太坊超过25000个节点中的每一个都要存储这些冗余代码从而变得臃肿。

还有一种类型的开销需要被注意，每一个ERC20或者ERC-721合约都有一个地址，100种通证便需要查询或者监听100个地址，对钱包或者其实软件来讲，必须小心这些通证是否存在。

因此，虽然前面两种标准在一些窄应用场合比较适合（一个单一的货币或者单一的NFT），但是这些数量的创建者可以从ERC-1155标准受益，因为它们可以从非单一的类型创建新的通证并且不需要多个相同的合约。

### 通证可靠的严格规则

ERC-1155标准中，大量特性被用来构造通证必须严格遵守的规则。

ERC-1155通证是第一种可以通过简单的发送通证从而来执行一个可计算的合约方法的通证。

### 这是一个巨大的进步

通过简单的发送一个通证到DEX交易对地址，这个交易对能立即返回另一种通证到发送者地址。相似的，一个区块链游戏可以每当它收到ERC-1155通证时便执行某些游戏方法。无需访问ABIs或者同智能合约直接交互，你就可以打包、转换、加工或者托管通证。

这种类型的功能最开始在ERC-223被提出，但标准最后失败了。ERC-721也只是实现了“safeTransferFrom”，但是却有一个致命的问题，即没有对所有的交易者进行这样的严格查询。这就意味着用户可能永久的丢失他们的通证并且合约作者在发送通证时无法依赖一个确保的执行。

在ERC-1155中将此限制的更严格意味着可依赖的智能合约和通证网络现在可以开始建立这种强大的功能。用户所需做的一切仅仅是简单的向一个地址发送他们的通证，它会触发一个令人惊叹的事件链。

### 元数据

在过去一年里，ERC-1155标准的一个主要更新就是决定将所有的和通证相关的元数据移至一个外部的json文件。这个很大部分是受了ERC-721元数据扩展的启发，但是增加了一些改进。

#### 没有更多的老式元数据

Symbol：（由ERC20和ERC-721标准发明）不再包含进来，因为它不再是和虚拟物品/资产的数据相关的数据的一部分。这个3字母的符号能正常的应用于报表或者货币交易，但是它们在通证化一般物品（组件）时不再有用。

\*\*Name：\*\*名称也被从当前的核心标准里移除了。为什么？在许多已应用的场景中，在区块链上存储一个名字是一种奢侈行为。作为替代，每个通证的名字现在可以在json元数据标准里定义。

**ID替换**

通过使用替换字符串“{id},”，一个ERC-1155合约不需要在链路上存储任何额外数据就可以指向无限数量的通证URI。对每一个通证而言，这种替换甚至可以用来指向一个可以从通证json产生的动态主机的web服务。这个替换字符串本身也可以用于json自身来自动链接每个通证的图标。这大大减少了开发者为了显示大量种类的通证的元数据所产生的开销。

**本地化**

由于通证信息定义成json格式，它使通过使用{locale}支持多语言来进行本地化成为可能。支持多语言的钱包或者软件现在可以显示通证名字、图像或者其它数据的替代版本。

**可确保的日志追踪**

随着以太坊生态系统的持续增长，许多dapp依赖传统的数据库和浏览器API服务来获取和分类数据。ERC-1155标准确保通过智能合约触发的事件日志能提供足够的信息来创建一个所有当前通证余额的精确记录。一个数据库或者浏览器可以监听事件从而对合约内每一个ERC-1155通证提供可索引和可分类的的查询。

智能合约不用再保存每个通证ID的索引，这些ID不需要以任何方式序列化。

这对列举（浏览链上所有通证的能力）是一种彻底的分离，但是它带来了效率上的巨大提升，甚至允许对每个通证增发、燃烧和交易等行为进行一个完整的标准化记录。这个标准化方法直到今天才实现，并且它可以通过对通证和大量的持有者进行深度数据分析从而使一些生态系统受益。

设想一下可以在完全不同的ERC-1155通证的时间、使用解析模式和生命周期内快速前进或者后退，而不用管到底是哪个智能合约被解析。

通证拥有者可以获得关于他们的资产的更多信息，比如它们的通证被增发的精确时刻。并且在将来，更多的工具会被开发出来，它们能对建立这种技巧的公司提供更有用的参考。

### 尾声

ERC-1155标准是区块链社区一年辛勤工作的结果。如果你打算实现ERC-1155标准，你可以先浏览整个标准，而隐藏在每个决定之后的根本原因在这里可以找到。

<https://eips.ethereum.org/EIPS/eip-1155>

你也可以浏览最初的讨论过程用来查看整个讨论历史

<https://github.com/ethereum/EIPs/issues/1155>

为了创建一个你自己的ERC-1155通证合约，Enjin的官方实现参考在github上已经开源。

<https://github.com/enjin/erc-1155>

你可以使用这个代码作为你自己智能合约的起点。你也可以考虑使用Enjin平台，它为开者者或者非开发者提供了大量的区块链开发工具。

<https://kovan.cloud.enjin.io/>

## 评价

这是一次重要的核心技术的探索！

但很可惜，由于整个项目的实践和思考都远远不够，在当时人们是无法评判ERC-20是否完美、ERC-721有否问题的。即使ERC-20和ERC-721的成功率各算50%，ERC-1155本身的改进的成功几率算50%，那么这个通证标准的成功率也就只有12.5%。

[道易程](https://u.naturaldao.io/be/chapter4/www.daism.io)创新出EIP-3712（后面有介绍），淘汰掉ERC-20，那么这个技术标准也就宣告失败。

## 课外阅读与思考

### 课外阅读

[ERC721与ERC1155的区别](https://www.blockob.com/posts/info/18899)

[Enjin ERC-1155 和游戏多重宇宙](https://www.chainnews.com/articles/820769721423.htm)

[ERC-1155代币上市啦！半同质化收藏品上架OpenSea！ （附交易攻略）](https://www.jbb.one/article/1136561528.html)

[【区块链技术工坊34期】王登辉:以太坊通证协议标准及应用场景](http://blockgeek.com/t/topic/3275)

### 思考题

ERC-1155有无缺陷？如有，应如何改进？


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://u.naturaldao.io/be/chapter4/4.8-erc1155-wei-qu-kuai-lian-you-xi-er-sheng.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
