🛰️
Soneium(ソニューム)のTestnet Minatoにスマートコントラクトをデプロイしてみる
Soneium(ソニューム)
SonyとAstarが共同開発したイーサリアムのL2チェーンです。Opスタックをベースにしてかなりインフラも整っているチェーンのよう。
現在はTestnetのMinatoが稼働中
まだメインネットは動いておらず、テストネットのMinatoが稼働中のようなので、今回はMinatoにデプロイしてみる。
チェーン情報の追加はChainlistを使用
ちゃんとChainlistにも載っててインフラの力の入れようを感じる
Faucetは無いみたいなので公式のBridgeを使用
ちなみにsepoliaのfaucetはこちら
Hardhatのプロジェクトを作成
とりあえずhardhatを入れてプロジェクトを作成していきます。
npm install hardhat
npx hardhat init
コントラクトを作成
今回はウォレットアドレスと名前を紐づけるコントラクトを作成しました。
contracts/NameWalletAddress.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
contract NameWalletAddress {
struct User {
string name;
address walletAddress;
}
mapping(address => User) public users;
function setUser(string memory _name) public {
users[msg.sender] = User(_name, msg.sender);
}
function getUser(address _address) public view returns (string memory, address) {
User memory user = users[_address];
return (user.name, user.walletAddress);
}
}
環境変数を追加
npm i dotenv
.env.local
MINATO_PRIVATE_KEY="0x..." //秘密鍵の追加
hardhatのconfigを設定
hardhat.config.ts
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import dotenv from "dotenv";
dotenv.config();
const MINATO_PRIVATE_KEY = process.env.MINATO_PRIVATE_KEY || "";
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
minato: {
url: "https://rpc.minato.soneium.org",
accounts: [MINATO_PRIVATE_KEY],
},
},
};
export default config;
いざMinatoにデプロイ!
npx hardhat ignition deploy ./ignition/modules/NameWalletAddress.ts --network minato
無事デプロイできてそう
✔ Confirm deploy to network minato (1946)? … yes
Hardhat Ignition 🚀
Deploying [ NameWalletAddress ]
Batch #1
Executed NameWalletAddress#NameWalletAddress
[ NameWalletAddress ] successfully deployed 🚀
Deployed Addresses
NameWalletAddress#NameWalletAddress - 0x00..
自分の名前を刻んでみる
scripts/saveName/index.ts
import { ethers } from "hardhat";
async function setUserName() {
const c = await ethers.getContractAt("NameWalletAddress", contractAddress);
const tx = await c.setUser(newName);
// トランザクションの完了を待つ
const res = await tx.wait();
console.log("トランザクション完了");
console.log("tx hash:", res?.hash);
}
const contractAddress = "0x..."; // コントラクトアドレス
const newName = "kazuma";
setUserName();
(余談)ついでにverifyしてみる
verifyのプラグインをインストール
import "@nomicfoundation/hardhat-verify";
configを修正
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import dotenv from "dotenv";
dotenv.config();
const MINATO_PRIVATE_KEY = process.env.MINATO_PRIVATE_KEY || "";
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
minato: {
url: "https://rpc.minato.soneium.org",
accounts: [MINATO_PRIVATE_KEY],
},
},
etherscan: {
apiKey: {
minato: "",
},
customChains: [
{
network: "minato",
chainId: 1946,
urls: {
apiURL: "https://explorer-testnet.soneium.org/api",
browserURL: "https://explorer-testnet.soneium.org/",
},
},
],
},
};
export default config;
verifyできた
Discussion