Solana Foundationが、AIとLayer 1ブロックチェーンを統合したChatGPTプラグインをリリースしました。Solanaネットワークと直接やり取りするためのオープンソースのリファレンス実装が、Githubでダウンロード可能なプラグインとして提供されています。Solana Foundationは、このプラグインがSolanaのデータやプロトコルを理解しやすくし、またSolanaのコンピューティングインフラストラクチャやDeFiプロジェクトに関するデータを提示するための参考資料となると述べています。このプラグインは、NFTの購入、トークンの送信、トランザクションの検査、パブリックアカウントデータの解釈、フロア価格によるNFTコレクションの検索などに使用することができます。
Solanaの共同創設者であるAnatoly Yakovenko氏は、AIがSolanaブロックチェーンをより使いやすく理解しやすくすると述べています。彼は「消費者向けのアプリを開発するすべての開発者は、AIモデルを介してアプリがどのように相互作用するかを考えるべきです。これは、コンピューターに指示を出すための新しいパラダイムです」と述べています。
最近、EthereumとBitcoinの手数料の上昇により、一部のユーザーが代替案を探る中、Solanaは活発な活動を見せています。The Blockのデータによると、先週、新しいアドレスの7日移動平均は32万3千件に達し、2022年6月以来の最高数となりました。データによると、今月の新しいアドレスの追加数は過去6ヶ月の合計よりも多くなっています。
SolanaのネイティブトークンであるSOLは、FTX暗号通貨取引所の崩壊による大幅な下落を経験した後、今年は101%上昇しました。TradingViewのデータによると、SOLの価格は2.6%上昇し、20.03ドルで取引されています。
一方、Solana Foundationは、AIに焦点を当てた戦略的な助成金プログラムの提供額を100万ドルから1000万ドルに増額しました。既に50件の申請を受け付けており、新しいプロジェクトに対しても引き続き申請を受け付けています。また、Solana Foundationは「ブロックチェーンとAIの実験に専念した完全なコホートを持つ3ヶ月間の大学生向けアクセラレータプログラムも開始しました」と述べています。
solanaプラグイン
https://github.com/solana-labs/chatgpt-plugin
上記のエンドポイントは、SolanaのChatGPTプラグインが使用できるリソースです。それぞれのエンドポイントは、特定の操作や情報の取得を目的としています。以下にそれぞれのエンドポイントの機能を説明します:
- /getAccountInfo { address }: 指定したアドレスに関するアカウント情報を取得します。
- /getBalance { address }: 指定したアドレスの残高情報を取得します。
- /getAssetsByOwner { address }: 指定したアドレスの所有するアセットの情報を取得します。
- /getTransaction { signature }: 指定したトランザクション署名に関する情報を取得します。
- /getTokenAccounts { address }: 指定したアドレスに関連するトークンアカウントの情報を取得します。
- /getSignaturesForAddress { address }: 指定したアドレスに関連するトランザクション署名の情報を取得します。
NFTの検索に関するエンドポイント(開発中で変更される可能性があります):
- /getCollectionsByFloorPrice { maxFloorPrice, minFloorPrice, orderBy, pageSize }: 最低価格やソート順などの条件に基づいて、NFTコレクションを検索します。
- /getListedCollectionNFTs { projectId, pageSize, priceOrder }: プロジェクトIDや価格の順序などの条件に基づいて、リストされたNFTを検索します。
トランザクション送信に関するエンドポイント:
- /createBuyTransaction { token, price }: 指定したトークンと価格で購入トランザクションを作成します。
- /createTransferSol { destination, amount }: 指定した宛先アドレスに対してSolトークンを送信するトランザクションを作成します。
- /createTransferToken { destination, mint, amount }: 指定した宛先アドレスに対して特定のトークンを指定数量送信するトランザクションを作成します。
トランザクションの構築に関するエンドポイント(LLMにアクセスできません):
- /page/:methodName
- /qr/:methodName
- /sign/:methodName
これらのエンドポイントは開発中であり、変更される可能性があることに注意してください。また、プラグインの開発には依存関係のインストールと開発サーバーの起動が必要です。詳細な手順については、上記の情報を参照してください。なお、このコードベースはApache License 2.0の下で公開されています。免責事項についても注意してください。
https://github.com/solana-labs/chatgpt-plugin/blob/master/langchain_examples/python/main.py
# 必要なモジュールをインポートします
from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent
from langchain.agents import AgentType
from langchain.tools import AIPluginTool
if __name__ == ‘__main__’:
# 環境変数の設定
import os
DEV_ENV = os.environ[‘DEV’] == ‘true’
URL = “http://localhost:3333” if DEV_ENV else “https://solana-gpt-plugin.onrender.com”
llm = ChatOpenAI(temperature=0)
# 必要なツールをロードします(AIPluginToolも含む)
tools = load_tools([“requests_post”])
tool = AIPluginTool.from_plugin_url(URL + “/.well-known/ai-plugin.json”)
tools += [tool]
# エージェントを初期化します(ツールとChatGPTモデルを使用)
agent_chain = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# 質問を投げてエージェントループを実行します
question = “8fbqVvpK3Dj7fdP2c8JJhtD7Zy3n9qtwAeGfbkgPu625はいくつのラムポートを持っていますか?”
agent_chain.run(question)
import { Connection, Transaction, Keypair, Signer } from “@solana/web3.js”;
import { readFileSync } from “fs”;
const connection = new Connection(“https://api.mainnet-beta.solana.com”);
async function simulate(base64Transaction: string, signers: Signer[]) {
const transaction = Transaction.from(
Buffer.from(base64Transaction, “base64”)
);
return await connection.simulateTransaction(transaction, signers);
}
function parse(): {
keypair: Keypair;
base64Transaction: string;
} {
let args = process.argv.slice(2);
if (args.length !== 4 || args[0] !== “–tx” || args !== “–keypair”) {
console.error(
“Usage: ts-node scripts/send.ts –tx <base64_transaction> –keypair <path_to_keypair>”
);
process.exit(1);
}
const base64Transaction = args;
const keypairPath = args;
const keypair = Keypair.fromSecretKey(
new Uint8Array(JSON.parse(readFileSync(keypairPath, “utf-8”)))
);
return { keypair, base64Transaction };
}
async function main() {
let { keypair, base64Transaction } = parse();
let simulationResult = await simulate(base64Transaction, [keypair]);
console.log(simulationResult);
}
main();
このコードは、Solanaのブロックチェーン上でトランザクションをシミュレーションするためのJavaScriptのスクリプトです。以下にコードの説明をします。
1. `import { Connection, Transaction, Keypair, Signer } from “@solana/web3.js”;`: SolanaのWeb3.jsライブラリから必要なモジュールをインポートします。`Connection`はSolanaネットワークへの接続を管理し、`Transaction`はトランザクションを表します。`Keypair`は秘密鍵を表し、`Signer`はトランザクションに署名するためのインターフェースです。また、`readFileSync`はファイルを同期的に読み込むための関数です。
2. `const connection = new Connection(“https://api.mainnet-beta.solana.com”);`: Solanaのメインネットワークに接続するための`Connection`オブジェクトを作成します。APIのエンドポイントURLを指定しています。
3. `async function simulate(base64Transaction: string, signers: Signer[]) { … }`: 与えられたBase64形式のトランザクションをシミュレーションするための非同期関数`simulate`を定義しています。`base64Transaction`にはBase64エンコードされたトランザクションデータが渡されます。`signers`にはトランザクションに署名するための`Signer`オブジェクトの配列が渡されます。関数内部では`Connection`オブジェクトを使用してトランザクションをシミュレートし、結果を返します。
4. `function parse(): { keypair: Keypair; base64Transaction: string; } { … }`: コマンドライン引数を解析して、秘密鍵とBase64エンコードされたトランザクションを返す`parse`関数を定義しています。コマンドライン引数は特定のフォーマットで渡される必要があります。関数内部では引数のバリデーションと解析を行い、`Keypair`とBase64エンコードされたトランザクションを返します。
5. `async function main() { … }`: メインの関数`main`を定義しています。関数内部では`parse`関数を呼び出して秘密鍵とトランザクションを取得し、`simulate`関数を呼び出してトランザクションをシミュレートします。シミュレーション結果はコンソールに出力されます。
6. `main();`: `main`関数を呼び出してスクリプトを実行します。
このコードは、SolanaのWeb3.jsを使用してトランザクションをシミュレーションするためのスクリプトです。コマンドライン引数から秘密鍵とトランザクションを取得し、Solanaのネットワークに接続してトランザクションをシミュレートします。
このコードでは、simulate
という非同期関数が定義されています。この関数は、与えられたBase64形式のトランザクションを実際に送信することなく、ローカルでシミュレーションするために使用されます。
具体的には、simulate
関数は次のことを行います。
- Base64形式のトランザクションデータをバイナリデータにデコードします。
- デコードされたバイナリデータから
Transaction
オブジェクトを作成します。 Connection
オブジェクトを使用して、指定されたトランザクションをSolanaネットワーク上でシミュレーションします。- シミュレーション結果を非同期に返します。
simulate
関数は、実際のトランザクション送信前に、トランザクションが正常に実行されるかどうかを確認するために使用されます。これにより、トランザクションが予期しないエラーや問題を引き起こす前に、事前にシミュレーション結果を確認することができます。
Base64は、バイナリデータ(例: バイナリファイルや画像)をテキスト形式にエンコードするための手法です。Base64エンコードでは、バイナリデータを64種類の印字可能なASCII文字で構成されるテキストデータに変換します。
Base64エンコードは、以下の特徴を持っています:
1. テキスト形式: Base64エンコードされたデータはテキスト形式なので、テキストベースのデータとして扱うことができます。
2. ASCII文字の使用: Base64エンコードでは、英数字や一部の記号など、64種類のASCII文字が使用されます。これにより、エンコードされたデータがさまざまな環境やテキストベースのプロトコルで扱いやすくなります。
3. バイナリデータの表現: Base64エンコードは、バイナリデータを文字列として表現する方法です。バイナリデータは通常、バイナリ形式で表現されるため、テキスト形式に変換することで、テキストベースのシステムやプロトコルで扱うことができるようになります。
Base64エンコードは、データの転送やデータの保存、データの表示など、さまざまな目的で使用されます。例えば、メールの添付ファイル、画像のデータURL、APIのデータ送信などでよく使用されます。
以下に、それぞれのファイルの役割と概要を説明します。
– `chatgpt-plugin`: ChatGPTプラグインのメインディレクトリです。プラグインのソースコードや設定ファイルなどが含まれます。
– `DISCLAIMER.md`: 免責事項(Disclaimer)の内容を記載したマークダウンファイルです。プロジェクトやコードの使用に関する免責事項や法的注意事項などが含まれます。
– `LICENSE`: プロジェクトのライセンス情報が含まれるファイルです。プロジェクトのコードを使用する際のライセンス条件や制約などが記載されています。
– `README.md`: プロジェクトの説明や使用方法、ドキュメンテーションが書かれたマークダウンファイルです。プロジェクトの概要やインストール手順、使用例などが記載されています。
– `package.json`: プロジェクトのパッケージ情報と依存関係が定義されているファイルです。Node.jsプロジェクトにおけるパッケージマネージャであるnpmで使用されます。
– `poetry.lock`: Poetryによって生成されたパッケージのロックファイルです。Pythonプロジェクトにおける依存関係のバージョン管理に使用されます。
– `pyproject.toml`: Poetryのプロジェクト設定ファイルです。Pythonプロジェクトの依存関係やビルド設定などが記述されています。
上記の情報を基に、それぞれのファイルがプロジェクト内での役割と目的を持っていることがわかります。