BSC智能合约开发入门:环境搭建与准备
基于币安智能链(BSC)的智能合约开发入门
环境搭建与准备
在开始构建你的首个基于币安智能链(BSC)的智能合约之前,配置好开发环境至关重要。一个配置完善的开发环境能够显著提升开发效率,并减少潜在的错误。常用的开发环境包括:
- Remix IDE (在线集成开发环境): 这是一款基于浏览器的集成开发环境,无需本地安装任何软件即可进行智能合约的编写、编译和部署。Remix IDE 支持 Solidity 语言,并提供了一个友好的界面,方便开发者进行调试和测试。它特别适合初学者快速入门智能合约开发。Remix IDE 提供了多种编译选项和部署目标,包括注入的 Web3 提供商 (例如 MetaMask) 和模拟的 JavaScript 虚拟机。
- Truffle Suite (本地开发框架): Truffle 是一个功能强大的智能合约开发框架,提供了一整套工具,包括合约编译、测试、部署和项目管理。它支持多种智能合约语言,包括 Solidity 和 Vyper。Truffle 拥有庞大的社区支持和丰富的文档资源,适合构建复杂的智能合约项目。需要 Node.js 和 npm (Node Package Manager) 环境才能安装和使用 Truffle。通过 Ganache (Truffle Suite 的一部分),开发者可以在本地创建一个私有的以太坊区块链,用于测试和调试智能合约,而无需连接到公共的测试网络。
- Hardhat (本地开发环境): Hardhat 是另一个流行的以太坊开发环境,它提供了一个快速、灵活且可扩展的平台,用于编译、测试和部署智能合约。Hardhat 专注于提高开发效率和简化开发流程。它具有内置的 Hardhat Network,一个专为开发设计的本地以太坊网络,速度极快且易于配置。Hardhat 还支持各种插件,可以扩展其功能,例如代码覆盖率测试、静态分析和形式化验证。 Hardhat 通常被认为是 Truffle 的替代方案,具体选择取决于开发者的偏好和项目需求。
选择合适的开发环境取决于你的经验水平和项目需求。对于初学者,Remix IDE 是一个不错的选择。对于需要构建复杂项目的开发者,Truffle 或 Hardhat 提供了更强大的功能和灵活性。
Node.js 和 npm (或 yarn): Node.js 是一个 JavaScript 运行时环境,npm (Node Package Manager) 或者 yarn 是包管理工具,用于安装所需的依赖项。 确保你的环境中安装了 Node.js 的最新稳定版本。安装 Hardhat
Hardhat 是一个用于以太坊开发的流行框架,提供了编译、测试、部署智能合约等诸多功能。你可以选择使用 npm 或 yarn 这两个常用的 JavaScript 包管理器来安装 Hardhat。
使用 npm 安装:
在你的项目目录下,打开终端并执行以下命令。
--save-dev
标志表示将 Hardhat 安装为开发依赖,这意味着它主要用于开发环境,而不是生产环境。
npm install --save-dev hardhat
使用 yarn 安装:
如果你更喜欢使用 yarn,可以使用以下命令进行安装。 同样,
--dev
标志也表示将 Hardhat 安装为开发依赖。
yarn add --dev hardhat
安装完成后,你可以在项目的
package.
文件中看到 Hardhat 已经被添加为
devDependencies
。 这意味着 Hardhat 及其相关依赖已经成功安装到你的项目中,可以开始使用了。
或者使用 yarn
如果你倾向于使用 Yarn 作为你的包管理器,可以通过以下命令将 Hardhat 安装为开发依赖项:
yarn add --dev hardhat
这个命令会将 Hardhat 添加到你的项目的
devDependencies
中,这意味着它只会在开发环境中使用,而不会包含在最终的生产构建中。这样做的好处是可以保持生产环境的精简,只包含必要的依赖项。
安装完成后,你就可以在你的项目目录下运行 Hardhat 了。通过以下命令启动 Hardhat 的交互式命令行界面:
bash
npx hardhat
npx
是 Node.js 自带的包运行器,它可以让你在不全局安装 Hardhat 的情况下直接运行它。当你执行这个命令后,Hardhat 会提示你选择一个初始化配置。你可以选择创建一个新的 Hardhat 项目,或者将 Hardhat 集成到现有的项目中。通常,选择 "Create a basic sample project" 可以让你快速开始。
项目脚手架搭建:Hardhat 初始化
使用
yarn hardhat
命令初始化一个新的 Hardhat 项目。 Hardhat 是一个专为以太坊智能合约开发设计的开发环境,提供编译、测试、部署等功能。 使用 Yarn 作为包管理器可以有效地管理项目依赖。
执行此命令后,Hardhat 会引导你选择一个项目模板。在提供的选项中,选择 "Create a basic sample project"(创建一个基本的示例项目)。 这个模板将包含一个预先配置好的 Hardhat 环境,以及一个简单的智能合约示例,方便你快速上手。按照 Hardhat 提供的交互式提示,完成项目的初始化配置,例如项目名称、目录等。初始化过程会自动安装必要的 Hardhat 插件和依赖项,为你搭建一个完善的开发环境。 初始化完成后,你将拥有一个可直接编译、测试和部署的智能合约项目。
配置 Hardhat 连接到 BSC 测试网络 (Testnet)
配置 Hardhat 以连接到 Binance Smart Chain (BSC) 测试网络,需要在
hardhat.config.js
文件中进行相应的设置。该文件定义了 Hardhat 项目的配置,包括编译器版本、网络设置等。
打开你的
hardhat.config.js
文件,找到
networks
部分。如果该部分不存在,则需要创建它。在该部分中,我们将添加 BSC Testnet 的配置信息。
require("@nomicfoundation/hardhat-toolbox");
require('dotenv').config(); // 加载 .env 文件
const BNB_TESTNET_RPC_URL = process.env.BNB_TESTNET_RPC_URL || "YOUR_BNB_TESTNET_RPC_URL"; // 从 .env 文件获取 RPC URL,如果不存在则使用默认值
const PRIVATE_KEY = process.env.PRIVATE_KEY || "YOUR_PRIVATE_KEY"; // 从 .env 文件获取私钥,如果不存在则使用默认值
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.19", // 指定 Solidity 编译器版本
networks: {
bscTestnet: {
url: BNB_TESTNET_RPC_URL, // BSC Testnet RPC URL,用于连接到网络
accounts: [PRIVATE_KEY], // 用于部署合约和发送交易的账户私钥
chainId: 97, // BSC Testnet chain ID,用于防止重放攻击
gasPrice: 20000000000, // 可选:设置 gas price,单位为 wei。根据网络拥堵情况调整
gas: 2100000, // 可选:设置 gas limit,用于限制交易消耗的 gas 总量。默认值通常足够,但复杂合约可能需要增加
},
},
};
解释:
-
@nomicfoundation/hardhat-toolbox
: Hardhat 工具箱,包含常用的插件和工具,例如 ethers.js, waffle, chai 等。 -
dotenv
: 用于从.env
文件加载环境变量,保护私钥等敏感信息。使用前需要安装:npm install dotenv
。 -
BNB_TESTNET_RPC_URL
: BSC Testnet 的 RPC URL,用于与 BSC Testnet 节点进行通信。你可以从 Alchemy, Infura 或其他区块链基础设施提供商获取 RPC URL。 如果环境变量未设置,提供默认值。 -
PRIVATE_KEY
: 用于部署合约和发送交易的账户私钥。请务必妥善保管你的私钥,不要泄露给他人。 如果环境变量未设置,提供默认值。 -
solidity: "0.8.19"
: 指定 Solidity 编译器的版本。请根据你的合约代码选择合适的版本。 -
networks.bscTestnet
: 定义 BSC Testnet 的网络配置。 -
url
: BSC Testnet 的 RPC URL。 -
accounts
: 一个包含用于部署合约和发送交易的账户私钥的数组。 -
chainId
: BSC Testnet 的链 ID,用于防止重放攻击。 -
gasPrice
(可选): 交易的 gas price,单位为 wei。Gas price 越高,交易被打包的速度越快。可以根据网络拥堵情况调整。 -
gas
(可选): 交易的 gas limit,用于限制交易消耗的 gas 总量。
重要提示:
-
强烈建议将
BNB_TESTNET_RPC_URL
和PRIVATE_KEY
存储在.env
文件中,而不是直接在hardhat.config.js
文件中硬编码。这样可以提高安全性,并方便在不同的环境中使用不同的配置。 -
创建
.env
文件,并将以下内容添加到该文件中:
BNB_TESTNET_RPC_URL=YOUR_BNB_TESTNET_RPC_URL
PRIVATE_KEY=YOUR_PRIVATE_KEY
-
确保将
YOUR_BNB_TESTNET_RPC_URL
替换为你的实际 BSC Testnet RPC URL,并将YOUR_PRIVATE_KEY
替换为你的实际私钥。 -
在
.gitignore
文件中添加.env
,以防止将包含敏感信息的.env
文件上传到代码仓库。
注意:
-
请务必将代码中的
YOUR_BNB_TESTNET_RPC_URL
替换为有效的币安智能链(BSC)测试网 RPC URL。你可以选择 Ankr、QuickNode 或其他可靠的节点服务提供商。 这些提供商允许你访问区块链数据并与之交互,而无需运行自己的节点。确保选择一个稳定且信誉良好的提供商,以获得最佳性能和可靠性。 -
至关重要的是,你需要将
YOUR_PRIVATE_KEY
替换为你控制的在 BSC Testnet 上拥有的账户的私钥。 切记:绝对不要将你的主网私钥直接硬编码在代码中,也不要将其提交到任何版本控制系统,例如 Git。 这样做会使你的资金面临极高的风险。最佳实践是使用.env
文件来安全地存储敏感信息,例如私钥。然后,将.env
文件添加到.gitignore
文件中,以防止意外地将其提交到代码仓库中,从而最大限度地保护你的私钥。 -
为了安全地管理环境变量,请安装 dotenv 包。你可以通过运行
npm install dotenv --save
或yarn add dotenv --save
命令来完成安装。dotenv 允许你从.env
文件中加载环境变量到process.env
对象中,以便在你的应用程序中使用。这有助于保持代码的清洁,并防止敏感信息泄露。
编写你的第一个智能合约
现在你已经完成了开发环境的配置,可以开始编写你的第一个智能合约了。智能合约是部署在区块链上的自动执行的代码,是构建去中心化应用(DApps)的基础。创建一个新的 Solidity 文件,例如
Greeter.sol
,并添加以下代码:
Solidity 代码如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
上述代码段声明了合约的许可协议为 MIT,并指定了 Solidity 编译器的版本为 0.8.0 或更高版本。 使用指定编译器版本可以避免因编译器版本不兼容而导致的问题。
接下来定义 Greeter 合约:
contract Greeter {
string private greeting;
constructor(string memory _greeting) {
greeting = _greeting;
}
function greet() public view returns (string memory) {
return greeting;
}
function setGreeting(string memory _greeting) public {
greeting = _greeting;
}
}
这个合约实现了一个简单的问候语功能,包含一个状态变量
greeting
和两个函数。
-
greeting
:一个私有的字符串变量,用于存储问候语。private
关键字表示只有合约内部可以访问此变量。 -
constructor(string memory _greeting)
:构造函数,在合约部署时执行一次。它接收一个字符串参数_greeting
,并将其赋值给状态变量greeting
。memory
关键字表示该字符串存储在内存中,仅在函数执行期间有效。 -
greet() public view returns (string memory)
:一个公共的视图函数,用于返回当前的问候语。public
关键字表示任何用户或合约都可以调用此函数。view
关键字表示该函数不会修改合约的状态。returns (string memory)
声明了该函数返回一个存储在内存中的字符串。 -
setGreeting(string memory _greeting) public
:一个公共函数,用于设置新的问候语。它接收一个字符串参数_greeting
,并将其赋值给状态变量greeting
。
该合约十分简洁,能够存储一条问候语,并提供两个函数来访问和修改这条问候语:
-
greet()
: 一个只读函数,用于返回当前存储的问候语字符串。 它不会修改合约的任何状态。 -
setGreeting(string memory _greeting)
: 允许用户更新存储的问候语。 它需要传入一个新的字符串作为参数, 并会修改合约的状态。
编译智能合约
在以太坊区块链开发中,智能合约需要被编译成字节码才能部署和执行。Hardhat 提供了一个便捷的编译工具,可以将 Solidity 等高级语言编写的智能合约转换为以太坊虚拟机 (EVM) 可以理解的字节码。
要使用 Hardhat 编译你的智能合约,请在项目根目录下运行以下命令:
npx hardhat compile
npx
命令用于执行本地安装的 Hardhat 包。
hardhat compile
命令会读取
hardhat.config.js
配置文件,查找项目中的 Solidity 智能合约文件(通常位于
contracts/
目录下),并使用 Solidity 编译器 (Solc) 将它们编译成字节码和 ABI (Application Binary Interface) 文件。ABI 文件描述了合约的接口,包括函数名、参数类型和返回值类型,用于与合约进行交互。
编译成功后,编译生成的 artifacts(包括字节码和 ABI)通常会保存在
artifacts/
目录下,以供后续的部署和测试使用。编译过程中产生的任何错误或警告信息会显示在终端中,帮助开发者定位和解决问题。建议仔细检查编译输出,确保合约能够正确编译。
合约编译的意义与过程
执行
yarn hardhat compile
命令,是智能合约开发流程中的关键步骤,其作用是将使用 Solidity 等高级编程语言编写的合约源代码转换成以太坊虚拟机(EVM)可以理解和执行的字节码(bytecode)。这一过程类似于传统软件开发中的代码编译。
编译完成后,Hardhat 会将编译生成的合约 ABI (Application Binary Interface) 和 bytecode 存储在项目的
artifacts
目录下。ABI 相当于合约的接口说明,它定义了合约中可被外部调用的函数、参数类型、以及返回值类型等信息。应用程序或DApp通过 ABI 来与智能合约进行交互,就像使用API来调用软件库一样。 bytecode 则是合约的机器码,它会被部署到以太坊区块链上,并由EVM执行。
artifacts
目录的具体结构通常如下:每个合约对应一个子目录,子目录中包含
.
文件。该 JSON 文件包含合约的 ABI、bytecode、以及其他元数据,如编译时的优化设置、编译器版本等。在部署合约、与合约交互、或进行单元测试时,需要使用这些编译产物。例如,在部署合约时,需要将 bytecode 上传到区块链;在与合约交互时,需要使用 ABI 来构建交易数据。
部署智能合约
创建一个新的 JavaScript 文件,例如
scripts/deploy.js
,该文件将负责自动化智能合约的部署流程。在文件中,你需要引入必要的库,并编写部署逻辑。
scripts/deploy.js
示例代码:
const hre = require("hardhat");
async function main() {
// 获取合约工厂。 "Greeter" 需要替换为你实际的合约名称
const Greeter = await hre.ethers.getContractFactory("Greeter");
// 部署合约。构造函数参数 "Hello, Binance Smart Chain!" 可以根据你的合约构造函数进行修改
const greeter = await Greeter.deploy("Hello, Binance Smart Chain!");
// 等待合约被部署到区块链上
await greeter.deployed();
// 打印已部署合约的地址,这对于后续与合约交互至关重要
console.log("Greeter deployed to:", greeter.address);
}
// 使用 async/await 的推荐错误处理模式
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
这个脚本利用 Hardhat 提供的
ethers
插件,这是一个以太坊交互的库。它简化了合约实例的创建、合约的部署以及与已部署合约的交互。
getContractFactory
方法根据合约的 ABI 和字节码创建一个合约工厂,而
deploy
方法则负责将合约部署到区块链上。部署后,脚本会打印合约的地址,这个地址是后续与合约进行交互的唯一标识符。
运行部署脚本的命令如下:
npx hardhat run scripts/deploy.js --network bscTestnet
这里,
npx hardhat run
指示 Hardhat 运行指定的脚本。
scripts/deploy.js
是要执行的部署脚本的路径。
--network bscTestnet
指定了要将合约部署到的网络。请确保在
hardhat.config.js
文件中正确配置了
bscTestnet
网络,包括 URL 和私钥等信息。如果没有指定网络,Hardhat 将默认使用本地 Hardhat 网络。你需要安装Hardhat和相关依赖,在项目目录下运行:
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
。同时,建议安装prettier插件格式化代码:
npm install --save-dev prettier prettier-plugin-solidity
部署智能合约
使用以下命令通过 Yarn 和 Hardhat 在 BSC 测试网络上部署智能合约:
yarn hardhat run scripts/deploy.js --network bscTestnet
这条命令指示 Hardhat 运行
scripts/deploy.js
脚本,并将合约部署到
bscTestnet
网络。 请确保
hardhat.config.js
文件中已经正确配置了 BSC 测试网络的 RPC URL 和部署账户的私钥。
为了成功部署,你的部署账户需要持有少量 BNB,用于支付交易的 gas 费用。可以通过 BSC 测试网的水龙头获取测试 BNB。
成功执行部署脚本后,控制台将显示已部署智能合约的地址。 此地址对于后续与合约进行交互至关重要,请妥善保管。
与智能合约交互
与已部署的智能合约交互是区块链应用开发的关键环节。你可以使用多种工具和库来实现这一目标,包括Hardhat Console和ethers.js库。Hardhat Console提供了一个交互式的JavaScript环境,允许你直接调用合约函数、查询状态变量以及发送交易,非常适合快速测试和调试。ethers.js则是一个功能强大的JavaScript库,提供了更灵活和全面的API,支持与智能合约进行复杂交互,包括事件监听、交易签名、gas费用估算等。 使用Hardhat Console,你无需编写额外的代码,只需在终端中执行命令即可。例如,你可以获取合约实例,然后调用合约中的函数。而ethers.js则需要你在JavaScript代码中引入该库,并使用其提供的API与合约进行交互。 在与智能合约交互时,需要注意合约地址、ABI(Application Binary Interface)以及调用函数的参数。合约地址是合约在区块链上的唯一标识符,ABI定义了合约的接口,包括函数名称、参数类型和返回值类型。通过ABI,你可以知道如何正确地调用合约函数。 还需要考虑交易的gas费用。Gas费用是执行智能合约所需的计算资源的成本。你可以使用ethers.js估算gas费用,并设置合适的gasLimit和gasPrice,以确保交易能够成功执行。 与智能合约交互需要一定的技术知识和实践经验。通过熟练掌握Hardhat Console和ethers.js等工具,你可以更加高效地开发和测试区块链应用。
使用 Hardhat Console
Hardhat console 提供了一个交互式的 JavaScript REPL 环境,让你能够与你的智能合约和 Hardhat 运行时环境进行交互。 它允许你直接在终端中执行 JavaScript 代码,从而简化了合约的调试、测试和探索过程。 你可以使用 Hardhat console 来部署合约、调用合约函数、检查合约状态以及与区块链进行交互。使用console可以更方便的与链上交互。
运行 Hardhat console,你需要指定要连接的网络。 在下面的示例中,我们使用
--network bscTestnet
标志连接到币安智能链测试网。 请确保你的
hardhat.config.js
文件已经正确配置了
bscTestnet
网络。
npx hardhat console --network bscTestnet
在成功运行上述命令后,你将进入 Hardhat console 环境。 你可以像使用 Node.js 的 REPL 环境一样,直接输入 JavaScript 代码并执行。 Hardhat console 会自动注入一些常用的对象和函数,例如
ethers
、
hre
(Hardhat Runtime Environment) 和你的合约工厂,以便你能够方便地与智能合约进行交互。 例如,可以使用
ethers.getSigners()
获取账户,使用合约工厂部署合约,调用合约方法等。
与Hardhat Console交互
使用Hardhat Console与部署在测试网络(如bscTestnet)上的智能合约交互,可以使用以下命令启动控制台:
yarn hardhat console --network bscTestnet
该命令启动一个交互式JavaScript环境,允许你直接与部署在指定网络上的合约进行交互。确保你的Hardhat配置正确设置了bscTestnet网络,并且你已安装所有必要的依赖项。
在console中,你可以利用ethers.js库与合约互动。以下代码演示了如何连接到已部署的Greeter合约,并调用其方法:
const Greeter = await ethers.getContractFactory("Greeter");
const greeter = await Greeter.attach("YOUR_CONTRACT_ADDRESS"); // 将 YOUR_CONTRACT_ADDRESS 替换为你的合约地址
ethers.getContractFactory("Greeter")
用于获取Greeter合约的工厂实例。
Greeter.attach("YOUR_CONTRACT_ADDRESS")
使用合约地址创建一个 Greeter 合约实例,允许你与已部署的合约进行交互。 务必将 "YOUR_CONTRACT_ADDRESS" 替换为你实际部署的合约地址。 可以通过区块链浏览器或Hardhat部署脚本输出获得该地址。
一旦你创建了合约实例,就可以调用合约的方法。例如,以下代码调用
setGreeting
方法来更新greeting信息,并调用
greet
方法来获取更新后的greeting:
await greeter.setGreeting("Hello, world!");
console.log(await greeter.greet());
await greeter.setGreeting("Hello, world!")
向合约发送一个交易,将greeting设置为 "Hello, world!"。
console.log(await greeter.greet())
调用合约的
greet
方法,并将返回的greeting打印到控制台。 请注意,
setGreeting
方法需要花费Gas,因为它改变了区块链上的状态。
使用 Ethers.js
创建一个新的 JavaScript 文件,例如
scripts/interact.js
,该文件将作为你与智能合约交互的桥梁。 Ethers.js 库简化了与以太坊区块链的交互,使得发送交易、读取合约状态等操作变得更加容易。
scripts/interact.js
示例代码:
const { ethers } = require("ethers");
require('dotenv').config();
const BNB_TESTNET_RPC_URL = process.env.BNB_TESTNET_RPC_URL; // 从 .env 文件加载 BNB 测试网 RPC URL
const PRIVATE_KEY = process.env.PRIVATE_KEY; // 从 .env 文件加载你的私钥
const CONTRACT_ADDRESS = "YOUR_CONTRACT_ADDRESS"; // 将 YOUR_CONTRACT_ADDRESS 替换为你的合约地址
async function main() {
// 连接到 BNB 测试网
const provider = new ethers.providers.JsonRpcProvider(BNB_TESTNET_RPC_URL);
// 使用私钥和 provider 创建一个 wallet 实例
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
// 智能合约的 ABI (Application Binary Interface),定义了合约的接口
const abi = [
"function greet() public view returns (string memory)",
"function setGreeting(string memory _greeting) public"
];
// 创建一个合约实例
const greeter = new ethers.Contract(CONTRACT_ADDRESS, abi, wallet);
// 调用合约的 greet() 方法,读取当前的问候语
console.log("Current greeting:", await greeter.greet());
// 调用合约的 setGreeting() 方法,设置新的问候语
const tx = await greeter.setGreeting("Hello from Ethers.js!");
// 等待交易被确认
await tx.wait();
// 再次调用 greet() 方法,读取更新后的问候语
console.log("New greeting:", await greeter.greet());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
代码解释:
-
ethers
: Ethers.js 库的主要模块,提供了与以太坊交互所需的所有功能。 -
dotenv
: 用于从.env
文件加载环境变量,例如 RPC URL 和私钥。 确保安装 `dotenv`: `npm install dotenv`。 并且在项目根目录下创建 `.env` 文件, 并在该文件中配置你的环境变量, 例如: `BNB_TESTNET_RPC_URL=你的RPC_URL` `PRIVATE_KEY=你的私钥` -
BNB_TESTNET_RPC_URL
: 连接到 BNB 测试网的 RPC URL。 你可以使用公共的 RPC 节点,或者自己搭建一个。 -
PRIVATE_KEY
: 你的以太坊账户的私钥。 注意: 请勿在生产环境中使用明文私钥! 建议使用更安全的密钥管理方案。 -
CONTRACT_ADDRESS
: 你部署的智能合约的地址。 -
provider
: Ethers.js 中的 Provider 对象,用于与区块链进行通信。JsonRpcProvider
允许你通过 HTTP 连接到以太坊节点。 -
wallet
: Ethers.js 中的 Wallet 对象,代表一个以太坊账户。 它包含了你的私钥,并允许你签署交易。 -
abi
: Application Binary Interface, 定义了合约的函数和事件。 -
greeter
: Ethers.js 中的 Contract 对象, 代表一个部署在区块链上的智能合约。 它允许你调用合约的函数。 -
greet()
: 合约中定义的读取问候语的函数。 -
setGreeting(string memory _greeting)
: 合约中定义的设置问候语的函数。 -
tx.wait()
: 等待交易被矿工确认。
运行交互脚本之前,请确保已经安装了 Ethers.js 和 dotenv 库:
npm install ethers dotenv
运行交互脚本:
node scripts/interact.js
脚本首先会连接到 BNB 测试网, 然后使用你的私钥创建一个 Wallet 对象, 接着创建一个 Contract 对象, 最后调用合约的
greet()
和
setGreeting()
方法。 你应该能看到当前的问候语, 设置的新问候语, 以及更新后的问候语。
通过本教程,你已经学会了如何在币安智能链(BSC)上搭建开发环境、编写、编译、部署和交互智能合约。 这只是智能合约开发的开始。 你可以继续学习更高级的 Solidity 概念,例如继承、事件、库和安全最佳实践,以构建更复杂和强大的去中心化应用程序。