ERC1155
ERC1155是一个为了实现比以前标准更好的新通证标准。
多通证标准
ERC1155最独特的功能是它使用一个单独的智能合约一次性代表多种通证。这也就是它的balanceOf函数与ERC20及ERC777不同的原因。它有一个额外的id参数作为通证标识符以查询余额。
这点和ERC721相似,但是表中的id并没有余额的概念。ERC721的balanceOf函数关联到一个账户拥有多少不同的通证,而不是每个拥有多少个。另一方面,ERC1155账户每个通证id有非常清晰的余额。和不可替代的通证实现通过简单铸造它们中的一个。
这种方法对于有多种通证的项目会节省大量的gas费。比针对每种通证类型部署不同的合约更好。一个ERC1155通证合约可以包含所有系统状态,降低部署成本和复杂性。
批量操作
因为所有状态都存储在一个合约中,就可以非常高效地在一个操作中操作很多通证。标准提供了两个函数:balanceOfBatch 和 safeBatchTransferFrom,使得查询多个余额和转移多种通证变得简单和花费更少的gas费。
在标准中,也包含一些非必需的函数,比如_mintBatch。
构造一个ERC1155通证合约
// contracts/GameItems.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract GameItems is ERC1155 {
uint256 public constant GOLD = 0;
uint256 public constant SILVER = 1;
uint256 public constant THORS_HAMMER = 2;
uint256 public constant SWORD = 3;
uint256 public constant SHIELD = 4;
constructor() ERC1155("https://game.example/api/item/{id}.json") {
_mint(msg.sender, GOLD, 10**18, "");
_mint(msg.sender, SILVER, 10**27, "");
_mint(msg.sender, THORS_HAMMER, 1, "");
_mint(msg.sender, SWORD, 10**9, "");
_mint(msg.sender, SHIELD, 10**9, "");
}
}
ERC1155合约包含可选的扩展IERC1155MetadataURI。用于查询合约的元数据。
不像ERC20那样,ERC1155没有小数字段,每个代币就不可以再分割。
以上合约部署好以后,就可以查询部署者的余额
> gameItems.balanceOf(deployerAddress,3)
也可以转移
> gameItems.safeTransferFrom(deployerAddress, playerAddress, 2, 1, "0x0")
> gameItems.balanceOf(playerAddress, 2)
1
> gameItems.balanceOf(deployerAddress, 2)
0
也可以批量转移和批量获取余额
> gameItems.safeBatchTransferFrom(deployerAddress, playerAddress, [0,1,3,4], [50,100,1,1], "0x0")
> gameItems.balanceOfBatch([playerAddress,playerAddress,playerAddress,playerAddress,playerAddress], [0,1,2,3,4])
[50,100,1,1,1]
元数据uri获取方式:
> gameItems.uri(2)
"https://game.example/api/item/{id}.json"
Uri可以包含字符串id,客户端查询时替换为实际的代币id,小写的十六进制格式,不够64位的用0填充。对于代币ID为2的可以这样查询:
https://game.example/api/item/0000000000000000000000000000000000000000000000000000000000000002.json
查询的元数据如下所示:
{
"name": "Thor's hammer",
"description": "Mjölnir, the legendary hammer of the Norse god of thunder.",
"image": "https://game.example/item-id-8u5h2m.png",
"strength": 20
}
给合约发送代币
当使用safeTransferFrom做代币转移时的一个重要区别是可能收到以下消息
ERC1155: transfer to non ERC1155Receiver implementer
这就对了,这意味着接受合约还没有注册自己为ERC1155协议。
为了接收ERC1155代币我们可以继承合约ERC1155Holder。
// contracts/MyContract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";
contract MyContract is ERC1155Holder {
}
也可以通过onERC1155Received和onERC1155BatchReceived 函数实现更多复杂的场景应用。
预置ERC1155合约
ERC1155PresetMinterPauser,这个预置合约包含铸造和批量铸造功能,以及转移和销毁功能。合约通过使用 Access Control 控制对铸造和中止函数的访问。已部署合约的账号会授权给铸造者或者中止者角色,还有默认的管理员角色。
这个合约可以在没有任何Solidity代码的情况下用于部署,用于快速作原型或测试,当然也可以直接使用与生产环境。
我目前使用的是Web3JavaScriptAPI的0.2x.x版本。我通过在solidity中创建智能合约(在REMIXIDE上)部署了我的自定义ERC20token。我安装了MetaMask并在https://wallet.ethereum.org/上进行了测试将一些自定义ERCtoken发送到另一个我的帐户。它运作良好。我想使用Web3js在我的JavaScript代码中添加“发送自定义ERC20token”功能。下面是我的代码。varhttp=require('http');varWeb3=require('web3');varTx=require('ethereumjs-tx'
序言本小节是本系列短文的核心章节,主要介绍如何将solidity标准的ERC721合约迁移到flow cadence,大家前面也学了这么多了,就看这一节了!!!什么?前面几节都没看到。本来2022.5月就要写完的,结果5月笔者一直足不出户在家办公,主要在研究如下内容: 图 1用做菜的思路迁移代码笔者发现,有一种叫做“预制菜”的东西,不用开荒种地,不用掌握油盐酱醋配比,锅里一放,简单炒炒就是等级厨师的作品了。。。嗯,solidity ---->cadence迁移是否也能采用“预制菜”模式呢?给你想要的!填写你的以太坊ERC721合约地址,然后你就能得到:1Solidity ERC721合约对应的
ERC1155ERC1155是一个为了实现比以前标准更好的新通证标准。多通证标准ERC1155最独特的功能是它使用一个单独的智能合约一次性代表多种通证。这也就是它的balanceOf函数与ERC20及ERC777不同的原因。它有一个额外的id参数作为通证标识符以查询余额。这点和ERC721相似,但是表中的id并没有余额的概念。ERC721的balanceOf函数关联到一个账户拥有多少不同的通证,而不是每个拥有多少个。另一方面,ERC1155账户每个通证id有非常清晰的余额。和不可替代的通证实现通过简单铸造它们中的一个。这种方法对于有多种通证的项目会节省大量的gas费。比针对每种通证类型部署不同
什么是ERCERC全称是 EthereumRequestforComment,它表示以太坊开发者提交的一系列协议提按(参见 ERC|EthereumImprovementProposals)。ERC20(常用写法ERC-20)指的是序号为20的ERC协议标准,协议细节参考:EIP-20:TokenStandard(ethereum.org)。ERC20以我们最常用的ERC20代币:USDT为例,我们可以通过钱包软件(小狐狸扩展钱包或TokenPocket钱包)给别人发送一定数量的USDT,这是因为USDT实现了ERC20标准中的 transfer 方法,给别人发送USDT本质是在与USDT合约
文章目录ERC1155介绍多代币标准前提条件代币标准:ERC-20ERC-721构建ERC1155代币合约ERC-1155的功能和特点:批量传输批量余额批量审批接收钩子支持非同质化代币安全转账规则ERC1155介绍用于多种代币管理的合约标准接口。单个部署的合约可以包括同质化代币、非同质化代币或其他配置(如半同质化代币)的任何组合。多代币标准ERC1155的显着特点是它使用单个智能合约一次代表多个代币。这就是为什么它的balanceOf功能不同于ERC20和ERC777的原因:它有一个额外的id参数,用于您要查询余额的代币的标识符。这类似于ERC721做事的方式,但在该标准中,代币id没有平衡的
2022年1月25日,区块链服务网络发展联盟(简称“BSN联盟”)推出了“BSN-DDC基础网络”(简称DDC网络)。DDC网络的推出,为NFT技术在我国的落地提供基础设施能力支撑,并为其合规发展保驾护航。DDC(DistributedDigitalCertificate)即分布式数字凭证,其属性和功能类似于NFT。NFT是现实或数字世界中某个事物在区块链上的数字化权益证明,尽管目前大多被用于数字艺术品版权领域,然而其本质上是一种区块链分布式数据库技术,并不带有特定的业务属性,它的潜在使用场景是非常广泛的,可应用在数字商品凭证、票证、账户管理、知识产权等各种领域。DDC网络不直接向个人用户提供
说明:本文为澳洲央行及澳洲数字金融合作研究中心(DFCRC)授权发布的新闻稿。文章中提到的Unizon“发票通证化”案例,是ERC-3525应用生态发展的一项重要进展。作为ERC-3525的提出者,Solv积极支持此类Web3探索,并且乐见Web3技术在实体经济中得到应用。3月2日,澳大利亚中央银行和数字金融合作研究中心(DFCRC)对外公布了其数字货币试点计划的14个入选案例,其中澳洲的初创区块链科技公司Unizon提交的“发票通证化”项目入选。该项目基于ERC-3525半同质化通证标准开发区块链上的下一代数字发票,配合澳洲央行发行的试验数字澳元,能够将发票转变为自动化支付工具和可份额化的高
ERC1155多代币标准ERC1155结合了ERC20和ERC721的能力,这是一个标准接口,支持开发同质化的、半同质化的、非同质化的代币和其他配置的通用智能合约。IERC1155接口//SPDX-License-Identifier:MIT//OpenZeppelinContracts(lastupdatedv4.7.0)(token/ERC1155/IERC1155.sol)pragmasolidity^0.8.0;import"../../utils/introspection/IERC165.sol";//IERC1155接口同样继承了IERC165接口interfaceIERC115
在上一章节中完成了一个非常简单的合约,本节中将按照ERC20协议完成一个合约,本章部分源代码参考于网络开源代码,详细了解:openzeppelin-contracts/contracts/token/ERC20atmaster·OpenZeppelin/openzeppelin-contracts·GitHub。开始之前先介绍一下什么是ERC20:ERC-20指的是以太坊网络的一种代币合约标准。ERC-20是现在最出名的标准,ERC-20标准里无价值的差别,Token之间是能够进行互换的。意思就是在ERC-20标准下,你的100块“钱”和我的100块“钱”相同,没什么区别。ERC-20标准里规
ERC-3525标准是以太坊社区批准通过的半匀质化通证(SemifungibleToken,亦称为半同质化通证,简称SFT)标准,由SolvProtocol提出。ERC-3525标准定义了一类新型的数字资产,具有以下突出优势:与ERC-721标准兼容,具有唯一ID和可视化外观,可复用现有的大量NFT基础设施;可拆分、可合并、可计算;具有账户特征,可以容纳其他数字资产,如ERC-20通证、NFT等,并支持在若干SFT之间的转账操作;可以对外观、功能、资产存储、锁定、转账等各方面进行编程,并且为元数据的结构化进行了特别的优化,以支持动态变化、复杂金融逻辑等高级功能的开发。由于具有以上的优势,ERC