仮想通貨を作ってみた話
タイトルの通りです。実際にSolana Mainnet上にトークンをデプロイするところまでやってみました。この記事では、その過程で起きたちょっとした失敗談や気づきを中心に書きます。完全な再現手順は別記事(Zenn)にまとめているので、そちらもあわせてどうぞ。
前置き: 1月に114514コインで爆死した話
実は仮想通貨自体は前から知っていました。ただ、今年の1月に「114514コイン」というネタコインに手を出して爆死した経験があり、しばらく仮想通貨から距離を置いていました。
さらに、その余興でPump.funを使っていくつかコインを量産していた時期もありました。その中の1つだけ伸びて「お、これはいけるかも」と思った矢先にすぐ下落して結局損をする、という展開もあり、当時はかなり苦い思い出として残っています。
そんな経緯もあって、今回自分でトークンを作るにあたっては「投機」ではなく「技術的に作ってみる」ことを目的にしようと決めていました。
きっかけは「名前決め」からの絶望
最初、「かわいい系の名前がいいな」と思ってフルーツの名前をいくつか考えました。
- Lemon
- Mango
- Yuzu
- Pear
- Lime
- Fig
- Plum
- Kiwi
……全部、既存の仮想通貨に取られていました。メジャーな果物名は本当に全滅で、正直ここで一番驚きました。仮想通貨の世界、思っていたより名前の空きがないです。
行き詰まっていたところ、たまたまDiscordであるサーバーを眺めていたら「Awin」という単語が目に入りました。響きも悪くないし、調べても既存の仮想通貨と被っていなかったので、これに決めました。
名前は「AwinCoin」に決定
というわけで、最終的に**AwinCoin(シンボル: AWN)**という名前に落ち着きました。フルーツ路線を諦めて、思わぬところから拾ってきた名前でしたが、シンプルで気に入っています。
ブロックチェーン選びはSolana
Ethereum、Solana、BSCで迷いましたが、最終的にSolanaを選びました。理由は以下の通りです。
- ガス代が圧倒的に安い(数百円以下で色々試せる)
- Rustという新しい言語に触れられる
- 個人開発でも現実的に完結できる規模感
ゼロから独自ブロックチェーンを作る案も一瞬考えましたが、これは流石に規模が違いすぎるので、Solana上にトークン(SPL Token)を作る方向にしました。
1桁ミスって10億枚発行してしまった話
1億枚(100,000,000)発行するつもりが、コマンドの桁を打ち間違えて 10億枚(1,000,000,000) 発行してしまいました。
user@PC:~$ spl-token balance <トークンアドレス>
1000000000
一瞬「まあこのままでもいいか」とも思いましたが、最初に決めた1億枚に寄せたかったので、余分な9億枚をburn(焼却)コマンドで処分しました。仮想通貨は発行してしまっても後から調整できるんだと実感した瞬間でした。
ロゴは寝落ちしている間に友人が作ってくれた
ロゴをどうしようか悩みながら友人と通話していたのですが、途中で力尽きて寝落ちしてしまいました。そうしたら、起きた頃には友人がChatGPTで黄色いコインに白抜きの「A」というロゴを作ってくれていました。狙っていたイメージにかなり近いものが出来上がっていて、正直助かりました。持つべきものは友人です。
メタデータ登録でのエラー地獄
名前とロゴをトークンに紐付ける作業(Metaplexのメタデータ登録)で一番苦戦しました。使ったmetabossというツールをインストールする段階で、依存パッケージのバージョン不整合によるビルドエラーが発生。
error[E0432]: unresolved import `console::Term`
--lockedオプションを付けてバージョンを固定することで解決しましたが、ここで結構時間を使いました。
さらに、メタデータのJSONフォーマットも一筋縄ではいきませんでした。サーバーに置いた画像URLなどを含む「オフチェーン用JSON」をそのままmetabossに渡したらエラー。
Error: missing field `uri` at line 15 column 1
metabossが要求するのは、name・symbol・uri(オフチェーンJSONへのリンク)・seller_fee_basis_points・creatorsを持つオンチェーン登録用の別フォーマットでした。ここは事前情報なしだと絶対にハマるポイントだと思います。
Mainnetデプロイでの残高不足との戦い
Devnetでの動作確認が終わり、いざMainnetへ。ここからは実際のSOL(実資産)が必要になります。少額のSOLを用意して臨みましたが、メタデータ登録の段階で
Transfer: insufficient lamports 1875149, need 2039280
というエラーに遭遇。わずかに残高が足りていませんでした。SOLを少し追加したところ無事に成功しました。114514コインの一件もあって資金には慎重になっていたのですが、個人の小規模な実験でも思ったよりギリギリの資金管理になるんだなという学びがありました。
完成したもの
- トークン名: AwinCoin
- シンボル: AWN
- ネットワーク: Solana Mainnet
- 総供給量: 100,000,000枚
Solana Explorerで実際に名前・ロゴが表示されているのを見たときは、単純に「動いた」という達成感がありました。
おわりに: 作ったはいいものの
技術的な達成感はある一方で、正直なところ「作ったこのトークンを今後どうしようか」というのは全く決まっていません。114514コインの反省もあるので、投機目的で広めるつもりはなく、かといって完全に放置するのももったいない気がしています。
とりあえず今は、友人内で少量配ってみる程度の使い方を考えています。何か面白い使い道を思いついたら、また記事にしようと思います。
再現可能な完全手順はこちらの記事(Zenn)にまとめているので、興味がある方はぜひ。