Last active
August 24, 2023 10:53
-
-
Save CS6/402806a7da4c4ab64291ad191415879f to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.18+commit.87f61d96.js&optimize=false&runs=200&gist=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.9; | |
import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; | |
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; | |
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; | |
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol"; | |
import "@openzeppelin/contracts/access/Ownable.sol"; | |
import "@openzeppelin/contracts/utils/Counters.sol"; | |
contract EChangeXmasToken is | |
ERC721, | |
ERC721Enumerable, | |
ERC721URIStorage, | |
ERC721Burnable, | |
Ownable | |
{ | |
using Counters for Counters.Counter; | |
Counters.Counter private _tokenIdCounter; | |
// Mapping from token ID to creator's address | |
mapping(uint256 => address) private _tokenCreators; | |
constructor() ERC721("Elysium's E-Change Gifts", "E-Change") {} | |
function safeMint(address to, string memory uri, address tokenCreator) public onlyOwner { | |
uint256 tokenId = _tokenIdCounter.current(); | |
_tokenIdCounter.increment(); | |
_safeMint(to, tokenId); | |
_setTokenURI(tokenId, uri); | |
_tokenCreators[tokenId] = tokenCreator; | |
} | |
function getCreatorOfToken(uint256 tokenId) public view returns (address) { | |
return _tokenCreators[tokenId]; | |
} | |
// The following functions are overrides required by Solidity. | |
function _beforeTokenTransfer( | |
address from, | |
address to, | |
uint256 tokenId, | |
uint256 batchSize | |
) internal override(ERC721, ERC721Enumerable) { | |
super._beforeTokenTransfer(from, to, tokenId, batchSize); | |
} | |
function _burn(uint256 tokenId) | |
internal | |
override(ERC721, ERC721URIStorage) | |
{ | |
super._burn(tokenId); | |
} | |
function tokenURI(uint256 tokenId) | |
public | |
view | |
override(ERC721, ERC721URIStorage) | |
returns (string memory) | |
{ | |
return super.tokenURI(tokenId); | |
} | |
function supportsInterface(bytes4 interfaceId) | |
public | |
view | |
override(ERC721, ERC721Enumerable, ERC721URIStorage) | |
returns (bool) | |
{ | |
return super.supportsInterface(interfaceId); | |
} | |
function mintAndAirdrop(address[] memory recipients, string[] memory uris, address[] memory tokenCreator) public onlyOwner { | |
require(recipients.length == uris.length, "Mismatched arrays length"); | |
for (uint256 i = 0; i < recipients.length; i++) { | |
safeMint(recipients[i], uris[i], tokenCreator[i]); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>操作以太坊合約</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.3.0/web3.min.js"></script> | |
</head> | |
<body> | |
<button onclick="connectWallet()">連接錢包</button> | |
<button onclick="safeMintToken()">safeMint</button> | |
<button onclick="mintAndAirdropTokens()">mintAndAirdrop</button> | |
<script> | |
const contractAddress = "0xacc2be3c7dc2344c3db556f15124617e9d42f582"; // 替換為你的合約地址 | |
const contractABI = [ | |
{ | |
"inputs": [], | |
"stateMutability": "nonpayable", | |
"type": "constructor" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "approved", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "Approval", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "operator", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "bool", | |
"name": "approved", | |
"type": "bool" | |
} | |
], | |
"name": "ApprovalForAll", | |
"type": "event" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "approve", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "_fromTokenId", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "_toTokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "BatchMetadataUpdate", | |
"type": "event" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "burn", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "_tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "MetadataUpdate", | |
"type": "event" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address[]", | |
"name": "recipients", | |
"type": "address[]" | |
}, | |
{ | |
"internalType": "string[]", | |
"name": "uris", | |
"type": "string[]" | |
}, | |
{ | |
"internalType": "address[]", | |
"name": "tokenCreator", | |
"type": "address[]" | |
} | |
], | |
"name": "mintAndAirdrop", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "previousOwner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "OwnershipTransferred", | |
"type": "event" | |
}, | |
{ | |
"inputs": [], | |
"name": "renounceOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"internalType": "string", | |
"name": "uri", | |
"type": "string" | |
}, | |
{ | |
"internalType": "address", | |
"name": "tokenCreator", | |
"type": "address" | |
} | |
], | |
"name": "safeMint", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "safeTransferFrom", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "bytes", | |
"name": "data", | |
"type": "bytes" | |
} | |
], | |
"name": "safeTransferFrom", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "operator", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "approved", | |
"type": "bool" | |
} | |
], | |
"name": "setApprovalForAll", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "Transfer", | |
"type": "event" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "transferFrom", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "transferOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "balanceOf", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "getApproved", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "getCreatorOfToken", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "operator", | |
"type": "address" | |
} | |
], | |
"name": "isApprovedForAll", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "name", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "owner", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "ownerOf", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "bytes4", | |
"name": "interfaceId", | |
"type": "bytes4" | |
} | |
], | |
"name": "supportsInterface", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "symbol", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "index", | |
"type": "uint256" | |
} | |
], | |
"name": "tokenByIndex", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "index", | |
"type": "uint256" | |
} | |
], | |
"name": "tokenOfOwnerByIndex", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "tokenId", | |
"type": "uint256" | |
} | |
], | |
"name": "tokenURI", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "totalSupply", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
} | |
]; // 替換為你的合約ABI | |
let contract; | |
if (typeof window.ethereum !== 'undefined') { | |
window.web3 = new Web3(ethereum); | |
contract = new web3.eth.Contract(contractABI, contractAddress); | |
} else { | |
alert('請安裝MetaMask或其他以太坊瀏覽器插件!'); | |
} | |
async function connectWallet() { | |
try { | |
const accounts = await ethereum.request({ method: 'eth_requestAccounts' }); | |
if (accounts.length > 0) { | |
alert('錢包已連接:' + accounts[0]); | |
} | |
} catch (error) { | |
console.error('錢包連接失敗:', error); | |
} | |
} | |
async function safeMintToken() { | |
try { | |
if (!ethereum) return alert('Please install Metamask'); | |
const connectedAccount = await ethereum.request({ method: 'eth_accounts' }); | |
// 定義 safeMint 的參數 | |
const to = connectedAccount[0]; | |
// const uri = "YOUR_TOKEN_URI"; // 替換為你的token的URI | |
// const tokenCreator = "TOKEN_CREATOR_ADDRESS"; // 替換為token創建者的地址 | |
// const to = ""0x0cd2cdB32ee3501835C95224da1ED4e521889cc6""/* recipient address */; | |
const uri = "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0065_01.json"/* uri */; | |
const tokenCreator = "0x69e1B4D057884E8CC850379241E983d3844bE99C"/* token creator address */; | |
await contract.methods.safeMint(to, uri, tokenCreator).send({ from: connectedAccount[0] }); | |
alert('Token已成功Mint!'); | |
} catch (error) { | |
console.error('safeMint失敗:', error); | |
} | |
} | |
async function mintAndAirdropTokens() { | |
try { | |
const connectedAccount = await ethereum.request({ method: 'eth_accounts' }); | |
// const recipients = ['ADDRESS1', 'ADDRESS2']; // 替換為接收者地址 | |
// const uris = ['URI1', 'URI2']; // 替換為你的token的URIs | |
// const tokenCreators = ['CREATOR_ADDRESS1', 'CREATOR_ADDRESS2']; // 替換為token創建者的地址 | |
const recipients = ["0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6", "0x0cd2cdb32ee3501835c95224da1ed4e521889cc6"] | |
const uris = ["ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2937_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/7047_03.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6563_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2965_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3153_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/5657_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2074_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/8292_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0001_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6280_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/7047_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9830_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9527_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/5788_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2680_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2869_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9324_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0609_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3333_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/5856_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/7001_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/1973_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9275_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9007_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2199_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9275_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9324_03.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/5529_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9007_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9597_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9999_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9324_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6262_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/5788_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6432_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3476_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/8315_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0314_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/1354_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/1973_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3333_03.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/9770_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3064_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6716_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/3333_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6317_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/7047_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/8292_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0651_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0651_01.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/6432_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0651_03.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/2199_02.json", "ipfs://bafybeia55cvecj6gvuc4f7o36a5fzjpgpowxqbjujwyxv63sfypsyt3qui/0065_01.json"]; // 替換為你的token的URIs | |
const tokenCreators = ["0xac448c77ba5709888b5cfcf1d5b022903343e022", "0x468b6e0f71be1e7a26bbc914bd2b828668d4cb93", "0x201b1eb3d516a9d72799307819725ff04ba8b4c3", "0x0f7bd47c73a072341d6a4107ffdc52a8f6f5c00f", "0xa026e93eb51aaea5dd64af3a91ea237347762080", "0xbccd7473fbe528c03695786270786192403201b9", "0x0b312c51b6ee233e24fb10b9978aa377466aae2f", "0x12dfb3477ab79a15c9a2b7f0165795c76ce606ec", "0x0fda81614decddc3733707a1c2f6c031d6b6e1e5", "0x9fad772bcc8a2f1a2c33280009056e90f1d95cd2", "0x468b6e0f71be1e7a26bbc914bd2b828668d4cb93", "0x68e632a0d8d3da6583dbd85f39fb6d5abf77dc4d", "0xc1406994cb14fd4f1c5f79fe4ce4474910a38f6d", "0x7396aac515df8166550f7ae3441524605dd0c4a0", "0x5708360b2fca1db1803f2ac0619060ea3a174e09", "0xd7637451b43f5f3b478a8c027f8471a0808e60ff", "0x65d18c6eab10cb5ec7a5505765f44bc294345fdd", "0xec56e51098fe15e754889421d45cdea8cd30d545", "0xe5f7874c94f5e2f13093054d3deff37a8730834f", "0xc647c2d2aed575730bbeb222a771e167d5cc3615", "0xd8975f16088ae706a017c78daf330eb0bc6e45d5", "0x46b97d1cdd9b67322b0eae602653944a723c1f3d", "0x47a84c1007202f4cd73bd05d07557dc82c677430", "0x2f45b2774c2e4752cfadd4890dfcf5bae17658c6", "0xd478bc416e91bad691af181d7d88a5bf2f5915ee", "0x47a84c1007202f4cd73bd05d07557dc82c677430", "0x65d18c6eab10cb5ec7a5505765f44bc294345fdd", "0x92ecbaf626abf02b4b5aa86b34e485ed540c2fc5", "0x2f45b2774c2e4752cfadd4890dfcf5bae17658c6", "0xce71387f7441253cf9bc39ec3e889dc42fae3d0f", "0xa0abc7ff6e4474e0c4ab75077fc1c93863f0188d", "0x65d18c6eab10cb5ec7a5505765f44bc294345fdd", "0x99f3b8c7c333ba6baf6f50d29365b80d8fa58030", "0x7396aac515df8166550f7ae3441524605dd0c4a0", "0x2a313e6aee950495f101e45074300ef21f36247a", "0x24cac339273cdffd4536b2dc72e973a780c32a73", "0x83d4dffce6e8d4ea64a83c50ca6ef00d931e9338", "0x2b8e79604e6eb7094d87c3379d6f5f4f6f17551d", "0x3fc55656bf27e67b48977d3bd314f73132ce125e", "0x46b97d1cdd9b67322b0eae602653944a723c1f3d", "0xe5f7874c94f5e2f13093054d3deff37a8730834f", "0x0d62c19744f6ee3a68693487cbd4294e62c7e080", "0x6c5094598d2c549c348d42035dfdf5a2fd657ec5", "0x4c960aeaaf968ac5ff98b61652db88b4fad47b77", "0xe5f7874c94f5e2f13093054d3deff37a8730834f", "0xb758006225f8f7f62f516d31ab022275f43a89e2", "0x468b6e0f71be1e7a26bbc914bd2b828668d4cb93", "0x12dfb3477ab79a15c9a2b7f0165795c76ce606ec", "0xc7cba021d0284e7e2b5caa202e8f2b76355d1efd", "0xc7cba021d0284e7e2b5caa202e8f2b76355d1efd", "0x2a313e6aee950495f101e45074300ef21f36247a", "0xc7cba021d0284e7e2b5caa202e8f2b76355d1efd", "0xd478bc416e91bad691af181d7d88a5bf2f5915ee", "0x87b7b7e49e72732f64ea0c810a7de34b2121912d"]; // 替換為token創建者的地址 | |
await contract.methods.mintAndAirdrop(recipients, uris, tokenCreators).send({ from: connectedAccount[0] }); | |
alert('Tokens已成功Mint和Airdrop!'); | |
} catch (error) { | |
console.error('mintAndAirdrop失敗:', error); | |
} | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment