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

JavaScript を使用して TRON 上でスマートコントラクトを展開し、操作する方法

更新日:
2025年11月26日

読了時間:12分

概要

TRONは、オープンソースであり、スマートコントラクトに対応したパブリックブロックチェーンプラットフォームです。その主要な機能と革新的なアプローチにより、TRONはスマートコントラクトの実行や、高いTPSレベルでのトランザクション処理を実現する高性能なインフラストラクチャを提供しています。

「1秒あたりのトランザクション数」(TPS)とは、ネットワークが1秒間に処理できるトランザクションの数を指します。

イーサリアムに精通した開発者は、TRONブロックチェーンがイーサリアムと互換性を持っているため、TRONブロックチェーン上で分散型アプリケーション(dApps)を容易に構築することができます。イーサリアムからTRONへの移行はスムーズかつ効率的であり、dAppsをTRONネットワークにシームレスに統合することが可能です。

このガイドでは、Solidity、JavaScript、およびTRONの開発者ツールを使用して、TRONブロックチェーン上でスマートコントラクトをデプロイし、操作する方法について学びます。

主な業務内容


  • TRONブロックチェーンについて学ぶ
  • TronBox を使用して、TRON ブロックチェーン上でスマートコントラクトを作成・展開する
  • TronWeb JS ライブラリを使用してスマートコントラクトとやり取りする

必要なもの


  • ブロックチェーンの概念に関する基本的な理解
  • JavaScript およびSolidityの知識
  • Node.jsがインストールされていること(バージョン 18.16 以上)
  • TronBoxがインストールされていること(バージョン 3.3 以上)
  • TronWeb(バージョン5.2以降) -インストール手順については、このガイドの中で説明します。
  • dotenv(バージョン 16.2 以降) -インストール方法については、このガイドの中で説明します。
  • prompt-sync(バージョン 4.2 以降) -インストール手順については、このガイドの中で説明します。
  • コードエディタ(例:Visual Studio Code
  • TRON対応の自己管理型Web3ウォレット(例:TronLink

上記のリンクをクリックし、表示される指示に従って、各依存関係をダウンロードしてインストールすることができます。

このガイドで使用されている依存関係

依存関係バージョン
node.js18.16.0
tronbox3.3.0
tronweb5.2.0
dotenv16.2.0
prompt-sync4.2.0

TRONの独自機能

TRONはイーサリアムとの互換性を維持しつつも、他とは一線を画す独自の機能を備えています。こうした独自の特性がTRONの魅力を高め、開発者やユーザーにとっての可能性を広げています。その特別な機能には、以下のようなものがあります:

  • DPoSコンセンサスメカニズム:ブロックとトランザクションの検証を行うため、TRONは「委任型プルーフ・オブ・ステーク(DPoS)」システムを採用しており、27人のスーパーレプレゼンタティブが6時間ごとに交代して運用を行っています。

  • エネルギー効率: 委任型プルーフ・オブ・ステーク(DPoS)は、スーパーレプレゼンタティブという仕組みを採用しているため、ネットワークの維持や取引の検証に必要なエネルギー量を削減します。

  • リソースモデル:TRONネットワーク上のトランザクションには、帯域幅料金とエネルギー料金が課されます。ここで、帯域幅とはトランザクションのバイト数を指し、エネルギーとは、TVM(TRON仮想マシン)がTRONネットワーク上で特定の処理を実行するために必要な計算量の測定単位を指します。

TRONネットワークでは、ブロックプロデューサーは「スーパーレプレゼンタティブ」と呼ばれます。彼らは投票プロセスを経て選出されます。最終的に、得票数が最も多い上位27名の候補者がスーパーレプレゼンタティブとして選出されます。

開発環境のセットアップ

Quicknode を使って TRON にアクセスする

TRON上で開発を行うには、ネットワークに接続するためのAPIエンドポイントが必要です。パブリックノードを利用することも、独自のインフラストラクチャをデプロイして管理することも可能です。ただし、応答時間を8倍高速化したい場合は、その手間を私たちにお任せください。こちらからアカウント登録を行ってください。

このガイドでは、便宜上、TRON Nileテストネットを使用します。そのため、開発にはパブリックエンドポイントを利用します。ただし、TRONメインネットでの作業を行う際は、Quicknodeのエンドポイントを利用することをお勧めします。Quicknodeのエンドポイントは信頼性とパフォーマンスに優れており、開発プロセスをよりスムーズに進めることができます。

Quicknode エンドポイント

ウォレットへの入金

TRONチームが公開しているファウセットを使って、ウォレットに資金を入金しましょう。このファウセットでは、TRON Nileテストネット上でTRXが無料で配布されています。

資金を入金するためのウォレットはすでに設定済みであると想定しています。まだ設定していない場合は、TRON対応の自己管理型Web3ウォレット(例:TronLink)をインストールして設定してください。


  • TronLink拡張機能を使ってウォレットアドレスを取得する TronLink ウォレット
  • 蛇口へ行く
  • 「」の下にあるボックスに、ウォレットのアドレスを入力してください。 テストコインを2000枚入手する。
  • キャプチャを解いて、 入手する ボタン

プロジェクトの設定

プロジェクトを設定するには、ターミナルウィンドウ(例:Terminal、Windows PowerShell)とコードエディタ(例:Visual Studio Code)が必要です。

必要なフォルダを作成するには、ターミナルで次のコードを実行してください:

mkdir send-message
cd send-message

mkdir tronbox
cd tronbox

次に、以下のコマンドを使用して、簡単なプロジェクトを作成してください。

tronbox init

これにより、デプロイに役立ついくつかのフォルダやファイルが作成されます。ファイル構造は、 tronbox フォルダは次のような状態になっているはずです:

├── contracts
│ └── Migrations.sol
├── マイグレーション
│ ├── 1_initial_migration.js
│ └── 2_deploy_contracts.js
├── sample-env
├── test
├── tronbox-config.js
└── tronbox.js

  • 契約: Solidityのスマートコントラクトはこのフォルダ内に配置してください。
    • contracts/Migrations.sol:スマートコントラクトの管理およびアップグレードを行うための、あらかじめ作成されたSolidityファイルです。すべてのプロジェクトで必要とされ、通常は変更されません。
  • 移住: デプロイスクリプトはこのフォルダに配置してください。
    • migrations/1_initial_migration.js: このスクリプトは、 移住 契約。
    • migrations/2_deploy_contracts.js: 他のコントラクトをデプロイするためのデプロイスクリプトです。これについては、以降のセクションで修正していきます。
  • test: スマートコントラクトのテスト用スクリプトはすべてここに格納してください。本ガイドでは、テストについては扱いません。
  • sample-env: .env ファイルのサンプルです。環境変数を安全に扱う際に役立ちます。これについては、以降のセクションで詳しく説明します。
  • tronbox.js:TronBoxの設定ファイルで、ネットワーク情報やその他のプロジェクト関連のパラメータを設定するために使用されます。このままにしておいても問題ありません。

スマートコントラクトのデプロイ

スマートコントラクトの作成

それでは、これらのコマンドを実行して、 SendMessage.sol ファイルは 契約 フォルダ。

cd contracts
echo > SendMessage.sol

次に、そのファイルをコードエディタで開きます。以下のコードをコピーして、そのファイルに貼り付けてください。

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

contract SendMessage {
uint256 totalMessages; // Counter for total number of messages
string lastMessage; // Variable to store the last message

event NewMessage(address indexed from, string message, uint256 timestamp); // Event to emit when a new message is set

constructor(string memory _message) {
setMessage(_message); // Set the initial message when the contract is deployed
}

// Function to set a new message
function setMessage(string memory _message) public {
require(
(keccak256(abi.encodePacked(lastMessage)) !=
keccak256(abi.encodePacked(_message))),
"Same message" // Check if the new message is different from the last message
);

totalMessages += 1; // Increment the total message count
lastMessage = _message; // Update the last message variable

emit NewMessage(msg.sender, _message, block.timestamp); // Emit an event for the new message
}

// Function to retrieve the last message
function getLastMessage() public view returns (string memory) {
return lastMessage; // Get the last message
}

// Function to retrieve the total number of messages
function getTotalMessages() public view returns (uint256) {
return totalMessages; // Get the total number of messages
}
}

スマートコントラクトのロジック

スマートコントラクト SendMessage は、ブロックチェーン上のメッセージング機能を円滑にするために設計されています。これにより、ユーザーはメッセージの設定や取得が可能になるほか、送信されたメッセージの総数を追跡することもできます。このスマートコントラクトには、以下の主要な要素が含まれています:

  1. 変数:

    • totalMessages これは、コントラクトを通じて送信されたメッセージの総数を記録するカウンターです。
    • lastMessage は、最後に送信されたメッセージの内容を格納する文字列変数です。
  2. イベント:

    • NewMessage は、新しいメッセージが設定されるたびに発生するイベントです。このイベントには、送信者のアドレス、メッセージの内容、およびタイムスタンプが含まれます。
  3. コンストラクタ:

    • コンストラクタ関数は、スマートコントラクトがデプロイされた際に実行され、初期メッセージをパラメータとして受け取ります。この関数は、 setMessage 初期メッセージを設定する関数。
  4. setMessage 機能:

    • この関数を使用すると、文字列パラメータを指定することで、新しいメッセージを設定することができます。 _message.
    • まず、新しいメッセージと最後のメッセージのハッシュ値を比較して、両者が異なるかどうかを確認します。もし同じ場合は、エラーメッセージがスローされます。
    • 新しいメッセージが異なる場合、その totalMessages カウンター、を更新します。 lastMessage 変数、そして NewMessage イベント。
  5. getLastMessage 機能:

    • この関数は、の値を返すことで、最後のメッセージの内容を取得します。 lastMessage 変数。
  6. getTotalMessages 機能:

    • この関数は、の値を返すことで、送信されたメッセージの総数を取得します。 totalMessages カウンター。

スマートコントラクトは、ユーザーがメッセージを設定・取得できるシンプルなメッセージングシステムを提供すると同時に、重複したメッセージが保存されないようにします。また、イベントを活用してブロックチェーン上のメッセージの更新状況を追跡・監視することで、透明性を確保しています。

展開に向けた準備

設定ファイルの変更

このセクションでは、設定ファイルの設定を行い、スマートコントラクトをコンパイルします。

ディレクトリを変更するには、1つ上のディレクトリに移動してください。

cd .. 

次に、 tronbox.js すべてのネットワーク(メインネット、テストネットなど)およびコンパイラ設定を定義するファイル。

設定ファイルに関するより詳しい情報は、こちらで説明されています。

次のような変数に気づくかもしれません。 process.env.PRIVATE_KEY_MAINNET, process.env.PRIVATE_KEY_SHASTA、および process.env.PRIVATE_KEY_NILE. ウォレットの秘密鍵を入力する必要があります。秘密鍵は絶対に他人に知られてはならないため、安全に管理して入力してください。したがって、 dotenv パッケージは、以下の場所にインストールする必要があります。 tronbox このコードを実行してディレクトリを作成します。

npm install dotenv --save

秘密鍵を取得するには、


  • TronLinkウォレット拡張機能を開く
  • を開く ウォレット管理 メニュー
  • 選択 アカウントのエクスポート
  • 選択 秘密鍵
  • パスワードを入力してください
  • 秘密鍵をコピーしてください

TronLink

次に、 .env 以下のコードを実行して、秘密鍵をファイルに書き出してください。必ず YOUR_PRIVATE_KEY お持ちのウォレットの秘密鍵を使って。

echo "export PRIVATE_KEY_NILE=YOUR_PRIVATE_KEY" > .env

その tronbox 当面の間、フォルダ構成は以下のようになるようにしてください。

なお、 .env, .gitignore、および .git-folder-keeper これらは隠しファイルです。

├── .env
├── .gitignore
├── contracts
│ ├── Migrations.sol
│ └── SendMessage.sol
├── migrations
│ ├── 1_initial_migration.js
│ └── 2_deploy_contracts.js
├── sample-env
├── test
│ └── .git-folder-keeper
├── tronbox-config.js
└── tronbox.js

必ず次のことを確認してください。 .gitignore ファイルには以下の内容が含まれています .env. こうすることで、 .env このファイルはGitによって追跡されていません。

コンパイル

次に、スマートコントラクトをコンパイルします。

tronboxのコンパイル

コンソールの出力は、このように表示されます。

./contracts/Migrations.sol のコンパイル中...
./contracts/SendMessage.sol のコンパイル中...
./build/contracts にアーティファクトを書き込み中

展開

そろそろテストネットにスマートコントラクトをデプロイする時期が来ました。コントラクトのデプロイ(移住) は、 移住 フォルダ。

その 1_initial_migration.js このファイルはあらかじめ作成済みですので、編集する必要はありません。ただし、コードエディタで開いて内容を確認しておくことをお勧めします。内容は以下のようになります。

var Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {
deployer.deploy(Migrations);
};

それでは、 2_deploy_contracts.js コードエディタでファイルを開き、以下の内容に合わせて修正してください。

var MyContract = artifacts.require("./SendMessage.sol");

module.exports = function(deployer) {
deployer.deploy(MyContract, "Hi Quicknode!");
};

SendMessage スマートコントラクトは1つのパラメータを受け取ります(_message) 内の コンストラクタ 関数、つまり、 「やあ、Quicknode!」 はこのパラメータを示しています。お好きな値に変更できます。

このコマンドを実行して、スマートコントラクトをNileテストネットにデプロイします。

ターミナルのカレントディレクトリが tronbox.

source .env && tronbox migrate --network nile

出力はこのような形になるはずです。デプロイしたスマートコントラクトのアドレス(Base58および16進数表記)は、デプロイするたびに異なります。

ネットワーク「nile」を使用しています。

マイグレーションの実行中: 1_initial_migration.js
マイグレーションをデプロイ中...
マイグレーション:
(base58) TLp71KNc3bZah88Pwo8MuHma9pKUsCP4hK
(16進数) 4176f0a2987d97a3dbb376807558697a339fee0fe6
正常に完了したマイグレーションをネットワークに保存中...
アーティファクトを保存中...
移行の実行中: 2_deploy_contracts.js
SendMessage をデプロイ中...
SendMessage:
(base58) TPDnWBU9mD4VSYmGbXVrKsocvuqBFJuFPk
(hex) 41915b6cc017b44eba2c7af7ddb94885ab3c34e1c5
正常に完了した移行データをネットワークに保存中...
アーティファクトを保存中...

おめでとうございます!TRON Nileテストネットに、初めてのスマートコントラクトをデプロイしました!

これらのスマートコントラクトは、TRON Nile テストネットエクスプローラーで確認することができます。


  • TRON Nile テストネットエクスプローラーへ移動する
  • SendMessage スマートコントラクトの Base58 形式のアドレスを貼り付けてください(TPDnWBU9mD4VSYmGbXVrKsocvuqBFJuFPk(私用)) を検索バーに入力して、 入力

スマートコントラクトがエクスプローラーにインデックスされるまで、数分かかる場合があります。

スマートコントラクトとやり取りする

このガイドでは、スクリプトファイルを介してスマートコントラクトとやり取りする方法について説明します。ただし、スマートコントラクトとやり取りする方法は他にもいくつかあることに留意してください。

スクリプトファイルを介して操作する

メインのプロジェクトディレクトリ(send-message)内に新しいフォルダ(tronweb)を作成し、基本的なスクリプトファイルを記述します。

cd ..

mkdir tronweb
cd tronweb

現時点では、フォルダ構造は以下のようになっているはずです。

├── tronbox
│ ├── .env
│ ├── .gitignore
│ ├── build
│ │ └── contracts
│ │ ├── Migrations.json
│ │ └── SendMessage.json
│ ├── contracts
│ │ ├── Migrations.sol
│ │ └── SendMessage.sol
│ ├── migrations
│ │ ├── 1_initial_migration.js
│ │ └── 2_deploy_contracts.js
│ ├── sample-env
│ ├── test
│ │ └── .git-folder-keeper
│ ├── tronbox-config.js
│ └── tronbox.js
└── tronweb

これらのコマンドを実行して、空の npm プロジェクトを作成し、 tronweb, dotenv、および prompt-sync パッケージ。

npm init --yes
npm install tronweb
npm install dotenv
npm install prompt-sync

次に、空のJavaScriptファイルを作成します。

echo > sendMessage.js

次に、コードエディタでファイルを開き、以下のコードをファイルに貼り付けてください。忘れずに変更してください BASE58_SENDMESSAGE_CONTRACT_ADDRESS 契約上の住所宛てに(base58) デプロイ済みの SendMessage スマートコントラクト。

このスクリプトファイルは、現在のメッセージを取得しユーザーにメッセージの変更を希望するかどうかを確認しメッセージを変更するためのトランザクションを送信し新しい現在のメッセージを取得する、という一連の処理をそれぞれ実行します。

const TronWeb = require("tronweb");
const prompt = require("prompt-sync")();
require("dotenv").config();

const tronWeb = new TronWeb({
fullHost: "https://nile.trongrid.io",
privateKey: process.env.PRIVATE_KEY_NILE,
});

async function sendMessage() {
contractAddress = "BASE58_SENDMESSAGE_CONTRACT_ADDRESS";
let contract = await tronWeb.contract().at(contractAddress);
let lastMessage = await contract.getLastMessage().call();
console.log(`The current message is: ${lastMessage}`);

let input = prompt("Do you want to send a new message? ([1]: Yes, [2]: No) ");

if (input == 1) {
let newMessage = prompt("Type your new message: ");
let txId = await contract.setMessage(newMessage).send();
console.log(
`Check tx on the explorer: https://nile.tronscan.org/#/transaction/${txId}`
);

lastMessage = await contract.getLastMessage().call();
console.log(`The current message is: ${lastMessage}`);
}
}

sendMessage();

スクリプトファイルを見ると、次のような変数があることに気づくかもしれません。 process.env.PRIVATE_KEY_NILE. ブロックチェーンにトランザクションを送信するには、秘密鍵が必要です。そこで、 dotenv スマートコントラクトのデプロイ時に使用したものと同じパッケージ。

[作成] .env 以下のコードを実行して、秘密鍵をファイルに書き出してください。必ず YOUR_PRIVATE_KEY お持ちのウォレットの秘密鍵を使って。

echo "export PRIVATE_KEY_NILE=YOUR_PRIVATE_KEY" > .env

さあ、スクリプトを実行する準備が整いました!

node sendMessage.js

コンソールには現在のメッセージが表示され、その後、新しいメッセージを送信するかどうかを尋ねられます。


  • 種類 1 そして、 入力 新しいメッセージを送信したい場合は。
  • すると、コンソールが新しいメッセージの入力を求めます。
  • 好きな文字を入力して、 入力.

メッセージを変更するトランザクションがブロックチェーンに送信されます。その後、エクスプローラーでそのトランザクションを確認するためのリンクと、現在のメッセージがターミナルに表示されます。

現在のメッセージは「Hi Quicknode!」です。
> 新しいメッセージを送信しますか? ([1]: はい、[2]: いいえ) 1
> 新しいメッセージを入力してください:Quicknode ❤️
エクスプローラーで取引を確認:https://nile.tronscan.org/#/transaction/87119e102111de7a2d062feb005662e9fdf62170442d93b1f43853aeddabbfcd
最後のメッセージは:Quicknode ❤️

結論

この成果、おめでとうございます!この学習の旅路を通じて、私たちはあらゆる段階で皆様を導いてまいりました。ウォレットへの資金投入から、Quicknodeエンドポイントの設定、そしてTronBoxを用いた開発環境の構築に至るまで、皆様はTRONテストネット上でスマートコントラクトを作成・デプロイし、それらとやり取りするために必要なスキルを身につけられました。

テストネットでの開発を習得し、そのスキルをメインネットに応用する準備が整ったら、こちらからQuicknodeの無料アカウントに登録し、TRONメインネットのエンドポイントを作成してください。

何か問題が発生したり、ご質問がある場合は、ぜひお気軽にご相談ください!Discordや Twitter 私たちまでご連絡ください。

皆様からのフィードバックを心よりお待ちしております!❤️

ご意見や新しいトピックに関するご要望などがありましたら、ぜひお知らせください。皆様からのご連絡を心よりお待ちしております。

このガイドをシェアする