こんにちは。大和総研デジタルソリューション研究開発部の桑木です。大和総研では証券取引のポスト・トレード業務へのブロックチェーンの適応検証(注1)や、デジタル証券であるセキュリティ・トークン(ST:Security Token)を取り扱うためのウォレット(注2)と呼ばれるシステムの開発、NFTに関する書籍の執筆(注3)等、ブロックチェーン分野の取り組みを長年進めてきました。また、Ethereum等のパブリックブロックチェーンを活用したWeb3の広がりを見据え、Web3分野の研究開発を行う専門のプロジェクトを発足させ、Web3に関する取り組みを強化しています。
今回はソニーグループのSony Block Solutions Labs Pte. Ltd.が開発したブロックチェーンとして話題となっている「Soneium」のテストネットである「Minato」を使ってオリジナルのコインを発行してみましたので、その方法について解説します。
(注1)大和総研事例「ブロックチェーン技術の業務適用に向けた取り組み」
(注2)大和証券グループ本社「セキュリティ・トークンの引受及びセキュリティ・トークンウォレット「Crossllet」開発のお知らせ」
(注3)大和総研出版書籍「図解まるわかり NFTのしくみ」
1 Soneiumとは?
SoneiumはSony Block Solutions Labs Pte. Ltd.が開発したEthereumのLayer2のブロックチェーンのことです。「Layer2(L2)」とは、「Layer1(L1)(Soneiumの場合はEthereumのこと)」と連携して動き、Layer1のトランザクションの処理をLayer2に移して行うことで、トランザクション処理性能の向上や手数料の低減を実現するための技術の総称です(図1)。いくつかの仕組みがありますが、いずれもLayer2でのトランザクションの処理結果は最終的にLayer1に書き込まれるので、ブロックチェーンが持つ改ざん耐性等のセキュリティ面の特徴を維持したまま、スケーラビリティを向上させる技術として採用されることが多くなっています。

Sony Block Solutions Labs Pte. Ltd.はソニーグループ株式会社とStartale Labs Pte. Ltd.により2023年10月に設立された合弁会社です。Startale Labs Pte. Ltd.はAstar Networkと呼ばれるブロックチェーンを開発しているStake Technologies Pte. Ltd.の代表である渡辺創太氏が立ち上げたWeb3企業です。Astar Networkは日本発のブロックチェーンとして注目を集め、国内外の多くの企業と日本経済新聞の一面に広告を掲載(注4)したことでも有名です。
(注4)Astar Japan Labによる日本経済新聞への一面広告掲載のお知らせ
2 Soneiumのテストネット「Minato」とは?
Soneiumは2024年11月11日現在、開発環境(テストネット)のみが公開されており、本番環境(メインネット)はまだ公開されていません。テストネットにはMinatoという名前が付けられており、MinatoはEthereumのテストネットであるSepoliaと連携して動いています。
SepoliaとMinatoの間はBridgeという仕組みを使ってつながっています。BridgeはLayer1とLayer2をつなぐ仕組みのことであり、Bridgeを使うと、今回の場合はSepoliaとMinatoの間でSepoliaで発行されている暗号資産であるSepolia ETHを移動させることができます(図2)。SoneiumのBridgeはいくつか用意されており、以下のリンクからアクセスできます。
Soneium | Bridges

3 テストネットでオリジナルコインを発行してみる
ここからMinato上にオリジナルのコインを発行してみたいと思います。コインを発行するにはスマートコントラクトというプログラムを作成・コンパイルし、トランザクションを送信してMinatoにデプロイする必要があります。その後、コイン発行用のトランザクションを送信してスマートコントラクトを起動し、コインを発行します(図3)。
Minatoでトランザクションを実行するには手数料を支払う必要があります(一般的にメインネット、テストネット、Layer1、Layer2問わず、トランザクションの実行には手数料の支払いが必要です)。Minatoでは手数料はSepolia ETHで支払います。(後述しますが、テストネットであるSepoliaのSepolia ETHはFaucetというサービスを使って無料で入手できます。したがって法定通貨建てでみた場合、手数料はかかりません。)そのため、Minato上でSepolia ETHを保有していない場合はBridgeを使用してSepoliaからMinatoにSepolia ETHを移動させる必要があります。

今回はスピードを重視し、無料で利用可能なコイン作成のひな型(スマートコントラクトのライブラリ)をそのまま利用し、同時にWeb上の無料の開発ツールを使うことで、ローコード(ほぼノーコード)でのトークン発行を目指します。事前に必要なものは以下の2つです。
MetaMask
・ブラウザの拡張機能の形式で利用するウォレットです。
・MetaMaskの基本的な使い方の説明は省略します。設定から接続先を変更し、Sepoliaに接続しておきます。Sepoliaで使えるSepolia ETH
・事前にSepolia ETHを①のウォレットで作成したアカウントに移転しておきます。
②はFaucetというサービスを利用することで入手可能です。Faucetサービスは以下のものがあります。
Sepolia PoW Faucet
Google Cloud Web3 Faucet
Chainlink Ethereum Sepolia Faucet
3.1 SepoliaからMinatoにSepolia ETHを移転する
3.1.1 MetaMaskとBridgeを接続する
MetaMaskをBridgeと接続し、SepoliaからMinatoにSepolia ETHを移転させる準備を行います。今回はSuperbridgeというBridgeを使用します。MetaMaskをインストールしたブラウザで Superbridgeにアクセスします(図4)。「ウォレットを接続」ボタンを押すことでMetaMaskを連携させます(図5、6、7)。MetaMaskをSepoliaに接続するように表示が出るので、Sepoliaに接続を切り替えます(図8)。
※本ブログで紹介する画面は2024年10月のものです。Soneiumおよび関連するツール類は開発中のものであるため、画面のレイアウトが変わる可能性がありますのでご注意ください。





3.1.2 Bridgeを使ってSepolia ETHを移転する
今回使うMetaMask内にはSepolia ETHを1 ETH用意しておきました。このうち0.5 ETHをMinatoに移転させます。Bridgeで0.5と入力し(図9、10)、トランザクションを作成してMetaMaskで署名してSepoliaのネットワークに送信します(図11、12、13、14)。






「View in explorer」のリンクからブロックチェーンエクスプローラーというブロックチェーン上のデータを閲覧できるツールに移動できます。SepoliaはEtherscan、MinatoはBlockscoutというツールでトランザクションの内容を確認できます。今回のトランザクションはこちらです。
Sepolia(SepoliaのウォレットのアドレスからBridgeへ):
Sepolia Transaction Details | EtherscanMinato(BridgeからMinatoのウォレットのアドレスへ):
Soneium Minato Transaction | Blockscout
最後に、MetaMaskにMinatoの接続情報を追加し、切り替えます。Minatoのブロックチェーンエクスプローラー画面の下のほうにある「Add Minato」を選択します(図15)。MetaMaskが起動するので、ネットワークの切り替えを許可します(図16、17)。



MetaMaskを見ると、Minatoに移動したSepolia ETHの保有量が確認できます(図18)。

ここまででBridgeを利用してSepoliaからMinatoにSepolia ETHを移動させることに成功しました。ここからいよいよオリジナルのコインを発行します。
3.2 スマートコントラクトを開発する
3.2.1 スマートコントラクトの作成とコンパイルを行う
コインを発行するにはスマートコントラクトというプログラムを作成・コンパイルし、トランザクションを送信してMinatoにデプロイする必要があります。トランザクションの送信時にはSepolia ETHで手数料の支払いが必要です。
「〇〇コインを発行する」のような一般的なユースケースに関してはライブラリを使用することで素早くスマートコントラクトを開発することができます。ここではZeppelin Group Ltd.が提供するOpenZeppelinというOSSのライブラリを利用します。
下記のリンクを開きます。
Contracts Wizard - OpenZeppelin Docs
すると図19のような画面が開きます。「ERC20(注5)」を選択していることを確認したうえで、「Mintable(注6)」、「Ownable(注7)」を選択します。また、「Name」と「Symbol」を編集すれば、コインの名前と単位を変更することができます。本ブログでは「MyToken」、「MTK」のままで進めます。編集したら「Open in Remix」を選択します。
(注5)ERC20:Ethereum系のブロックチェーンにおける「〇〇コイン」のようなファンジブルトークン(現金やポイントのデジタル版のイメージ)用のスマートコントラクトの規格
(注6)Mintable:スマートコントラクトにコインの新規・追加発行機能(供給量を増やす機能)を加えるためのオプション
(注7)Ownable:スマートコントラクトをデプロイする際に指定したアカウントがオーナー(管理者)となり、オーナーだけが特定の機能(ここでは上記のコインの新規・追加発行機能)を実行できるようにするオプション

すると「Remix」と呼ばれるブラウザで利用できる無料のスマートコントラクト作成用のエディタが開きます(図20)。本来は自分でソースコードを書く必要がありますが、OpenZeppelinのサイト経由で開くと、すでにソースコードが用意された状態で使い始めることができます。用意されたソースコードを変更する必要はありません。

一番左のパネルにある赤枠で囲ったアイコンを選択します。そして、「Compile contract-xxxxx…」を選択すると、ブラウザ上でスマートコントラクトのコンパイルが行われます(図21)。

3.2.2 スマートコントラクトのデプロイ
コンパイルしたスマートコントラクトをMinatoにデプロイします。デプロイはデプロイ用のトランザクションを送信することで実行されます。この際、手数料の支払いが必要です。
まず、RemixとMetaMaskを連携させ、トランザクションへの署名とMinatoへの送信をできるようにします。一番左のパネルからコンパイルの時に選択したアイコンの一つ下にあるアイコンを選択します。そして、一番上にある「ENVIRONMENT」を選択します(図22)。

いくつか選択肢が表示されますが「Injected Provider - MetaMask」を選択します(図23)。

するとMetaMaskが開いて接続許可を求めてきますので接続を許可します(図24)。MetaMaskはMinatoに接続されている必要がありますので注意してください。

また、MetaMaskで自分のアドレス(今回は0x69eB954D8326D2a395643a535d1EA41145E8a07d)を確認し控えておきます。
MetaMaskを接続すると図25のような画面になります。
赤枠部分に先ほどコピーした自分のアドレスを入力します。これにより、コインのオーナー(管理者)を自分にできます。管理者はコインの新規・追加発行を自由に行うことができます。(つまり、管理者以外は新規・追加発行を行えません。)
その後、Deployを選択します。するとMetaMaskが開いてトランザクションの内容を確認するよう求められますので確認を選択します(図26、27)。これによりスマートコントラクトをデプロイするためのトランザクションが作成され、MetaMaskで管理している秘密鍵で署名の上、手数料とともにMinatoに送信されます。トランザクションが処理されるとスマートコントラクトがデプロイされます。



スマートコントラクトをデプロイすると「Deployed/Unpinned Contracts」の欄に、デプロイしたスマートコントラクトの情報が表示されます(図28)。

「Deployed/Unpinned Contracts」を開くと、デプロイしたスマートコントラクトが持つ関数の一覧が表示されます(図29)。ここから各関数を呼び出すことができ、関数を呼び出すことでコインの作成や移転が可能になります。

3.3 オリジナルコインを発行する
コインの発行にはmintという関数を使用します。mintは引数を2つ取ります。
- to:コインの発行先を指定します。今回は3.2.2節でコピーした自分のアドレス(0x69eB954D8326D2a395643a535d1EA41145E8a07d)を入力します。
- amount:コインの発行数量を指定します。今回デプロイしたスマートコントラクト内ではデフォルト値として小数点以下の桁数が18に設定されているので、例えば1 MTK発行したい場合は1,000,000,000,000,000,000というようにゼロが18個必要なことに注意してください。今回は100 MTK発行するので100,000,000,000,000,000,000と入力します。(コンマは不要)
2つの引数を入力したのち、青枠の「transact」を選択します(図30)。これによりコインを発行するためのトランザクションが作成され、デプロイ時と同様MetaMaskでトランザクションに署名したのち、手数料とともにMinatoに送信されます(図31、32)。トランザクションが処理されるとコインの発行が完了します。



3.4 オリジナルコインの発行を確認する
MetaMaskでコインを発行したトランザクションを選択すると、その詳細情報を見ることができます(図33、34)。また、詳細画面からブロックチェーンエクスプローラーに移動し、さらに詳細な情報を確認することができます(図35)。今回送信したトランザクションの詳細は以下のリンクから見ることができます。
Soneium Minato Transaction | Blockscout


ブロックチェーンエクスプローラーで次のようなことがわかります。(図35の赤枠を参照)
- mint関数を実行したトランザクションである
- このトランザクションは3,530,229番目のブロックに格納された
- MyTokenというコインを扱った
- 0x69eB954D8326D2a395643a535d1EA41145E8a07d(自分のアドレス)に100 MTK発行した
さらに図35の青枠の「From」は自分のアドレス(トランザクションに署名をした人)が表示されています。これを選択することで自分のアドレスに関係する情報を確認できます。

図36が0x69eB954D8326D2a395643a535d1EA41145E8a07dの詳細情報です。赤枠のTokensのところから先ほど発行したMy Tokenという名前のコインを100 MTK保有していることがわかります。
また、下部には自分が署名を行い送信したトランザクションの一覧が表示されています。ここでは「Contract creation」のトランザクションでコインのスマートコントラクトをデプロイしています。また、「Token transfer」のトランザクションでmint関数を呼び出し、自分のアドレスにMy Tokenというコインを新規に発行しています。

3.5 MetaMaskへオリジナルコインの情報を追加する
ブロックチェーンエクスプローラーはさまざまな情報がみられるので便利ですが、コインを持っていても、あまり「所有しているという実感」が得られません。そこで、先ほど発行したコインをMetaMaskで扱えるようにします。
まず、先ほど確認した「Transaction details」の画面に戻ります。そして赤枠の部分を選択し、スマートコントラクトのアドレスをコピーします(図37)。スマートコントラクトをデプロイするとアドレスが割り振られ、そのアドレスを使ってスマートコントラクトを一意に識別することができます。

次にMetaMaskを開きます。「トークン」タブから先ほどコピーしたスマートコントラクトのアドレスを使ってコインの情報を登録することで、MetaMaskから今回作成したコインを扱えるようになります(図38、39、40、41)。




追加されたトークンを選択すると詳細情報を確認でき(図42)、「送金」を選択すると他のアドレスに移転することもできます(図43)。


4 まとめ
SoneiumはLayer2という少し特殊な環境なのでBridgeという仕組みを経由しなければならず、慣れていないと少し戸惑うかもしれません。しかし、BridgeでETHをSoneium上で扱えるようにしてしまえば、その後は既存のツールを使うことでコインの発行はほぼノーコードで行えます。皆さんもぜひ試してみてください。(ブロックチェーン上のデータは誰でも見ることができるので、個人情報をはじめ他人に見られたくない情報は載せないように気をつけてください。)
(本ブログの内容は2024年10月時点のものです)
お問い合わせ先
大和総研では、長年にわたるブロックチェーン・Web3関連の取り組みの実績を活かしお客様のブロックチェーン・Web3ビジネスの検討やシステムの構築をサポートします。ご要望・ご不明点等がありましたら、ITソリューションサービスサイトよりお問い合わせください。