見出し画像

DN404(ERC404)のローカル環境構築

概要

DN404(ERC404)は、ERC20(トークン)とERC721(NFT)の性質を保持しており、Uniswap取引可能且つ、NFTとしてOpenSea等のマーケットプレイスでも取引可能な企画。
従来はERC404と呼ばれていたが、ガス代を改善してよりEIPに近い形に直したものがDN404(Divisible NFT)として再構築されている(参照URL)。
DN404もERC404もEIPとして提案されていないが、すでにこの企画のトークンはPandoraを初め多数の404トークンで使用されている(PandoraはERC404)。
Pandoraはローンチ後1週間で12000%上昇

DN404(ERC404)トークンリスト

プロポーザルが通る前に普及するという異次元の期待を見せるDN404はNFTの流動性が少ないという問題を解決するブレイクスルーであると考える。

どのように動作するかは下記の画像が見やすい。

https://iq.wiki/wiki/erc-404
https://twitter.com/xenpub/status/1755972256671449400

ERC404と記載があるがそういう認識はあまりなく基本的にERC20もしくはERC721として取り扱われ、どちらかに変更が加わった際もう片方も影響を受ける、と言う仕様。

  1. ERC20を指定量以上持っていればERC721が配布される

    • 例)指定量が10のところを23持っていれば、2つNFT721を保有していることになる

  2. ERC20が指定量以下であれば所持しているNFTはバーン

    • 例)ERC20を20持っていて(NFTは2つの状態)、11誰かに送金した場合、送金先の人がERC20を11、NFTを1つ保有することになり、残りはバーンされる

  3. ERC721はマケプレで取引可能。NFTが移動したときはERC20も定量移動する

ここではDN404のテスト環境をローカルで構築し、コントラクトの動作確認まで行う為の手順を記載する。

手順

(1) Foundryのインストール

DN404のgithubサイトにアクセス。
FoundryというSolidityの開発環境を構築しろと言われるので、下記のコマンドでFoundryをインストール。

curl -L https://foundry.paradigm.xyz | bash

(2) DN404レポジトリのPULL

DN404のレポジトリをpullしてくるのだが、git cloneはせず、下記のコマンドで持ってくる。

forge install vectorized/dn404

そのまま実行すると「.git」がないと怒られる可能性がある。
その場合は「git init」を実行してから上記コマンドを打つ。
libフォルダー下にdn404というフォルダができているはず。

(3) DN404のビルドとテスト

dn404フォルダに移動して下記のコマンドを実行。

forge build

次にテストを実行する。

forge test
実行結果1


実行結果2

(4) ローカルEVM(Anvil)起動

次のコマンドでローカルEVMを走らせる。
このEVMに404コントラクトをデプロイする。

anvil
実行結果

デプロイする際、いずれかのアカウントからデプロイする必要があるのでコントラクトのオーナーとなる秘密鍵を上記のリストから選んでおく。
今回は
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
を使用する。

(5) DN404コントラクトのデプロイ

デプロイスクリプトを実行する前に環境変数を準備しておく必要があるので下記の2つのコマンドを実行。

export PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

export FOUNDRY=http://localhost:8545

デプロイスクリプトは
script/DeploySimpleDN404.s.sol

forge script script/DeploySimpleDN404.s.sol:SimpleDN404Script \
 --fork-url $FOUNDRY \
 --private-key \
 $PRIVATE_KEY --broadcast
実行結果1

:
:

実行結果2

上記、実行結果でコントラクトアドレスがわかる。
0x5FbDB2315678afecb367f032d93F642f64180aa3

(6) コントラクトの呼び出し

デプロイされたコントラクトのファンクションを実行する。
ReadOnlyのコマンドは「cast call」を使用する。
コントラクトの名前を呼び出してみる。

cast call 0x5fbdb2315678afecb367f032d93f642f64180aa3 \
"name()(string)" \
--private-key $PRIVATE_KEY \
--rpc-url $FOUNDRY

実行すると

"DN404"

と結果が返ってくる。
コントラクトが問題なくデプロイされている事を確認。

次回はファンクションの実行やテストコードを書いて、どう言う風に動いているか検証していく。

結論

ローカル環境構築はそこまで難しくない。
ただ、当初git cloneをしてから環境構築をしようとしてハマった。
git cloneは行う必要はない。
git init
forge install vectorized/dn404
を行うだけ。
FoundryはUIは提供していないので扱いづらい…

この記事が気に入ったらサポートをしてみませんか?