メインコンテンツへ移動
AIチュートリアル

Arbitrage Contract DeployerでターミナルからSolidityコントラクトをデプロイ・管理する

Arbitrage Contract Deployerのインストールと設定、Solidityファイルのコンパイル、Ethereum Mainnetへのコントラクトのデプロイ、読み取り・書き込み関数の呼び出し、ガスコストの確認、保存済みデプロイの管理、メンプールストリームの実行方法を解説します。

Arbitrage Contract DeployerでターミナルからSolidityコントラクトをデプロイ・管理する

学べること

Arbitrage Contract Deployerは、ターミナルから直接Solidityコントラクトのコンパイル、デプロイ、操作を行うためのNode.jsコマンドラインツールキットです。このチュートリアルでは、インストール方法、ウォレットをEthereum Mainnetに接続する方法、コントラクトのデプロイ方法、対話型メニューの使い方、対応するメンプールのアクティビティを監視する方法を説明します。

重要: このプロジェクトはEthereum Mainnetでのみ動作します。トランザクションには実際のETHを使用するため、実際のお金がかかる場合があります。承認する前に、すべてのコントラクト、アドレス、トランザクションを確認してください。

主な機能

  • RemixやHardhatを使わず、solcで必要に応じてSolidityコントラクトをコンパイルします。
  • ローカルファイル、node_modules、GitHub、npm互換CDNからインポートを解決します。
  • RPC接続を通じてEthereum Mainnetにコントラクトをデプロイします。
  • デプロイしたアドレス、ABI、日付をdeployments.jsonに保存します。
  • 矢印キーでコントラクトのデプロイや関数呼び出しを行えるインターフェースを提供します。
  • コントラクト関数を読み取り専用、書き込み、payable操作に分類します。
  • ガス見積もり、手数料、概算のETHおよびUSDコストを事前に表示します。
  • Chainlinkオラクルを使用して、手数料見積もり用のETH/USDレートを取得します。
  • 別個のメンプールストリームプロセスを、整形されたトランザクション出力付きで実行できます。

前提条件

プロジェクトで組み込みのfetch機能が必要になるため、Node.js 18以降が必要です。READMEにはnpm 9以降も記載されています。Ethereum MainnetのRPCエンドポイント、ウォレットの秘密鍵、承認するデプロイや書き込みトランザクションの手数料を支払うのに十分なETHが必要です。

プロジェクトをインストールする

1. リポジトリをクローンする

プロジェクトをクローンし、そのディレクトリに移動します。リポジトリのパスは、使用するリポジトリの場所に置き換えてください。

git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>

リポジトリをZIPアーカイブとしてダウンロードし、ローカルフォルダーに展開することもできます。

2. 依存関係をインストールする

package.jsonで宣言されているパッケージをインストールします。

npm install

これにより、主な2つの依存関係がインストールされます。

  • プロバイダー、ウォレット、ABI処理、トランザクションに使用するethers。
  • Node.jsからSolidityをコンパイルするためのsolc。

インストール後、プロジェクトにはnode_modulesディレクトリが存在するはずです。存在しない場合は、npm installの出力を確認し、続行する前にインストールエラーを解決してください。

ウォレットとRPC接続を設定する

プロジェクトのルートに.envという名前のファイルを作成します。秘密鍵とEthereum MainnetのRPC URLを追加してください。

PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com

READMEには次のRPCエンドポイントの例が記載されています。

  • https://ethereum-rpc.publicnode.com
  • https://eth.llamarpc.com
  • https://cloudflare-eth.com
  • https://mainnet.infura.io/v3/<KEY>
  • https://eth-mainnet.g.alchemy.com/v2/<KEY>

.envは非公開にし、.gitignoreに含まれていることを確認してください。このファイルには、公開リポジトリに決してコミットしてはならない認証情報が含まれています。

対話型デプロイヤーを起動する

次のコマンドでメインインターフェースを起動します。

node start

プロジェクトにnpm startスクリプトが定義されている場合は、代わりに次のコマンドも実行できます。

npm start

アプリケーションはネットワーク、ウォレット、残高を確認し、対話型メニューを開きます。通常、メニューには次のような項目が含まれます。

=== Ethereum Contract Deployer ===

i Network: mainnet (chainId 1)
i Wallet:  0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!

Main menu
> Deploy Arbitrage.sol
  Open deployed Arbitrage (0x2d7A..., 2025-01-15)
  Exit

矢印キーで項目を選択し、Enterキーで選択を確定します。プログラムがトランザクションの承認を求めた場合は、表示されたOKまたはCancelのコントロールを使用してください。終了するにはCtrl+Cを押します。

Solidityコントラクトをコンパイルしてデプロイする

1. Solidityファイルを追加または選択する

Solidityファイルをプロジェクトディレクトリに配置するか、デプロイメニューから既存の.solファイルを選択します。コンパイラーはファイル名に基づいてコントラクトをビルドし、対応するインポートを自動的に解決します。

2. コンパイルとデプロイの詳細を確認する

メインメニューからDeploy <file>.solを選択します。アプリケーションはコントラクトをコンパイルし、デプロイトランザクションを準備して、承認を求める前に必要なガスをプレビューします。

3. トランザクションを承認する

ガス見積もり、現在の手数料、最大手数料、ウォレット残高、コントラクトの詳細を確認します。値と対象ネットワークが正しい場合にのみ承認してください。トランザクションがマイニングされると、ツールはデプロイ先アドレスとEtherscanリンクを表示します。

デプロイ情報はローカルのdeployments.jsonに保存されます。これにより、後からアドレスやABIを再入力せずに、デプロイ済みコントラクトを開くことができます。

ガスプレビューを理解する

デプロイおよび対応する書き込み操作の前に、ツールはガスのプレビューを表示します。その計算はREADMEに記載された手順に従います。

  1. estimateGasで必要なガス量を見積もります。
  2. ガスリミットは、見積もり値に10パーセントのバッファを加えて計算します。
  3. ガスあたりの最大手数料は、ベース手数料の2倍に優先手数料を加えて計算します。
  4. インターフェースには、現在のブロックで予想される手数料と、発生し得る最大手数料の両方が表示されます。
  5. ChainlinkのETH/USDレートを使用して、手数料をドル換算で見積もります。

プレビューには、推定ガスユニット数、ガスリミット、ベースフィー、優先手数料、ガス単位あたりの最大手数料、予想ETHコスト、最大ETHコスト、ウォレット残高などの値が表示されます。最大手数料は上限の見積もりとして扱い、残高でトランザクションをカバーできることを確認してください。

保存済みのデプロイを開いて関数を呼び出す

Open deployed <name>を選択すると、以前にdeployments.jsonへ保存したコントラクトを操作できます。インターフェースでは、関数の動作に応じて次のラベルが表示されます。

  • [read]は、トランザクションを送信しないviewおよびpure関数を示します。
  • [write]は、トランザクションが必要な状態変更関数を示します。
  • [payable]は、ETHを受け取れる関数を示します。
  • [info] Contract balanceは、コントラクトの残高を表示します。
  • <- Back to main menuは、メインメニューに戻ります。

読み取り専用の呼び出しで、コントラクトの状態を確認できます。書き込みおよびpayableの呼び出しでは、ガスプレビューが表示され、トランザクション送信前に確認が必要です。インターフェースにはOKアクションも用意されているため、操作を送信せずにキャンセルできます。

メンプールストリームを実行する

メンプールストリームは別プロセスとして実行されます。次のコマンドで手動起動してください。

node mempool.js

ストリームは検出したアクティビティを、購入者、ルーター、ETH金額、トークン、メソッド、トランザクションID、結果ステータスなどの詳細とともに整形して表示します。READMEには、ストリームがサポートするワークフロー向けの取引および利益の表示例もあります。

トークンのソースはerc20.jsonで、Sequence Token DirectoryのUniswap Token List Schema形式に従います。ローダーは、トークン配列そのもの、またはtokens配列を含むオブジェクトのいずれにも対応しています。無効なアドレスとゼロアドレスを除外し、chainIdが1のトークンだけを残して、各トークンのアドレス、シンボル、名前を取り出します。

erc20.jsonが存在しない場合、ストリームはランダムなアドレスにフォールバックし、警告を表示します。ストリームを停止するにはCtrl+Cを使用するか、対話型インターフェースに表示された停止オプションを選択してください。

Solidityのインポートを使用する

組み込みコンパイラーは、次の形式のインポートに対応しています。

  • GitHub URL。例:import "https://github.com/Uniswap/v3-core/...";
  • npm形式のCDNインポート。例:import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  • ローカルnode_modulesで利用可能なパッケージ。
  • 相対パスによるローカルインポート。例:import "./MyLib.sol";

github.com/owner/repo/blob/branch/path形式のGitHubリンクは、自動的にraw.githubusercontent.com相当のURLへ変換されます。

プロジェクト構成

主なファイルとディレクトリの役割は次のとおりです。

  • start.jsは、node startのエントリーポイントです。
  • deploy.jsには、デプロイロジックと対話型メニューが含まれます。
  • mempool.jsは、別プロセスのメンプールストリームを実行します。
  • erc20.jsonには、ストリームが使用するトークンリストが含まれます。
  • deployments.jsonには保存済みのデプロイデータが格納され、自動的に作成されます。
  • lib/ui.jsは、色、メニュー、ボックス、ロギングを管理します。
  • lib/env.jsは、環境変数、デプロイデータ、エクスプローラーリンクを処理します。
  • lib/compile.jsは、コンパイルとインポート解決を処理します。
  • lib/chain.jsは、ガス、レシート、ETH価格を処理します。
  • lib/contract.jsは、デプロイ、関数呼び出し、ストリーム起動を処理します。

高度なヒントと運用チェック

  • RPCエンドポイントがEthereum Mainnet用であることを確認してください。アプリケーションはチェーンID 1を想定し、他のネットワークを拒否します。
  • デプロイまたは書き込み操作を確認する前に、ウォレット残高を確認してください。
  • deployments.jsonはローカルのデプロイデータとして使用し、機密情報や意図しないテスト情報をコミットしないでください。
  • トランザクションを送信する前に、コントラクトのソースコード、インポートした依存関係、送信先アドレス、payableの値を確認してください。
  • node -e "console.log(require('solc').version())"で、インストールされているSolidityコンパイラーのバージョンを確認します。
  • ls node_modules | headで、依存関係が存在することを確認します。
  • 現在のロードマップによると、このプロジェクトはマルチシグ対応、ABIからTypeScript型へのエクスポート、Tenderlyによるトランザクションシミュレーションを提供していないことに注意してください。

セキュリティチェックリスト

  1. PRIVATE_KEYを公開またはコミットしないでください。
  2. .envを.gitignoreに含めてください。
  3. 操作に必要な資金だけを入れたウォレットを使用してください。
  4. OKを選択する前に、すべてのガスプレビューを確認してください。
  5. インターフェースにEthereum MainnetとチェーンID 1が表示されていることを確認してください。
  6. 書き込みまたはpayable関数を使用する前に、コントラクトとアドレスを慎重に確認してください。

便利なコマンド

npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | head

まとめ

Arbitrage Contract Deployerは、Solidityのコンパイル、Ethereum Mainnetへのコントラクトのデプロイ、保存済みデプロイの再オープン、コントラクト関数の呼び出し、トランザクションコストの確認を、ターミナルベースで行えるワークフローを提供します。Node.js、依存関係、安全な.envファイルを設定すると、ガスおよびETH/USDの見積もりを表示しながら、対話型メニューがデプロイとコントラクト操作を案内します。Mainnetのすべてのトランザクションでは実際の資金を使用するため、慎重に操作し、詳細を確認した後にのみ各トランザクションを承認してください。

このプロジェクトはMITライセンスの下で公開されています。コントリビューションでは認証情報をコミットに含めないようにし、deployments.jsonには適切なローカルデータのみが含まれるようにしてください。