{"id":9094,"date":"2023-06-11T15:37:20","date_gmt":"2023-06-11T15:37:20","guid":{"rendered":"https:\/\/ai.catenacap.xyz\/?p=9094"},"modified":"2023-11-27T13:15:58","modified_gmt":"2023-11-27T13:15:58","slug":"fungible-meets-non-fungible-erc20-erc721-erc115","status":"publish","type":"post","link":"https:\/\/ai.catenacap.xyz\/?p=9094","title":{"rendered":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115]"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"9094\" class=\"elementor elementor-9094\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e2f28ce elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e2f28ce\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-60b0e1c\" data-id=\"60b0e1c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4992dfe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4992dfe\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c48495a\" data-id=\"c48495a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bf0cf98 elementor-widget elementor-widget-text-editor\" data-id=\"bf0cf98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Tokens that combine fungibility with non-fungible aspects. By incorporating elements of both ERC-20 and ERC-721 or ERC-1155 standards, you can create tokens that have fungible properties but also unique inscriptions or characteristics.<\/p><p>To implement this <a href=\"https:\/\/github.com\/catenacap\/tokencontract-fungible-inscripted\">hybrid token<\/a>, you can modify the standard ERC-20 token contract to include an additional mapping that associates an inscription or metadata with each token ID.<\/p><p>Here&#8217;s an example of how you could modify the contract: In this contract, we have added a mapping called tokenInscription, which associates a token ID (represented by a uint256 value) with an inscription (represented by a string value).<\/p><p>The setInscription function allows the owner to set an inscription for a given token ID, and the getInscription function retrieves the inscription for a given token ID.<\/p><p>Note that this contract is still compliant with the ERC-20 standard, as it includes the basic functionality for balance tracking and transfers.<\/p><p>However, it extends the standard by providing methods for setting and retrieving inscriptions associated with each token.<\/p><p><strong>Remember to thoroughly test and audit any smart contract code before deploying it to the blockchain.<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-de6cd17 elementor-widget elementor-widget-code-highlight\" data-id=\"de6cd17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract InscribedToken {\n    string public name;\n    string public symbol;\n    uint8 public decimals;\n    uint256 public totalSupply;\n\n    mapping(address => uint256) public balanceOf;\n    mapping(uint256 => string) public tokenInscription;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Inscription(uint256 indexed tokenId, string inscription);\n\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        uint8 _decimals,\n        uint256 _initialSupply\n    ) {\n        name = _name;\n        symbol = _symbol;\n        decimals = _decimals;\n        totalSupply = _initialSupply * 10**uint256(decimals);\n        balanceOf[msg.sender] = totalSupply;\n    }\n\n    function transfer(address _to, uint256 _value) external returns (bool) {\n        require(_value <= balanceOf[msg.sender], \"Insufficient balance\");\n\n        balanceOf[msg.sender] -= _value;\n        balanceOf[_to] += _value;\n\n        emit Transfer(msg.sender, _to, _value);\n        return true;\n    }\n\n    function setInscription(uint256 _tokenId, string memory _inscription) external {\n        require(_tokenId < totalSupply, \"Invalid token ID\");\n\n        tokenInscription[_tokenId] = _inscription;\n        emit Inscription(_tokenId, _inscription);\n    }\n\n    function getInscription(uint256 _tokenId) external view returns (string memory) {\n        require(_tokenId < totalSupply, \"Invalid token ID\");\n\n        return tokenInscription[_tokenId];\n    }\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9ab57c9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9ab57c9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f89c14c\" data-id=\"f89c14c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f3b6b65 elementor-widget elementor-widget-text-editor\" data-id=\"f3b6b65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Enhanced version (for deployment testing).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54c2ee5 elementor-widget elementor-widget-code-highlight\" data-id=\"54c2ee5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/ SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract InscribedTokenRIDT {\n    string public name = \"Research_Inscribable_Data\";\n    string public symbol = RIDT;\n    uint8 public decimals = 1;\n    uint256 public totalSupply = 10;\n    bool public paused;\n\n    mapping(address => mapping(uint256 => uint256)) public balanceOf;\n    mapping(uint256 => string) public tokenInscription;\n    mapping(address => mapping(address => uint256)) public allowance;\n    mapping(address => bool) public isBlacklisted;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Inscription(uint256 indexed tokenId, string inscription);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n    event Paused();\n    event Unpaused();\n    event BlacklistAdded(address indexed account);\n    event BlacklistRemoved(address indexed account);\n    event ContractRenamed(string newName);\n    event TokenNameChanged(string newName);\n\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        uint8 _decimals,\n        uint256 _initialSupply\n    ) {\n        name = _name;\n        symbol = _symbol;\n        decimals = _decimals;\n        totalSupply = _initialSupply * 10**uint256(decimals);\n        paused = false;\n\n        for (uint256 i = 1; i <= totalSupply; i++) {\n            balanceOf[msg.sender][i] = 1;\n            tokenInscription[i] = string(abi.encodePacked(\"101_inscribe_\", toString(i)));\n            emit Transfer(address(0), msg.sender, 1);\n            emit Inscription(i, tokenInscription[i]);\n        }\n    }\n\n    modifier whenNotPaused() {\n        require(!paused, \"Contract is paused\");\n        _;\n    }\n\n    modifier whenPaused() {\n        require(paused, \"Contract is not paused\");\n        _;\n    }\n\n    function transfer(address _to, uint256 _tokenId, uint256 _value) external whenNotPaused returns (bool) {\n        require(_value <= balanceOf[msg.sender][_tokenId], \"Insufficient balance\");\n\n        balanceOf[msg.sender][_tokenId] -= _value;\n        balanceOf[_to][_tokenId] += _value;\n\n        emit Transfer(msg.sender, _to, _value);\n        return true;\n    }\n\n    function setInscription(uint256 _tokenId, string memory _inscription) external {\n        require(_tokenId <= totalSupply, \"Invalid token ID\");\n\n        tokenInscription[_tokenId] = _inscription;\n        emit Inscription(_tokenId, _inscription);\n    }\n\n    function getInscription(uint256 _tokenId) external view returns (string memory) {\n        require(_tokenId <= totalSupply, \"Invalid token ID\");\n\n        return tokenInscription[_tokenId];\n    }\n\n    function approve(address _spender, uint256 _tokenId, uint256 _value) external whenNotPaused returns (bool) {\n        allowance[msg.sender][_spender] = _value;\n        emit Approval(msg.sender, _spender, _value);\n        return true;\n    }\n\n    function transferFrom(address _from, address _to, uint256 _tokenId, uint256 _value) external whenNotPaused returns (bool) {\n        require(_value <= balanceOf[_from][_tokenId], \"Insufficient balance\");\n        require(_value <= allowance[_from][msg.sender], \"Insufficient allowance\");\n\n        balanceOf[_from][_tokenId] -= _value;\n        balanceOf[_to][_tokenId] += _value;\n        allowance[_from][msg.sender] -= _value;\n\n        emit Transfer(_from, _to, _value);\n        return true;\n    }\n\n    function pause() external {\n        require(!paused, \"Contract is already paused\");\n        paused = true;\n        emit Paused();\n    }\n\n    function unpause() external {\n        require(paused, \"Contract is not paused\");\n        paused = false;\n        emit Unpaused();\n    }\n\n    function addBlackList(address _account) external whenNotPaused {\n        require(!isBlacklisted[_account], \"Account is already blacklisted\");\n        isBlacklisted[_account] = true;\n        emit BlacklistAdded(_account);\n    }\n\n    function removeBlackList(address _account) external whenNotPaused {\n        require(isBlacklisted[_account], \"Account is not blacklisted\");\n        isBlacklisted[_account] = false;\n        emit BlacklistRemoved(_account);\n    }\n\n    function destroyBlackFunds(address _blacklisted) external whenNotPaused {\n        require(isBlacklisted[_blacklisted], \"Account is not blacklisted\");\n\n        for (uint256 i = 1; i <= totalSupply; i++) {\n            uint256 blacklistedBalance = balanceOf[_blacklisted][i];\n            balanceOf[_blacklisted][i] = 0;\n            balanceOf[msg.sender][i] += blacklistedBalance;\n            emit Transfer(_blacklisted, msg.sender, blacklistedBalance);\n        }\n    }\n\n    function redeem(uint256 _tokenId) external whenNotPaused {\n        require(balanceOf[msg.sender][_tokenId] > 0, \"Insufficient balance\");\n\n        uint256 balance = balanceOf[msg.sender][_tokenId];\n        balanceOf[msg.sender][_tokenId] = 0;\n        balanceOf[msg.sender][0] += balance;\n\n        emit Transfer(msg.sender, address(0), balance);\n    }\n\n    function issue(\n        address _to,\n        uint256[] calldata _tokenIds,\n        uint256[] calldata _values\n    ) external whenNotPaused {\n        require(_tokenIds.length == _values.length, \"Invalid input\");\n\n        for (uint256 i = 0; i < _tokenIds.length; i++) {\n            uint256 tokenId = _tokenIds[i];\n            uint256 value = _values[i];\n\n            require(tokenId <= totalSupply, \"Invalid token ID\");\n\n            balanceOf[_to][tokenId] += value;\n            tokenInscription[tokenId] = string(abi.encodePacked(\"101_inscribe_\", toString(tokenId)));\n            emit Transfer(address(0), _to, value);\n            emit Inscription(tokenId, tokenInscription[tokenId]);\n        }\n    }\n\n    function setParams(string memory _name, string memory _symbol) external {\n        name = _name;\n        symbol = _symbol;\n        emit ContractRenamed(_name);\n        emit TokenNameChanged(_symbol);\n    }\n\n    function depreciate(uint256 _tokenId, uint256 _value) external whenNotPaused {\n        require(balanceOf[msg.sender][_tokenId] >= _value, \"Insufficient balance\");\n\n        balanceOf[msg.sender][_tokenId] -= _value;\n        emit Transfer(msg.sender, address(0), _value);\n    }\n\n    \/\/ Helper function to convert uint to string\n    function toString(uint256 value) internal pure returns (string memory) {\n        if (value == 0) {\n            return \"0\";\n        }\n\n        uint256 temp = value;\n        uint256 digits;\n\n        while (temp != 0) {\n            digits++;\n            temp \/= 10;\n        }\n\n        bytes memory buffer = new bytes(digits);\n\n        while (value != 0) {\n            digits -= 1;\n            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n            value \/= 10;\n        }\n\n        return string(buffer);\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Tokens that combine fungibility with non-fungible aspects. By incorporating elements of both ERC-20 and ERC-721 or ERC-1155 standards, you can create tokens that have fungible properties but also unique inscriptions or characteristics. To implement this hybrid token, you can modify the standard ERC-20 token contract to include an additional mapping that associates an inscription or [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":15070,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"disable_featured_image":true,"footnotes":""},"categories":[52,63,8,47,58],"tags":[53,56],"class_list":["post-9094","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-academic","category-blockchain","category-data-science","category-government-state","category-nf","tag-academic","tag-paper"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115] - AI | Catena Cap<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ai.catenacap.xyz\/?p=9094\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115] - AI | Catena Cap\" \/>\n<meta property=\"og:description\" content=\"Tokens that combine fungibility with non-fungible aspects. By incorporating elements of both ERC-20 and ERC-721 or ERC-1155 standards, you can create tokens that have fungible properties but also unique inscriptions or characteristics. To implement this hybrid token, you can modify the standard ERC-20 token contract to include an additional mapping that associates an inscription or [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ai.catenacap.xyz\/?p=9094\" \/>\n<meta property=\"og:site_name\" content=\"AI | Catena Cap\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-11T15:37:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-27T13:15:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"catenacap\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CatenaCap\" \/>\n<meta name=\"twitter:site\" content=\"@CatenaCap\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"catenacap\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094\"},\"author\":{\"name\":\"catenacap\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#\\\/schema\\\/person\\\/75ca7b868ab1bd837d6a97e236a389d9\"},\"headline\":\"Fungible meets Non-Fungible [ERC20 + ERC721\\\/ERC115]\",\"datePublished\":\"2023-06-11T15:37:20+00:00\",\"dateModified\":\"2023-11-27T13:15:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094\"},\"wordCount\":192,\"publisher\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/06\\\/6161db7bfc250dcbc348a6af_sec.jpg\",\"keywords\":[\"Academic\",\"Paper\"],\"articleSection\":[\"Academic\",\"Blockchain\",\"Data science\",\"Government\\\/State\\\/Political\",\"NF\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094\",\"url\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094\",\"name\":\"Fungible meets Non-Fungible [ERC20 + ERC721\\\/ERC115] - AI | Catena Cap\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/06\\\/6161db7bfc250dcbc348a6af_sec.jpg\",\"datePublished\":\"2023-06-11T15:37:20+00:00\",\"dateModified\":\"2023-11-27T13:15:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#primaryimage\",\"url\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/06\\\/6161db7bfc250dcbc348a6af_sec.jpg\",\"contentUrl\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/06\\\/6161db7bfc250dcbc348a6af_sec.jpg\",\"width\":1600,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?p=9094#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ai.catenacap.xyz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fungible meets Non-Fungible [ERC20 + ERC721\\\/ERC115]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#website\",\"url\":\"https:\\\/\\\/ai.catenacap.xyz\\\/\",\"name\":\"AI | Catena Cap\",\"description\":\"Don&#039;t Trust, Verify\",\"publisher\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#organization\",\"name\":\"AI | CatenaCap\",\"url\":\"https:\\\/\\\/ai.catenacap.xyz\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/02\\\/occ-fav-150x150-1.png\",\"contentUrl\":\"https:\\\/\\\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\\\/uploads\\\/2023\\\/02\\\/occ-fav-150x150-1.png\",\"width\":150,\"height\":150,\"caption\":\"AI | CatenaCap\"},\"image\":{\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/CatenaCap\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ai.catenacap.xyz\\\/#\\\/schema\\\/person\\\/75ca7b868ab1bd837d6a97e236a389d9\",\"name\":\"catenacap\",\"sameAs\":[\"http:\\\/\\\/ai.catenacap.xyz\"],\"url\":\"https:\\\/\\\/ai.catenacap.xyz\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115] - AI | Catena Cap","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ai.catenacap.xyz\/?p=9094","og_locale":"en_US","og_type":"article","og_title":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115] - AI | Catena Cap","og_description":"Tokens that combine fungibility with non-fungible aspects. By incorporating elements of both ERC-20 and ERC-721 or ERC-1155 standards, you can create tokens that have fungible properties but also unique inscriptions or characteristics. To implement this hybrid token, you can modify the standard ERC-20 token contract to include an additional mapping that associates an inscription or [&hellip;]","og_url":"https:\/\/ai.catenacap.xyz\/?p=9094","og_site_name":"AI | Catena Cap","article_published_time":"2023-06-11T15:37:20+00:00","article_modified_time":"2023-11-27T13:15:58+00:00","og_image":[{"width":1600,"height":900,"url":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg","type":"image\/jpeg"}],"author":"catenacap","twitter_card":"summary_large_image","twitter_creator":"@CatenaCap","twitter_site":"@CatenaCap","twitter_misc":{"Written by":"catenacap","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ai.catenacap.xyz\/?p=9094#article","isPartOf":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094"},"author":{"name":"catenacap","@id":"https:\/\/ai.catenacap.xyz\/#\/schema\/person\/75ca7b868ab1bd837d6a97e236a389d9"},"headline":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115]","datePublished":"2023-06-11T15:37:20+00:00","dateModified":"2023-11-27T13:15:58+00:00","mainEntityOfPage":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094"},"wordCount":192,"publisher":{"@id":"https:\/\/ai.catenacap.xyz\/#organization"},"image":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094#primaryimage"},"thumbnailUrl":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg","keywords":["Academic","Paper"],"articleSection":["Academic","Blockchain","Data science","Government\/State\/Political","NF"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ai.catenacap.xyz\/?p=9094","url":"https:\/\/ai.catenacap.xyz\/?p=9094","name":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115] - AI | Catena Cap","isPartOf":{"@id":"https:\/\/ai.catenacap.xyz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094#primaryimage"},"image":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094#primaryimage"},"thumbnailUrl":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg","datePublished":"2023-06-11T15:37:20+00:00","dateModified":"2023-11-27T13:15:58+00:00","breadcrumb":{"@id":"https:\/\/ai.catenacap.xyz\/?p=9094#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ai.catenacap.xyz\/?p=9094"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ai.catenacap.xyz\/?p=9094#primaryimage","url":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg","contentUrl":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/06\/6161db7bfc250dcbc348a6af_sec.jpg","width":1600,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/ai.catenacap.xyz\/?p=9094#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ai.catenacap.xyz\/"},{"@type":"ListItem","position":2,"name":"Fungible meets Non-Fungible [ERC20 + ERC721\/ERC115]"}]},{"@type":"WebSite","@id":"https:\/\/ai.catenacap.xyz\/#website","url":"https:\/\/ai.catenacap.xyz\/","name":"AI | Catena Cap","description":"Don&#039;t Trust, Verify","publisher":{"@id":"https:\/\/ai.catenacap.xyz\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ai.catenacap.xyz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ai.catenacap.xyz\/#organization","name":"AI | CatenaCap","url":"https:\/\/ai.catenacap.xyz\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ai.catenacap.xyz\/#\/schema\/logo\/image\/","url":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/02\/occ-fav-150x150-1.png","contentUrl":"https:\/\/bafybeihf3j3elacorgnhodcdk4nnenm63rag6p777elx52d5xwpkmm5rfi.ipfs.dweb.link\/uploads\/2023\/02\/occ-fav-150x150-1.png","width":150,"height":150,"caption":"AI | CatenaCap"},"image":{"@id":"https:\/\/ai.catenacap.xyz\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/CatenaCap"]},{"@type":"Person","@id":"https:\/\/ai.catenacap.xyz\/#\/schema\/person\/75ca7b868ab1bd837d6a97e236a389d9","name":"catenacap","sameAs":["http:\/\/ai.catenacap.xyz"],"url":"https:\/\/ai.catenacap.xyz\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/posts\/9094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9094"}],"version-history":[{"count":0,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/posts\/9094\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=\/wp\/v2\/media\/15070"}],"wp:attachment":[{"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.catenacap.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}