メインコンテンツへスキップ

Web3を使用してトランザクションを送信する

トランザクションweb3.jsAlchemy
初級
Elan Halpern
Alchemy ドキュメント(opens in a new tab)
2020年11月4日
17 分の読書 minute read

このガイドでは、初心者向けに、Web3を使ってイーサリアムのトランザクションを送信する方法を学びます。 イーサリアムのブロックチェーンでは、作成、署名、およびブロードキャストという主に3つのステップを通じてトランザクションを送信します。 これら3つのステップを説明することで、皆さんの疑問が氷解することを願っています! 以下のチュートリアルでは、 Alchemy(opens in a new tab)を使って、イーサリアムチェーンにトランザクションを送信します。 こちらで、Alchemyの無料アカウントを作成してください(opens in a new tab)

注意: このガイドでは、アプリの バックエンド におけるトランザクションの署名について扱っています。 フロントエンドでトランザクションの署名を統合したい場合は、 Web3とブラウザプロバイダ(opens in a new tab)の連携を確認してください。

基本事項

ブロックチェーンの開発を始めたばかりの皆さんは、トランザクションの送信(ごくシンプルな操作であるはずです)についてリサーチをした結果、ありとあらゆるガイドに遭遇し、それぞれが違うことを述べているために、圧倒され、混乱してしまったかもしれません。 今のあなたがそうだとしても、心配は要りません。誰しもその経験があるのです! それではまず、いくつかの基本的な事項を確認しておきましょう:

1. Alchemyは、あなたの秘密鍵を保存しません

  • 言い換えれば、Alchemyはあなたの代理として署名やトランザクションの送信を実行できません。 これは、セキュリティ保護のための仕様です。 Alchemyがあなたの秘密鍵を入力するように要求することはありませんので、ホスティングされたノード(あるいは、あらゆる他人)に対して、あなたの秘密鍵を教えないでください。
  • AlchemyのコアAPIを使ってブロックチェーンから読み込むことは可能ですが、ブロックチェーンに書き出すためには、Alchemyを通じてトランザクションを送信する事前に、他のユーザーがあなたのトランザクションに署名する必要があります(これは、その他すべてのノード向けサービスの場合も同様です)。

2. 「署名者」とは何か

3. 私のトランザクションに署名が必要なのはなぜですか?

  • イーサリアムのネットワーク上でトランザクションを送信したいユーザーは、トランザクションの送信元が本人であることを証明するために、常に(秘密鍵を用いて)トランザクションに署名する必要があります。
  • この秘密鍵は、あなたのイーサリアムアカウントに対する完全な管理権限を与え、あなた(あるいはアクセス権限を持つすべてのユーザー)に対して、あなたの代理としてトランザクションを実行することを許可するものですから、厳重に保護することが非常に重要です。

4. 秘密鍵を保護するには、どうすればよいですか?

  • 秘密鍵の保護や、トランザクションの送信のために秘密鍵を使用するには、多くの方法があります。 このチュートリアルでは、 .env ファイルを使用します。 この他にも、秘密鍵を保存するために別のプロバイダーを利用したり、キーストア・ファイルを活用するなど、様々なオプションがあります。

5. eth_sendTransactioneth_sendRawTransactionの違いは何ですか?

eth_sendTransactioneth_sendRawTransactionはどちらも、トランザクションをイーサリアムのネットワークにブロードキャストし、将来のブロックに追加するためのイーサリアムAPIの関数です。 ただし、トランザクションの署名については、以下のような違いがあります:

Web3を使用する場合、 eth_sendRawTransactionweb3.eth.sendSignedTransaction(opens in a new tab)の関数を呼び出すことでアクセスできます。

このチュートリアルでは、これを使用します。

6. Web3 ライブラリとは?

さて、これらの疑問が解消できたところで、さっそくチュートリアルを始めましょう。 疑問があれば、Alchemy discord(opens in a new tab)で気軽に質問してください。

7. 安全でガス最適化されたプライベートなトランザクションを送信する方法は? {how-to-send-secure-gas-optimized-and-private-transactions}

注意:このチュートリアルには、Alchemyアカウント、イーサリアムアドレスまたはMetaMaskウォレット、NodeJs、およびnpmのインストールが必要です。 インストールが完了していない場合は、以下の手順で行ってください:

  1. 無料のAlchemyアカウントを作成する(opens in a new tab)
  2. MetaMaskアカウントを作成する(opens in a new tab)(またはイーサリアムアドレスを取得する)
  3. 次の手順に従って、Node.jsとnpmをインストールする(opens in a new tab)

トランザクションを送信する手順

1. SepoliaテストネットでAlchemyアプリを作成する

Alchemyダッシュボード(opens in a new tab)に移動し、新規のアプリを作成し、ネットワークにはSepolia(または他のテストネット)を選択します。

2. Sepoliaフォーセットに対し、ETHをリクエストする

Alchemy Sepoliaフォーセット(opens in a new tab)の指示に従って、ETHを受け取ってください。 リクエストには、他のネットワークのアドレスではなく、必ず Sepoliaのイーサリアムアドレス(MetaMaskから)を含めてください。 指示を実行した後、ウォレットにETHが届いていることを再確認してください。

3. 新規のプロジェクトディレクトリを作成し、cdでディレクトリに移動します。

コマンドライン(Macの場合はターミナル)で新規のプロジェクトディレクトリを作成し、このディレクトリに移動します:

1mkdir sendtx-example
2cd sendtx-example

4. Alchemy Web3(または任意のweb3ライブラリ)をインストールする

プロジェクトディレクトリで次のコマンドを実行し、 Alchemy Web3(opens in a new tab)をインストールします。

注意: ethers.jsライブラリを使う場合は、こちら(opens in a new tab)の手順をご覧ください。

1npm install @alch/alchemy-web3

5. dotenvをインストールする

APIキーと秘密鍵を安全に保存するために、.envファイルを使用します。

1npm install dotenv --save

6. .envファイルを作成する

プロジェクトディレクトリに.envファイルを作成し、以下を追加します("your-api-url" と "your-private-key"を置き換える)。

1API_URL = "your-api-url"
2PRIVATE_KEY = "your-private-key"
.envはコミットしないでください! .envは決して他人と共有したり、公開したりしないように注意してください。共有することで、あなたのアカウント情報が漏洩する可能性があります。 バージョンを管理する場合は、.envgitignore(opens in a new tab)ファイルに追加してください。

7. sendTx.jsファイルを作成する

機密データが .envファイルで保護されたので、さっそくコード作成を始めましょう。 送信トランザクションの例として、ETHをSepoliaフォーセットに送り返します。

トランザクションの設定と送信を行うsendTx.jsファイルを作成し、その中に以下のコードを追加してください。

1async function main() {
2 require('dotenv').config();
3 const { API_URL, PRIVATE_KEY } = process.env;
4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
5 const web3 = createAlchemyWeb3(API_URL);
6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address
7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0
9
10 const transaction = {
11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth
12 'value': 1000000000000000000, // 1 ETH
13 'gas': 30000,
14 'nonce': nonce,
15 // optional data field to send message or execute smart contract
16 };
17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
21 if (!error) {
22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
23 } else {
24 console.log("❗Something went wrong while submitting your transaction:", error)
25 }
26 });
27}
28
29main();
すべて表示

6行目のアドレスは、あなたの公開アドレスに置き換えてください。

さて、このコードを実行する前に、ここでいくつかのコンポーネントについて説明しましょう。

dataに関するメモ: イーサリアムで送信できるトランザクションは主に2種類あります。

8. node sendTx.jsを使用してコードを実行する

ターミナルまたはコマンドラインに戻り、以下を実行します。

1node sendTx.js

9. 取引プールでトランザクションを確認する

Alchemyダッシュボードの取引プールのページ(opens in a new tab) を開き、作成したアプリで絞り込み、取引を検索します。 ここでは、トランザクション処理が保留中の状態からマイニングされた状態(成功した場合)あるいはドロップした状態(失敗した場合)に遷移するのを確認できます。 「All」の設定を変更せず、「マイニング済み」、「保留中」、および「ドロップ」のトランザクションをすべて捕捉できるようにしておきます。 また、アドレス 0x31b98d14007bdee637298086988a0bbd31184523に送信されたトランザクションを確認する方法でもあなたのトランザクションを検索できます。

あなたのトランザクションを見つけたら、当該のtxハッシュを選択してトランザクションの詳細を確認します。以下のようなビューが表示されるはずです:

Mempool watcherのスクリーンショット

赤い丸印で囲まれたアイコンをクリックすると、Etherscan上でトランザクションを確認できます!

やりましたね! Alchemyを使用して、最初のイーサリアムトランザクションの送信に成功しました🎉

このガイドに対するフィードバックや提案については、AlchemyのDiscord(opens in a new tab)からElanにメッセージを送ってください!

原文は、 https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy(opens in a new tab)で公開されています。

最終編集者: @nhsz(opens in a new tab), 2023年8月15日

このチュートリアルは役に立ちましたか?