Solidity
我如何在契約中使用 ERC 20 代幣和 ERC721?
讓我們考慮在我們的應用程序中,使用者的想法是 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 方案,可能需要添加一些功能,但基本結構在這裡