ERC20
// contracts/GLDToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract GLDToken is ERC20 {
constructor(uint256 initialSupply) ERC20("Gold", "GLD") {
_mint(msg.sender, initialSupply);
}
}
ERC721
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract GameItem is ERC721URIStorage {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC721("GameItem", "ITM") {}
function awardItem(address player, string memory tokenURI)
public
returns (uint256)
{
uint256 newItemId = _tokenIds.current();
_mint(player, newItemId);
_setTokenURI(newItemId, tokenURI);
_tokenIds.increment();
return newItemId;
}
}
该
ERC721URIStorage
合约是 ERC721 的实现,包括元数据标准扩展 (IERC721Metadata
) 以及每个令牌元数据的机制。这就是该_setTokenURI
方法的来源:我们使用它来存储项目的元数据。 更多内容 https://docs.openzeppelin.com/contracts/4.x/api/token/erc721
1155
// contracts/GameItems.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract GameItem is ERC1155URIStorage {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC1155("") {}
function awardItem(address player, string memory url,uint256 number)
public
returns (uint256)
{
require(bytes(url).length > 0,"number>0");
require(number>0,"number>0");
uint256 newItemId = _tokenIds.current();
_mint(player, newItemId, number, "");
_setURI(newItemId,url);
_tokenIds.increment();
return newItemId;
}
}
https://mirror.xyz/xing824.eth/O3hpbibMf9vLNz6p80YUriU8Bf3bEaJWvRL49FGAgAc
https://wyvernprotocol.com/docs
https://blog.csdn.net/qq_59591392/article/details/124245517
https://victoryeo-62924.medium.com/wyvern-protocol-in-opensea-nft-marketplace-b0cef9a9143a