当前位置: 首页 > news >正文

空间网站链接怎么做公司网站做的好的公司

空间网站链接怎么做,公司网站做的好的公司,自动seo系统,家装软装设计 上海文章目录 1、NFT - 维基百科2、IERC1155MetadataURI3、IERC1155Receiver4、IERC11555、ERC11556、NFT11557、开源地址 1、NFT - 维基百科 ERC-1155 标准于2018年6月由Witek Radomski、Andrew Cooke、Philippe Castonguay、James Therien、Eric Binet及Ronan Sandford提出。此标… 文章目录 1、NFT - 维基百科2、IERC1155MetadataURI3、IERC1155Receiver4、IERC11555、ERC11556、NFT11557、开源地址 1、NFT - 维基百科 ERC-1155 标准于2018年6月由Witek Radomski、Andrew Cooke、Philippe Castonguay、James Therien、Eric Binet及Ronan Sandford提出。此标准可针对单一应用合约提供同质代币、非同质代币用ERC-1155建构ERC-721资产及其他结构类型例如半同质代币semi-fungible tokens的多元组合。相较于ERC-721每创立一个代币ID就对应一个单独智能合约资产在ERC-1155多元代币标准下每个代币ID可以代表一系列不同类型的资产并附加量化区块以标示钱包中各类型资产的数量同类型资产可以互换要转让多少数量也可以。 ERC-1155 标准下的NFT结构上更有弹性拥有元数据、供应量与其他属性新功能包括可一次传输多种代币类型以节省交易成本、也可同时进行多个代币交易托管/原子交换而无需逐一批准每个合约、可在单一应用合约中注明并混搭多种FT、NFT及SFT。 2、IERC1155MetadataURI // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;// ERC1155的可选接口加入了uri()函数查询元数据 interface IERC1155MetadataURI {// 返回第id种类代币的URIfunction uri(uint256 id) external view returns (string memory); }3、IERC1155Receiver // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;import ./IERC165.sol;interface IERC1155Receiver is IERC165 {// 接受ERC1155安全转账safeTransferFrom function onERC1155Received(address operator,address from,uint256 id,uint256 value,bytes calldata data) external returns (bytes4);// 接受ERC1155批量安全转账safeBatchTransferFrom function onERC1155BatchReceived(address operator,address from,uint256[] calldata ids,uint256[] calldata values,bytes calldata data) external returns (bytes4); }4、IERC1155 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;import ./IERC165.sol;// https://eips.ethereum.org/EIPS/eip-1155[EIP]. interface IERC1155 is IERC165 {// 单类代币转账事件event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);// 批量代币转账事件, ids和values为转账的代币种类和数量数组event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);// 批量授权事件, 当account将所有代币授权给operator时释放event ApprovalForAll(address indexed account, address indexed operator, bool approved);// 当id种类的代币的URI发生变化时释放value为新的URIevent URI(string value, uint256 indexed id);// 持仓查询返回account拥有的id种类的代币的持仓量function balanceOf(address account, uint256 id) external view returns (uint256);// 批量持仓查询accounts和ids数组的长度要想等。function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);// 批量授权将调用者的代币授权给operator地址。释放{ApprovalForAll}事件.function setApprovalForAll(address operator, bool approved) external;// 批量授权查询如果授权地址operator被account授权则返回truefunction isApprovedForAll(address account, address operator) external view returns (bool);// 安全转账将amount单位id种类的代币从from转账给to. 释放{TransferSingle}事件.function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;// 批量安全转账, 释放{TransferBatch}事件function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; }5、ERC1155 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;import ./IERC1155.sol; import ./IERC1155Receiver.sol; import ./IERC1155MetadataURI.sol; import ./Address.sol; import ./Strings.sol; import ./IERC165.sol;// ERC1155多代币标准 https://eips.ethereum.org/EIPS/eip-1155 contract ERC1155 is IERC165, IERC1155, IERC1155MetadataURI {using Address for address; using Strings for uint256; // Token名称string public name;// Token代号string public symbol;// 代币种类id 到 账户account 到 余额balances 的映射mapping(uint256 mapping(address uint256)) private _balances;// address 到 授权地址 的批量授权映射mapping(address mapping(address bool)) private _operatorApprovals;// 构造函数初始化name 和symbol, uri_constructor(string memory name_, string memory symbol_) {name name_;symbol symbol_;}function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {returninterfaceId type(IERC1155).interfaceId ||interfaceId type(IERC1155MetadataURI).interfaceId ||interfaceId type(IERC165).interfaceId;}// 持仓查询 实现IERC1155的balanceOf返回account地址的id种类代币持仓量。function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {require(account ! address(0), ERC1155: address zero is not a valid owner);return _balances[id][account];}// dev 批量持仓查询 function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) {require(accounts.length ids.length, ERC1155: accounts and ids length mismatch);uint256[] memory batchBalances new uint256[](accounts.length);for (uint256 i 0; i accounts.length; i) {batchBalances[i] balanceOf(accounts[i], ids[i]);}return batchBalances;}// 批量授权调用者授权operator使用其所有代币function setApprovalForAll(address operator, bool approved) public virtual override {require(msg.sender ! operator, ERC1155: setting approval status for self);_operatorApprovals[msg.sender][operator] approved;emit ApprovalForAll(msg.sender, operator, approved);}// 查询批量授权.function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {return _operatorApprovals[account][operator];}// 安全转账将amount单位的id种类代币从from转账到tofunction safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data) public virtual override {address operator msg.sender;// 调用者是持有者或是被授权require(from operator || isApprovedForAll(from, operator),ERC1155: caller is not token owner nor approved);require(to ! address(0), ERC1155: transfer to the zero address);// from地址有足够持仓uint256 fromBalance _balances[id][from];require(fromBalance amount, ERC1155: insufficient balance for transfer);// 更新持仓量unchecked {_balances[id][from] fromBalance - amount;}_balances[id][to] amount;// 释放事件emit TransferSingle(operator, from, to, id, amount);// 安全检查_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); }// 批量安全转账将amounts数组单位的ids数组种类代币从from转账到tofunction safeBatchTransferFrom(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual override {address operator msg.sender;// 调用者是持有者或是被授权require(from operator || isApprovedForAll(from, operator),ERC1155: caller is not token owner nor approved);require(ids.length amounts.length, ERC1155: ids and amounts length mismatch);require(to ! address(0), ERC1155: transfer to the zero address);// 通过for循环更新持仓 for (uint256 i 0; i ids.length; i) {uint256 id ids[i];uint256 amount amounts[i];uint256 fromBalance _balances[id][from];require(fromBalance amount, ERC1155: insufficient balance for transfer);unchecked {_balances[id][from] fromBalance - amount;}_balances[id][to] amount;}emit TransferBatch(operator, from, to, ids, amounts);// 安全检查_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); }// 锻造function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual {require(to ! address(0), ERC1155: mint to the zero address);address operator msg.sender;_balances[id][to] amount;emit TransferSingle(operator, address(0), to, id, amount);_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);}// 批量铸造function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {require(to ! address(0), ERC1155: mint to the zero address);require(ids.length amounts.length, ERC1155: ids and amounts length mismatch);address operator msg.sender;for (uint256 i 0; i ids.length; i) {_balances[ids[i]][to] amounts[i];}emit TransferBatch(operator, address(0), to, ids, amounts);_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);}// 销毁function _burn(address from, uint256 id, uint256 amount) internal virtual {require(from ! address(0), ERC1155: burn from the zero address);address operator msg.sender;uint256 fromBalance _balances[id][from];require(fromBalance amount, ERC1155: burn amount exceeds balance);unchecked {_balances[id][from] fromBalance - amount;}emit TransferSingle(operator, from, address(0), id, amount);}// 批量销毁function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual {require(from ! address(0), ERC1155: burn from the zero address);require(ids.length amounts.length, ERC1155: ids and amounts length mismatch);address operator msg.sender;for (uint256 i 0; i ids.length; i) {uint256 id ids[i];uint256 amount amounts[i];uint256 fromBalance _balances[id][from];require(fromBalance amount, ERC1155: burn amount exceeds balance);unchecked {_balances[id][from] fromBalance - amount;}}emit TransferBatch(operator, from, address(0), ids, amounts);}// 安全转账检查function _doSafeTransferAcceptanceCheck( address operator, address from, address to,uint256 id, uint256 amount, bytes memory data) private {if (to.isContract()) {try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {if (response ! IERC1155Receiver.onERC1155Received.selector) {revert(ERC1155: ERC1155Receiver rejected tokens);}} catch Error(string memory reason) {revert(reason);} catch {revert(ERC1155: transfer to non-ERC1155Receiver implementer);}}}// ERC1155的批量安全转账检查function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to,uint256[] memory ids, uint256[] memory amounts, bytes memory data) private {if (to.isContract()) {try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {if (response ! IERC1155Receiver.onERC1155BatchReceived.selector) {revert(ERC1155: ERC1155Receiver rejected tokens);}} catch Error(string memory reason) {revert(reason);} catch {revert(ERC1155: transfer to non-ERC1155Receiver implementer);}}}// 返回id种类代币的uri存储metadata类似ERC721的tokenURI.function uri(uint256 id) public view virtual override returns (string memory) {string memory baseURI _baseURI();return bytes(baseURI).length 0 ? string(abi.encodePacked(baseURI, id.toString())) : ;}// 计算{uri}的BaseURIuri就是把baseURI和tokenId拼接在一起需要开发重写.function _baseURI() internal view virtual returns (string memory) {return ;} }6、NFT1155 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4;import ./ERC1155.sol; contract NFT1155 is ERC1155 {uint256 constant MAX_ID 10000;constructor() ERC1155(NFT1155, NFT1155){}function _baseURI() internal pure override returns (string memory) {return ipfs://QmcPGA3kecSMfHcv8i6wpgB2RkPA1FSVqu6AZY3rKNmxuj/;}function mint(address to, uint256 id, uint256 amount) external {require(id MAX_ID, id overflow);_mint(to, id, amount, );}function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts) external {for(uint256 i 0; i ids.length;i){require(ids[i] MAX_ID, id overflow);}_mintBatch(to, ids, amounts, );} }测试运行 7、开源地址 gitee 开源地址。
http://www.zqtcl.cn/news/94903/

相关文章:

  • 推广网站文案素材lamp环境wordpress
  • 合肥网站建设公司 推荐百度下载安装2021
  • 沈阳网站备案照相离婚证app制作软件
  • 唯品会一家做特卖的网站 分析那些网站可以做反链
  • 百度网站排名查询工具网站标签怎么做
  • 如何用ps做网站导航一个网站开发时间
  • 合肥城乡建设网站06628 网页制作与网站建设
  • 网站设计岗位的职责与要求北京网站建设 合一
  • 网站制作app开发公司网站建设 英文
  • 毕业设计网页制作网站建设网站预约挂号怎么做
  • 河东天津网站建设永州做网站的公司
  • 网页制作与网站建设填空题免费的企业邮箱怎么申请
  • 智慧农业网站建设沈阳建设信息网
  • 永久免费素材网站个人网站域名所有权
  • 做网站都需要什么工具网站开发培训哪里好
  • 做网站里面的图片像素要求安徽 网站建设
  • 电子商务推广网站wordpress小程序搭建
  • 张家港网站开发培训广告代理那些平台可以给网站做外链
  • 搞一个公司网站得多少钱中国航天空间站最新消息
  • php移动网站开发微商做图王官方网站
  • 制作网站中英文字体不能为网页设计与制作教程试题
  • 网站建设与管理案例柳洪轶wordpress学校站模板
  • 湖北省和住房建设厅官方网站自媒体专业
  • 榆林网站开发自己建设购物网站
  • 新材建设局网站百度提问首页
  • 网站优化网站建设栅格布局 网站设计
  • 网站建设销售前景网站手机开
  • 网站建站 用户注册北京网站建设方案报价
  • jsp做网站 案例网站模板 招聘
  • 德州建设银行兑换网站服务器网站跳转怎么做的