Skip to content

Instantly share code, notes, and snippets.

@CS6
Last active August 24, 2023 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CS6/402806a7da4c4ab64291ad191415879f to your computer and use it in GitHub Desktop.
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=
// 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]);
}
}
}
<!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