logo

WormholeのNTT

SIerとはいえトップはホワイト
profile photo
TaniguchiAkira

目的

Wormholeを使って、Ethereum↔Solana間のトークンブリッジができるようにする

手段

  1. Wormholeが用意したNTTというフレームワークを使い、下準備をする。
  1. @wormhole-foundation/wormhole-connectを使い、Dappsを構築する
今回は1の手順を解説する、2はまた後日

用語解説

Wormhole

異なるブロックチェーン間でトークンやデータを転送するためのクロスチェーンプロトコル。ガーディアンネットワークを使用して安全性と信頼性を確保し、ユーザーにシームレスで安全なクロスチェーン体験を提供する。特にDapps開発者にとって有用。
(by Notion AI)

NTT

Native Token Transfersの略。SIerカーストトップの会社のことではない。ブロックチェーン間でトークンを転送するための、オープンソースなフレームワーク。インテグレーターは、NTTを使用するトークンが各チェーン上でどのように動作するかを完全に制御できる。

deployment.json

デプロイしたコントラクトのアドレスやモード情報などのbridgeに必要なデータが記載される。
nttコマンドを実行した後更新されるので、逐一サーバ側に変更点の更新をすることになる。
https://docs.wormhole.com/wormhole/native-token-transfers/overview/system-components
https://docs.wormhole.com/wormhole/native-token-transfers/overview/system-components

手順

コマンドインストール

まだベータ版なのでやり方は変わる可能性があるが、NTTを扱うためのコマンドが用意されている。
内部FoundryBunRustSolanaコマンドAnchorが利用されているため、事前にそちらのインストールも必要。
shell
curl -fsSL https://raw.githubusercontent.com/wormhole-foundation/example-native-token-transfers/cli/cli/install.sh | bash ntt --version // ここで「1.0.0-beta」などが表示されれば成功

モード選択

まずは状況によってモードを選択する必要がある
詳細はリンク先を参照してほしいが、「Hub and Spoke」と「Burn」の2種類があり、弊社のように、すでにEthreum側にトークンがデプロイされていて、コードが更新不可能な場合は「Hub and Spoke」を選択することになる。
逆に「Burn」の場合はburn、mint関数を実装し、関数の実行権限をNTT側に渡す必要がある。
以下作業は「Hub and Spoke」で進めている場合のもの。

NTTコントラクトデプロイ

まずは下準備として、任意のフォルダで下記コマンドを実行する
shell
// 作業ディレクトリの作成、このタイミングで必要なファイルが揃う ntt new my-ntt-deployment // ディレクトリ移動して作業ディレクトリに移動 cd my-ntt-deployment // ネットワーク設定、testネットの場合はこう ntt init Testnet // 環境変数設定、この秘密鍵を使って、NTT関連の作業をすることになる export ETH_PRIVATE_KEY=<your-evm-private-key> // コントラクトのverifyのためのkey設定 export SEPOLIA_SCAN_API_KEY=<your-etherscan-sepolia-api-key>
次にNTT関連のコントラクトのデプロイを行う。今回はSepoliaのみ実行
—latestオプションはコントラクトのバージョンに関係する。2024年7月現在、—latestとすると、0.8.19でコンパイルされてデプロイされる。ちょっと古いな。
—modeは「Hub and Spoke」なので、lockingを指定
—tokenはトークンアドレス
shell
ntt add-chain Sepolia --latest --mode locking --token 0x08A92A99D993F06161B24C2C192E540DC545464b

設定反映

GitHubと同じような感覚で、deployment.jsonの変更をサーバに反映させる必要がある。
今回で言うと、「ntt add-chain」コマンドを実行した結果、deployment.jsonにNTT関連のコントラクトのアドレスや設定情報が反映されたため、それをpushする必要がある。
shell
// ローカルとサーバに設定差異が存在するか確認 ntt status // サーバの設定をローカルに反映 ntt pull // ローカルの設定をサーバに反映 ntt push

権限設定

「Burn」モードの場合、トークンコントラクトの権限設定を行う必要があるが、今回は省略。必要な人はここに詳しく載ってあるので、参考にしてください。
注意:引き続き同じディレクトリで作業するものとする

SPL Token作成

すでにSPL Tokenが存在する場合はこの作業は不要。
Tokenを作成し、bridgeの下準備とする

権限設定

NTTのプログラムIDにSPL Tokenのmint権限を設定する。これはSolanaのモードを「burn」にする際に必要な作業。
shell
// 今回の作業専用の秘密鍵を作成する solana-keygen grind --starts-with ntt:1 --ignore-case // PDA作成、この時上のコマンドで作成したjsonファイルのファイル名から「.json」を削除した文字列を指定する必要がある ntt solana token-authority <your-ntt-program-keypair> // 権限設定、上記コマンド実行後、DERIVED_PDAのアドレスが発行されるので、それを指定する spl-token authorize <TOKEN_ADDRESS> mint <DERIVED_PDA>

コントラクトデプロイ

shell
<your-SPL-token>SPL Tokenのアドレス <your-keypair.json>:ガス代を支払うことになるキーのjsonのフルパス <your-ntt-program-keypair.json>:さっき作ったnttから始まるjsonのフルパス ntt add-chain Solana --latest --mode burning --token <your-SPL-token> --payer <your-keypair.json> --program-key <your-ntt-program-keypair.json>

設定反映

deployment.jsonにはSolanaのコントラクト情報などが反映されている。
Ethereumの時と同じように、ntt statusやntt pushを駆使して、設定をサーバに反映させる。

最後に

今回はここまで、続きはまた後日。
Wormholeを使ったトークンのbridgeができるまで後少し。

参考リンク

Overview | Wormhole
Wormhole’s Native Token Transfers (NTT) is an open source, flexible, and composable framework for transferring tokens across blockchains. Integrators have full control over how their tokens that use NTT behave on each chain, including the token standard, metadata, ownership, upgradeability, and custom features.
Overview | Wormhole
npm: @wormhole-foundation/wormhole-connect
[![Documentation](https://img.shields.io/badge/Documentation-2a67c9)](https://docs.wormhole.com/wormhole/wormhole-connect/overview) [![npm version](https://img.shields.io/npm/v/@wormhole-foundation/wormhole-connect.svg)](https://www.npmjs.com/package/@wor. Latest version: 0.3.17, last published: 10 hours ago. Start using @wormhole-foundation/wormhole-connect in your project by running `npm i @wormhole-foundation/wormhole-connect`. There are no other projects in the npm registry using @wormhole-foundation/wormhole-connect.
npm: @wormhole-foundation/wormhole-connect
Foundry Book
A book on all things Foundry
Foundry Book
Bun — A fast all-in-one JavaScript runtime
Bundle, install, and run JavaScript & TypeScript — all in Bun. Bun is a new JavaScript runtime with a native bundler, transpiler, task runner, and npm client built-in.
Bun — A fast all-in-one JavaScript runtime
Deployment Models | Wormhole
This model is ideal for existing token deployments that do not want to alter existing token contracts, maintaining the canonical balance on a hub chain whilst allowing for secure native deployment to new blockchains.
Deployment Models | Wormhole
Related posts
post image
Arbitrum
Rust
contract
WASM
Arbitrum Stylusのすゝめ
〜SolidityHouseの名前はどうなるの?〜
post image
〜まさかりに身を委ねてみる〜
post image
〜次はどこに怒られるんだろう〜
Powered by Notaku