読了時間:6分
はじめに
読者の皆さん、こんにちは!今日は、ソラナ・ブロックチェーンへの探検に出かけるという、ワクワクする一日です。 ソラナは、安全でスケーラブル、かつ分散型のコンセンサスプロトコルを提供するという複雑な課題に対し、現在のエコシステムのソリューションをさらに改善しようとしている、注目のブロックチェーンです。ソラナは、その「兄貴分」であるイーサリアムから市場シェアを奪うべく、数多くの技術を駆使しています。このガイドでは、ソラナに接続し、その開発用ネットワーク(devnet)で資金を取得し、この新しくエキサイティングな技術を使ってトランザクションを送信する方法について学びます。
動画による解説をご希望ですか?サヒルと一緒に、JavaScriptを使ってSolanaでトランザクションを送信する方法を学びましょう。
前提条件:
- お使いのシステムにNode.jsがインストールされていること。
- コマンドライン/ターミナルの操作に慣れていること。
- コードを書くためのテキストエディタ。
プロジェクトの設定
ペニー株のデイトレーダーのようにソラナのトランザクションを次々と処理し始める前に、プロジェクトの設定を行う必要があります!まず、ディレクトリを作成しましょう。このガイドでは「SolanaTransaction」という名前を付けますが、お好きな名前を付けて構いません。 新しいプロジェクトフォルダを作成したら、コードを記述するファイルが必要です。こちらも、拡張子が.jsであれば任意の名前を付けて構いませんが、ここではsendSol.js と名付けます。コンソールに以下のコマンドを入力して、作業を進めてください。
mkdir SolanaTransaction
cd SolanaTransaction
touch sendSol.js
さて、その話はさておき、お好みのテキストエディタでsendSol.jsファイルを開いてください。
Solanaノードの取得
Quicknodeのエンドポイントを使用してSolanaクラスターに接続する
Solana上で開発を行うには、ネットワークに接続するためのAPIエンドポイントが必要です。パブリックノードを利用することも、独自のインフラストラクチャをデプロイして管理することも可能です。ただし、応答時間を8倍高速化したい場合は、その手間を私たちにお任せください。
なぜ、のプロジェクトの50%以上が ソラナ Quicknode を選んで、無料トライアルを始めましょう こちら. ここでは、 ソラナ Devnet エンドポイント。
をコピーして HTTP プロバイダーのリンク:
Solanaへの接続
Solanaが提供するdevnetに接続するには、@solana/web3.jsライブラリをインストールする必要があります。インストールするには、次のコマンドを実行してください。
npm i @solana/web3.js@1
SolanaのJavaScriptライブラリをインストールすれば、ネットワークに接続できるようになります。
//sendSol.js
const web3 = require("@solana/web3.js");
// Connect to cluster
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
コードの概要は以下の通りです:
- 2行目:solana/web3.js ライブラリをインポートします。
- 4~6行目:新しい接続オブジェクトを作成します。接続のコンストラクタには、エンドポイントURLの文字列表現(前の手順で生成したもの)と、コミットメントレベルが渡されます。
~とともに 接続 定数の設定が完了すれば、Solanaネットワークへの呼び出しが可能になります。接続が正常に機能しているかどうかを確認したい場合は、 console.log(connection) をログに記録する 接続オブジェクト.
住所と資金の生成
ネットワークに接続したら、アドレスを生成するためのツールを用意し、ネットワーク用の資金を確保する必要があります。まず、新しい鍵ペアを生成し、SOLをエアドロップする必要があります。新しい鍵ペアを生成するための簡単なツールをご用意しました:
注:エアドロップのリクエストを頻繁に送信すると、429(リクエストが多すぎます)エラーが発生する可能性があります。
を貼り付けてください 秘密 そして 出典: ウォレットアドレスを、以下のコードの web3 宣言。
最後に、宛先アドレスを追加します。SOLを送信するために、ランダムなアドレスを生成して使用します。 const to = web3.Keypair.generate(); コードは次のようになるはずです:
//sendSol.js
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
const secret=[00, ... 00]; // Replace with your secret key
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
このコードの箇所を順を追って見ていきましょう:
秘密: これは、前の手順で生成した秘密鍵です。これはトランザクションの署名に使用されます。このアカウントには、すでにdevnetのSOLをいくらか入金しています。出典:: から派生した新しい鍵ペアを作成する unit8array 秘密鍵の。~へ: 送金先の新しい鍵ペアを作成します。
これまでの手順をすべて完了した時点で、次のような状態になっているはずです:
- Solanaネットワークへの接続。
- SOLを送金するための残高があるアカウント。
- SOLを送金する宛先のアドレス。
こうして、これらすべてのコンポーネントが揃ったことで、ついにトランザクションを完了できるようになりました!
トランザクションの送信
いよいよ楽しい部分です!これでネットワーク上にトランザクションを送信できるようになりました。このプロセスには2つのステップがあります。まず、新しいトランザクションオブジェクトを作成する必要があります。次に、そのトランザクションを別のユーザーに送信し、そこに自分の署名を追加しなければなりません。以下の非同期コードブロックでは、その具体的な手順を示します:
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100,
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
トランザクションの作成
ここで、これまでの各ステップにはそれぞれ独自の関数があることがわかります。まずは最初の関数 `web3.Transaction().add(web3.SystemProgram.transfer())` から見ていきましょう。これはかなり冗長なので、完全に理解するためには、さらに小さな部分に分解する必要があります。
- web3.Transaction()- 空のTransactionオブジェクトを作成します。
- add()- Transaction オブジェクトに命令を追加できるメソッドを提供します。
- web3.SystemProgram.transfer()- これは、あるアカウントから別のアカウントへ資金を送金する役割を担うメソッドです。いくつかの引数を受け取ります。これは、トランザクション定数に格納した最初の関数の2行目から6行目に対応しています。
パラメータ:
- fromPubkey - 送金元となるアカウントの公開鍵。
- toPubkey - 取引から資金を受け取るアカウントの公開鍵。
- lamports:- 送信するlamportsの量。lamportsは、Solにおけるgweiのようなものだと考えてください。
取引の締結
トランザクションオブジェクトの準備が整ったので、次は秘密鍵で署名してトランザクションを承認する必要があります。上記のコードブロック内の2番目の関数が、この処理を担当しています。その内容を詳しく見ていくことで、何が起きているのかをより深く理解することができます。
- 10行目:sendAndConfirmTransaction()の結果を格納するシグネチャ定数を宣言しています。
- 11~13行目:前述の関数に引数を渡しています。引数の順序は、接続オブジェクト、送信するトランザクション、そして配列で表される送信者の秘密鍵・公開鍵のペアです。
- 15行目:トランザクションハッシュで表される、正常に完了した署名を記録します。
以上の設定が完了したら、コードを実行する準備が整いました。QuicknodeのエンドポイントURLとシークレットキーを、次のように環境変数に保存してください:
QUICKNODE_URL=<YOUR_QUICKNODE_URL_HERE>
SECRET_KEY=<SECRET_KEY_HERE>
置換 <YOUR_QUICKNODE_URL_HERE> そして <SECRET_KEY_HERE> 実際の値を用いて。
最終的に、コードスニペットは次のようになるはずです
//sendSol.js
require('dotenv').config();
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
process.env.QUICKNODE_URL,
'confirmed',
);
const secret = JSON.parse(process.env.SECRET_KEY);
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100, //0.01 SOL
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
これで、ターミナルでsendSol.jsファイルを実行すると、次のような出力が表示されます!

結論
おめでとうございます!ここまでたどり着いたということは、Solanaネットワーク上でトランザクションの送信に成功したということです。Solanaは非常に興味深いブロックチェーンであり、UXの面でイーサリアムネットワークをさらに進化させているようです。トランザクションの処理が速く、手数料も安くなっています。Solanaはイーサリアムほど実戦での実績はまだありませんが、間違いなく注目すべき存在です。そして何より重要なのは、あなたはすでに時代の先を行く存在だということです! JavaScriptを使ってSolana上でトランザクションを送信したと言える人はそう多くありませんが、あなたならできます!
イーサリアムに関する記事やガイドをもっと読みたい方は、ぜひニュースレターにご登録ください。ご意見やご感想がございましたら、Twitterからお気軽にお寄せください。また、Discordコミュニティサーバーでは、これまで出会った中で最もクールな開発者たちが集まっていますので、いつでもお気軽にチャットで交流してください :)
皆様からのフィードバックを心よりお待ちしております!❤️
ご意見や新しいトピックに関するご要望などがありましたら、ぜひお知らせください。皆様からのご連絡を心よりお待ちしております。