🚀

Astar NetworkでNFTを発行/配布するベストプラクティス

【結論】 Astar Network対応のプロバイダーサービス一覧

プロバイダーサービス Astar対応 動作確認 カスタマイズ性
BLAST
Thirdweb
Alchemy × ×
INFURA × × ×

現状は細かくカスタマイズするならBLAST、NFT発行など決まっている場合はThirdwebといった感じの印象

BLASTでNFT発行

ダッシュボードからプロジェクトの作成してRPC URLを発行

サイトトップからアクセス

metamaskで認証

新しいアプリを作成

RPC URLをコピー

Contractの作成

BaseERC721.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.17;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract BaseERC721 is ERC721Enumerable, Ownable {
    using Strings for uint256;

    //@param baseURI: url of base
    string public baseURI;

    //CONSTRUCTOR
    constructor(
        string memory _name,
        string memory _symbol
    ) ERC721(_name, _symbol) {}

    function tokenURI(
        uint256 tokenId
    ) public view virtual override returns (string memory) {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        return baseURI;
    }

    function mint(address _receiver) public {
        _mint(_receiver, totalSupply() + 1);
    }

    //SET
    //@notice set BaseURI
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
}

scripts/deploy.ts
import { ethers } from "ethers";
import { BaseERC721 } from "../models/BaseERC721";

const RPC_URL = process.env.RPC_URL || "";
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";

async function main() {
    // 接続先のプロバイダーを設定
    const provider = new ethers.providers.JsonRpcProvider(RPC_URL);
    
    // 秘密鍵を使って署名者を生成
    const signer = new ethers.Wallet(PRIVATE_KEY, provider);
    
    // ABIとバイトコードを設定
    const Abi = BaseERC721.abi;
    const Bytecode = BaseERC721.bytecode;
    
    // コントラクトファクトリーを作成
    const nftFactory = new ethers.ContractFactory(Abi, Bytecode, signer);
    
    // コントラクトをデプロイ
    const nft = await nftFactory.deploy();
    
    // デプロイが完了するまで待機
    await nft.deployed();
    
    console.log(`BaseERC721 with deployed to ${nft.address}`);
}

// エラー処理
main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
});
node scripts/deploy.ts

謝辞

こちらの記事は知り合いのエンジニアの方々に相談させて頂き、それらを元にZennとしてまとめました。この場を借りて感謝申し上げます🙇‍♂️

シンシズモ株式会社

Discussion