What-is-SendAI-Solana-AI-Agent-Hands-on-for-EVM-Engineers

507 Views

March 27, 25

スライド概要

「EVMエンジニアのSolanaエコシステムへの参入成功」に向けて、Solana Agent Kitを活用したSolana開発の基礎から応用までをご紹介します。

profile-image

The top contributor to Japan's web3 development & ex-CTO at web3 startups.

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

What is SendAI? Solana AI Agent Hands-on for EVM Engineers 「EVMエンジニアのSolanaエコシステムへの参入成功」に向けて、Solana Agent Kitを活用したSolana開発の基礎から応用までをご紹介します。 投稿者:Kyohei Ito X(Twitter) Linkedin

2.

Kyohei Ito / ARM3rd Inc. CEO & CTO CTOや事業責任者を歴任。web3の主要領域は一通り経験(L1, L2, NFTMarketplace, NFTFi, WaaS, Stable Coin, Token Launch, Contract Audit, Dev Tool, Developer Marketing etc.) 読売テレビと共同で「TOMIE by JunjiIto」NFTセールを実施 (130ETH達成、他10以上のNFTプロジェクト開発・マーケティング 経験) BunzzにてBunzz for Enterpriseを統括、Bunzz AI Auditの立ち上げ、 Seed Round $4.5Mの資金調達にコミット SunriseLayerにてHead of Solution ArchitectとしてApp Chainユース ケース創出を牽引 Solana実績: Trend Hack - AI Agent にてSendAI賞一位獲得, SendAI Japan設立, Superteam Japan Contributor etc.

3.

EVM開発者のSolana入門に向けたタスクリスト EVMとSolanaの技術的な違いを理解する Solanaの主要エコシステムを把握する アカウントモデルやトランザクション構造、並列処理、手 Solanaは全体最適的な考え方を取るため、既存プロジェ 数料体系、スマートコントラクト開発の考え方の違いなど クトとのシナジーが重視されます。 を把握しましょう。 DEX(Jupiter, Raydium, Orca) 、Wallet(Phantom, Backpack Wallet, Solflare) 、NFT(Magic Eden, Tensor) 、ミームコイン(​Pump[.]fun)​などの主要プロジ ェクトを理解しましょう。 ハッカソンに参加して、勝つ 優れた機能を優れたUXで提供する Solanaではハッカソンが実際のビジネスと直結していま Solanaはビジネス的に最も成功したL1として強固なユーザ す。ハッカソンに勝つことがSolanaにおける成功への最短 ー基盤があり、プロダクト間の競争原理が健全に機能して ルートであり、その過程自体が良いプロダクト作りと直結 います。UXが優れていないプロダクトはユーザーに選ば します。 れません。

4.

それら全てに最適なSolana Agent Kit 「UXの簡略化」 (主要SNSとの統合・AI活用)と「Solanaの主要プロトコルの操作」がワンツールで完結 TypeScript, Next.js, Firebase, Vercel, Solana Agent Kitのような敷居の低い技術スタックで自由度の高いSolana開発が実現 「DeFAI」や「AI Agent x Web3」はSolanaハッカソンで勝ちやすいテーマ AIエージェント連携はSolanaでもホットテーマ(トレンドなだけでなく、レバレッジが効く事業ドメイン) 「UXの簡略化」と「Solanaの主要プロトコルの操作」がセットで可能 UXの簡略化(SNSやAIのUI統合) 、主要プロトコル操作、トークン操作など Solanaの主要エコシステムをキャッチアップできる Agent Kitの機能を通じてSolanaエコシステム理解につながる Rust不要だからEVMエンジニアにやさしい TypeScriptだけでSolana開発が可能。Rust不要

5.

前提知識: 人間の限界を越えて 複雑化するDeFi市場 市場の複雑性 数千のプロトコルと無数の投資戦略が存在 ポートフォリオ管理の限界 90%以上の個人投資家が適切な管理ができていない現状 DeFi×AIの融合 複雑性の閾値を超えたDeFi市場で必然的な流れに

6.

DeFi×AI(DeFAI)の課題 現状のDeFi x AIは「AIの恩恵が公平に分配されていない未成熟市場」 AIの大衆化 ChatGPT以後、AIは大衆化。 Web3の世界でもAI活用が一般化 DeFiへのAI活用状況 しかしDeFi×AIツールにおいては、AIが既存の知識格差を拡大する傾 向 AIによる格差拡大 高度な専門性が求められるため、優秀なトレーダーはAIで更なる 効率化を図る一方、投資初心者はツールを使いこなせず、むしろ 従来以上に不利な立場に

7.

Solanaの主要エコシステムの例 DEX Jupiter, Raydium, Jito, Orca NFT Marketplace Magic Eden, Tensor Memetoken Platform Pump.fun, dev.funなど10以上 Wallet Phantom, Backpack Wallet, Solflare, Magic Eden Bluechip NFT SMB Gen2, SMB Gen3, Mad Lads Token Contract Metaplex

8.

Solanaの基本概念 アカウントモデル EVM: アドレスとストレージ の分離モデル Solana: すべてがアカウント (コードも状態も) Solanaではアカウントが 「所有されている」概念があ り、プログラム(スマートコ ントラクト)もアカウントの 一種です。データアカウント はプログラムによって所有さ れます。 トランザクションと命 令 プログラム派生アドレ ス(PDA) Solanaのトークン規格 トランザクションは1つ以上 決定論的に生成されるアドレ ン規格 の命令(Instruction)のコン スで、特定のプログラムに関 テナです。命令は特定のプロ 連付けられています。プログ グラムを呼び出し、アカウン ラムが「署名」できるアドレ トリストとデータを含みま スであり、ハッシュマップの す。すべての命令は原子的に ような使い方ができます。ク 実行され、並列実行が基本設 ロスプログラム呼び出し 計となっています。 (CPI)と組み合わせて強力 な機能を実現できます。 SPL Token: 基本的なトーク Token2022: SPLの拡張版、 より多機能 トークンには「ミントアカウ ント」と「トークンアカウン ト」があり、関連トークンア カウント(ATA)の概念も重 要です。

9.

EVMとSolanaの開発パラダイムの違い ステートレスプログラムの 考え方 並列処理とコンポーザビリ ティ 手数料システムの違い EVMではコントラクトがステート Solanaは並列処理が基本設計であ 手数料ですが、Solanaでは固定的 を持ちますが、Solanaではプログ り、読み取り/書き込みセットに基 な基本手数料と優先手数料を採用 ラムはステートレスで、データは別 づいた実行を行います。同時実行可 しています。バリデータへの報酬と アカウントに保存します。コードと 能なトランザクションにより、ボト 一部バーン(焼却)の仕組みがあ データの分離が基本であり、アカウ ルネックを避けるプログラム設計が り、計算予算(Compute Budget) ントの所有権モデルによってデータ 重要です。EVMよりも高いスケー の概念やトランザクションサイズの へのアクセスを制御します。 ラビリティを実現しています。 制限も理解する必要があります。 EVMではgas価格と使用量に基づく

10.

Solana Agent Kitの主要な機能と使い方 トークン操作: SPLトークンの作成と管理 NFT管理: コレクションとミント SolanaAgentKitを初期化し、deployToken関数を使ってトー deployCollection関数でNFTコレクションを作成し、 クンを作成できます。名前、メタデータURI、シンボル、小 mintCollectionNFT関数でコレクションにNFTをミントでき 数点以下桁数、権限設定、初期供給量などを指定します。 ます。ロイヤリティ設定やクリエイター情報も指定可能で す。 DeFi操作: スワップとプール作成 クロスチェーン連携: Wormholeを使った統合 trade関数を使ってトークンのスワップが可能です。例えば getWormholeSupportedChains関数でサポートされている SOLからUSDCへのスワップでは、トークンアドレス、金 チェーンを確認し、tokenTransfer関数でSolanaから他のチ 額、スリッページを指定します。 ェーンへトークンを転送できます。 ミームコイン: Pump.funとの連携 SNS(Solana Name Service) Pump.funと統合されており、ミームトークンの発行や関連 Solana版ENSであるSolana Name Service (SNS)の操作もサ 機能を利用することができます。 ポートしています。 SNS連携 Twitter、Telegram、Discordとの直接統合も提供しています。Solanaとの対話を可能にするエージェントを構築できます。

11.

実践チュートリアル AIエージェントとの連携方法 SolanaAgentKitを初期化し、createSolanaTools関数でLangChainツールを作成します。OpenAI LLMを初期化し、 createReactAgent関数でReactエージェントを作成して、自然言語による操作を実行できます。 シンプルなdAppからの移行例 従来のEVMベースのトークンスワップコードをSolana Agent Kitを使った実装に置き換えることができます。 SolanaAgentKitを初期化し、trade関数を使ってトークンをスワップします。 複雑なDeFi操作の実装方法 lendAssets関数でUSDCをレンディングプールに預け、stake関数でSOLをステーキングし、openPerpTradeLong関数 でパーペチュアルトレード(レバレッジ取引)を行うなど、複雑なDeFi操作も簡単に実装できます。 コードサンプルはスライド末尾にて紹介

12.

さらに学びたい方へ: SendAI Japanの活動紹介 技術記事の公開 コミュニティ活動 ZennやQiitaで解説記事を量産します。初心者向けのチュ 月1回のオンライン勉強会を開催し、実装事例の共有や質 ートリアルから応用例まで幅広く提供。 問会を行います オープンソース貢献 開発合宿 @仙台 GitHubでサンプルコードやライブラリの改善PRを公開し 第一弾として、仙台で開発合宿を開催予定。 ています。コミュニティメンバーと共同で開発を進めてい 実際にコードを書きながらSolana Agent Kitを使用した実 ます。 践的なプロダクト開発を学びます。

13.
[beta]
Code Example: Setup
// setup.ts
import { SolanaAgentKit } from 'solana-agent-kit';
import dotenv from 'dotenv';
dotenv.config();
// 環境変数から秘密鍵とRPC URLを取得
const privateKey = process.env.SOLANA_PRIVATE_KEY!;
const rpcUrl = process.env.RPC_URL || 'https://api.mainnet-beta.solana.com';
// Solana Agent Kitのインスタンスを作成
const agent = new SolanaAgentKit(privateKey, rpcUrl);
export default agent;

14.
[beta]
Code Exmple: SPL Token作成
// 新しいSPLトークンの作成
const createToken = async () => {
const result = await agent.deployToken(
"My First Token", // 名前
"https://example.com/metadata.json", // メタデータURI
"MFT",
// シンボル
9,
// 小数点以下の桁数
{},
// 追加オプション
1000000
// 初期供給量(10^6 トークン)
);
console.log("トークンミントアドレス:", result.mint.toString());
return result.mint;
};
// トークンの送金
const transferToken = async (tokenMint, recipient, amount) => {
const signature = await agent.transferToken(
new PublicKey(recipient),
amount,
new PublicKey(tokenMint)
);
console.log("送金トランザクション:", signature);
return signature;
};

15.
[beta]
Code Exmple: Jupiter
// トークンスワップ
const swapTokens = async (inputToken, outputToken, amount) => {
const signature = await agent.trade(
new PublicKey(outputToken), // 出力トークン
amount,
// スワップ量
new PublicKey(inputToken), // 入力トークン
300
// 3%のスリッページ
);
console.log("スワップトランザクション:", signature);
return signature;
};
// Raydiumでのリクイディティプール作成
const createPool = async (tokenAMint, tokenBMint) => {
const pool = await agent.createRaydiumPool(
new PublicKey(tokenAMint),
new PublicKey(tokenBMint),
100, // 初期リクイディティトークンA
100 // 初期リクイディティトークンB
);
console.log("プールアドレス:", pool);
return pool;
};

16.
[beta]
Code Example: Wormhole
// サポートされているチェーンの取得
const getSupportedChains = async () => {
const chains = await agent.getWormholeSupportedChains();
console.log("サポートされているチェーン:", chains);
return chains;
};
// Wormholeを使ったトークン移動
const transferTokenCrossChain = async () => {
const transfer = await agent.tokenTransfer({
destinationChain: "Base Sepolia", // 送金先チェーン
tokenAddress: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", // トークンアドレス
network: "Testnet", // ネットワークタイプ
});
console.log("クロスチェーン転送結果:", transfer);
return transfer;
};

17.
[beta]
Code Example: Pump.fun
// Pump.funでトークンを立ち上げる例
const launchToken = async () => {
// Pump.funトークンオプションの設定
const tokenOptions = {
twitter: "yourTwitterHandle",
// オプション: Twitterハンドル
telegram: "yourTelegramGroup",
// オプション: Telegramグループ
website: "https://yourwebsite.com", // オプション: ウェブサイトURL
initialLiquiditySOL: 1.5,
// オプション: 初期流動性(SOL)
slippageBps: 100,
// オプション: スリッページ(ベーシスポイント)
priorityFee: 100000
// オプション: 優先手数料(ラムポート)
};
const result = await agent.deployPumpFunToken(
"MyToken",
// トークン名
"MTK",
// トークンシンボル
9,
// 小数点以下の桁数
1000000,
// 総供給量
tokenOptions
// 追加オプション
);
console.log("Pump.funでのトークン立ち上げ成功:");
console.log("- トランザクション署名:", result.signature);
console.log("- トークンミントアドレス:", result.mint);
return result;
};

18.
[beta]
Code Example: SNS(Solana Name Service)
// SNSドメインの所有権を転送する例
const transferDomain = async (domain, newOwner) => {
try {
const result = await agent.transferSNSOwnership(
`${domain}.sol`,
new PublicKey(newOwner)
);
console.log("SNSドメイン所有権転送成功:");
console.log("- ドメイン名:", `${domain}.sol`);
console.log("- 新しい所有者:", newOwner);
console.log("- トランザクション署名:", result);
return result;
} catch (error) {
console.error("SNSドメイン所有権転送エラー:", error);
throw error;
}
};