Getting Started with ERC404
curl -L https://foundry.paradigm.xyz | bash
forge init forge install pandora-labs-org/erc404
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import {ERC404} from "erc404/ERC404.sol"; contract ExampleERC404 is Ownable, ERC404 { constructor( string memory name_, string memory symbol_, uint8 decimals_, uint256 maxTotalSupplyERC721_, address initialOwner_ ) ERC404(name_, symbol_, decimals_) Ownable(initialOwner_) { _setERC721TransferExempt(initialOwner_, true); _mintERC20(initialOwner_, maxTotalSupplyERC721_ * units, false); } function tokenURI(uint256 id_) public pure override returns (string memory) { return string.concat("https://example.com/token/", Strings.toString(id_)); } function setERC721TransferExempt(address account_, bool value_) external onlyOwner { _setERC721TransferExempt(account_, value_); } }
contract Deploy is Script { string memory name = "Example"; string memory symbol = "EXMPL"; uint8 decimals = 18; uint256 maxTotalSupplyERC721 = 10000; modifier broadcast(address deployer) { vm.startBroadcast(deployer); _; vm.stopBroadcast(); } function run() external override { deploy(<Your Deployer Address>); } function deploy(address deployer) public broadcast(deployer) { new ExampleERC404(name, symbol, decimals, maxTotalSupplyERC721, deployer); } }
forge script ./script/Deploy.s.sol:Deploy --broadcast --rpc-url $MAINNET_RPC_URL --private-key $PRIVATE_KEY -vvvv