Solidity

我如何在契約中使用 ERC 20 代幣和 ERC721?

  • October 28, 2021

讓我們考慮在我們的應用程序中,使用者的想法是 NFT,他們將獲得資金。每個想法都應該是獨一無二的,因此人們可以將資金作為 ERC 20 代幣發送到 NFT。現在我想簽訂一份我可以同時使用這兩種標準的契約,請問怎麼可能?

描述:我想創建一個合約,使用者將他的想法上傳為 NFT,這些 NFT 可以從不同的使用者那裡獲得資金,並且使用者必鬚髮送 erc20 代幣作為資金。我們知道 ERC20 和 721 中有一些通用功能,因此我們不能像 ie 一樣在單個契約中同時使用這兩個功能

contract idea is ERC20,ERC721{
.
.
.
}



So what i did for that purpose
   
   I have 3 contracts '1' is main.sol  where i'm importing my '2' other contracts Erc.sol and NFT.sol
   ------- main.sol -------

   SPDX-License-Identifier: Unlicense
   pragma solidity 'some version';
   import "./NFT.sol";
   import "./ERc.sol";
   contract main  {
   
         ERc erc =new ERc();
   
      constructor(uint256 _initialSupply)  {
         
    erc.addInitialSupply(_initialSupply);
       
   }
   
       
       NFT nft = new NFT();
     
    //by using nft instance i can call the NFT contract functions
   } 

——- NFT.sol ——-

pragma solidity 'some version';

import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";



// SPDX-License-Identifier: Unlicense
contract NFT is ERC721URIStorage{
 
//_minting will be here and constructor will overide ERC721

   
//get fund on nftIdea
function fund () public view returns(bool) {

bool res=erc.fundidea('address',value)
return res;
}
}

——– ERC20.sol ——–

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "./NFT.sol";

   contract ERc is ERC20 {
       
   constructor() ERC20('','') {
           
       }
   
   function addInitialSupply(uint256 _initialSupply)  public {
           _mint(msg.sender, _initialSupply * 10 );
       }
       function fundIdea(address _author, uint value) public returns(bool){
            transfer(address(_author), value);
            return true;
       }
   }

為此使用 ERC-1155 標準:https ://eips.ethereum.org/EIPS/eip-1155

核心理念:旨在成為 ERC721 和 ERC20 標準的結合。啟用批量轉移(到多方!)以使東西更便宜。這裡結合解釋,但一般的想法是有另一個映射:

💩 ERC721:映射 id ⇒ 所有者

🧠 ERC1155:映射所有者id餘額

例如:我⇒ 0 ⇒ 200

OpenZeppelin 有一個可能有用的 ERC1155 合約。為了兼容 ERC20 和 ERC721 方案,可能需要添加一些功能,但基本結構在這裡

引用自:https://ethereum.stackexchange.com/questions/112262