ERC 1155 NFT 智能合约安全分析

ERC 1155 NFT 智能合约安全分析

ERC 1155 NFT 智能合约 PlatoBlockchain 数据智能的安全分析。垂直搜索。人工智能。

阅读时间: 5 分钟

您一定听说过加密货币代币。 各种代币在 web3 生态系统中发挥着至关重要的作用。 这些代币代表了加密货币的所有权、财富、信誉和权威。 有趣的是,您还可以制作您的加密货币代币。 

这些代币是智能合约,涉及各种操作的各种功能,例如转账、余额检查等。您可以通过为其创建智能合约来制作代币。 尽管如此,为了确保您的代币安全并赋予其信任感,ERC 20 是最好的选择 智能合约标准 建议遵循创建可替代代币的标准,ERC 721 是用于创建不可替代代币(NFT)的智能合约标准。

ERC 20 和 ERC 721 是广泛接受的用于创建代币的智能合约协议。 它们为代币提供了一个安全且值得信赖的环境。 这些协议不断改进并变得更好。 朝这个方向迈出的一步将导致创建新的 ERC 1155 代币智能合约协议。 让我们看看它是什么。

1.什么是ERC 1155?

所有的ERC,比如20和721,都只是创建适合NFT不同情况的智能合约的标准。 我们有 ERC 721,USDT 和 DAI 等可替代代币遵循 ERC 20 标准。 ERC 1155 是一项涉及 ERC 20 和 ERC 721 功能和属性的标准。

假设您要创建一个程序,在其中创建多种商品。 例如,您想创建一个名为“金”的代币,另一个名为“银”的代币和一个国王,逻辑上说拥有更多金和银的人将成为国王。 只能有一位国王。 这是一个简单的协议,但要创建它,您必须为资产部署 3 个合约,一个用于黄金代币,另一个用于白银,一个用于国王,这将是 ERC 721。但是如果您可以部署只是一份合约列出了所有这些不同的代币?

这就是 ERC 1155 解决的问题之一。 您无需为区块链上所需的每一种代币部署合约。 这是 ERC 1155 合约示例之一。 猜猜我们在哪里需要这种具有多种资产的系统,有些是可替代的,有些是不可替代的。 答案是web3游戏。 ERC 1155为Web3游戏开发者提供了链上交易的可扩展性和平滑开发能力。

1.1 ERC 1155 中的代币 ID

您必须知道如何检查不同ERC 20代币的余额,您可以调用 余额(地址_所有者) 函数,就可以得到该地址持有多少个token。 但ERC 1155处理不同的代币,因此我们需要为不同的代币提供不同的ID。 几乎每个与代币相关的函数都至少包含两个参数:tokenId(您要查询的资产)和您想了解的地址。

例如,假设合约有 3 个代币:gold、silver 和 king。 要了解该协议中特定地址有多少黄金,您可以调用函数balanceOf(地址 _所有者, 单位256 _id)在智能合约上。 假设gold的tokenId指定为1,则可以调用 余额(0x4Bf9DeCE75Bc7C4a9054d5b3BB13D53543eE4096,1).

2 智能合约审计指南 ERC 1155

ERC 1155 已经存在一段时间了,一些功能在常规 ERC 20 或 ERC 721 协议中不可用,例如批量传输。 此外,ERC 1155 在市场空间中不太流行,因此许多开发人员对这一领域的探索较少。 QuillAudits 分享了有关在 ERC 1155 上寻求 BUIDL 的协议的重要见解,因此它们可以通过保护自身来帮助创建更安全的 web3 生态系统。 

2.1 ERC 1155 接收器接口

当我们的 ERC 1155 合约将资产转移到其他合约(通常是 web3 游戏协议中的要求)时,在接收合约中拥有 ERC1155 接收器接口对于成功交易代币非常重要。

ERC 1155 接收器接口的两个功能是:-

  • onERC1155Received(运算符,来自,id,值,数据)
  • onERC1155BatchReceived(运算符、来自、ids、值、数据)

这两个函数具有几乎相似的功能,唯一的区别是后者是当我们一次处理多个事务时,因此名称为批处理,参数和返回值之间存在细微差别。 但这里我们只讲关于ERC1155Recieved。 

该函数不得在铸币或传输过程之外调用。 要接受传输,如果允许传输,则必须返回 bytes4(keccak256(“onERC1155Received(address,address,uint256,uint256,bytes)”))。

查看参数:-

  1. 操作员:- 发起传输的地址(即 msg.sender) 
  2. from:- 之前拥有该代币的地址
  3. id:- 正在传输的代币的 ID 
  4. value:- 正在转移的代币数量 
  5. 数据:- 没有指定格式的附加数据 

2.2 没有approve()函数?

如果您曾经使用过 ERC 20 或 ERC 721,您会遇到过approve()函数,它允许某些地址从所有者的余额中获取批准的代币。 例如,如果A想要批准B获取100个DAI代币,那么A可以调用approve函数,表示B有权获得100个DAI代币,然后B可以用该金额进行交易。

但 ERC 1155 没有 批准 单个令牌的函数。 我们有一个 setApprovalForAll(地址运算符,bool 已批准) 函数,该函数由所有者调用,并接受地址参数运算符,该运算符是支出者的地址或我们想要批准代币的地址。 所以,我们不能调用 批准 功能或批准我们的 ERC 1155 代币列表中的单个代币,但所有代币访问都将立即获得批准。 开发团队需要意识到这一点。 如果忽视,这可能会导致巨大的损失并损害协议。

2.3 一些定期检查

上面两节探讨了两个独特的 ERC 1155 相关检查。 在本节中,我们将进行一些常规检查,不需要非常深入的解释。

  1. 注意 ID:- 每个与 ERC 1155 配合使用的外部函数或接口都需要指定令牌 ID 以将其作为输入。
  2. Burn/Mint:- 每当调用这些函数时,它们只能更改指定代币 ID 的余额和totalSupply。
  3. ERC 20 相似之处:- 许多属性类似于 ERC 20 代币标准。 仔细阅读 ERC 20 的安全指南也将有助于解决这个问题。
  4. 重新进入:- 正如所讨论的,ERC 1155 检查传输逻辑中支持的接口。 因此,可能存在各种可能导致以下情况的情况: 重新进入漏洞。 建议在适用的函数上保留不可重入保护修饰符。

3。 结论

Web3 生态系统不断发展常规标准,以增强安全性和功能性。 ERC 1155 就是朝这个方向迈出的一步。 但当新标准发布时,会产生涉及协议中不太常见的标准的知识差距,并带来安全措施样本空间较小的风险。 这时,QuillAudits 与专家团队一起介入。 我们处理、分析并找到协议可能被破坏的不同方式,并以令人难以置信的结果保护客户的协议。 请访问我们的网站并确保您的 Web3 项目安全!

17 观点

时间戳记:

更多来自 散列