“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情”
通过前面的过程了解了区块链,WEB3,智能合约部署之后。今天我们要用程序去调用执行合约。
第 1 步:创建一个 interact.js 文件
这是我们将编写交互脚本的文件。 我们将使用您之前在第 1 部分中安装的 Ethers.js 库。
在自己的编程目录中,创建一个名为/interact.js 新文件:
// interact.js
const API_KEY = process.env.API_KEY;
const PRIVATE_KEY = process.env.PRIVATE_KEY;
const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS;
第 2 步:更新您的 .env 文件
我将这些重要的文件配置在环境变量中,因此我们需要在 .env 文件中定义它们并确保执行时加载这些变量。
我们需要为我们的 Alchemy
API_KEY 以及
CONTRACT_ADDRESS
您的智能合约的部署位置添加一个定义。
您的.env
文件应如下所示:(API_KEY,PRIVATE_KEY)在我们第二天的教程里找。
# .env
API_URL = "https://eth-goerli.alchemyapi.io/v2/"
API_KEY = ""
PRIVATE_KEY = ""
CONTRACT_ADDRESS = "0x"
第 3 步:获取合约的ABI
在昨天的教程里找到。remix contract/artifacts/HelloWorld.json 里面的abi 部分copy出来 作为HelloWorld合约客户端调用的 abi 文件。存为心的文件 HelloWorld.json
const contract = require("./build/contracts/HelloWorld.json");
如果你想在控制台看到,可以把它打印出来。
console.log(JSON.stringify(contract.abi));
第 4 步:创建合约实例
为了与合约交互,我们需要在我们的代码中创建它的一个实例。
要使用 Ethers.js 做到这一点,我们需要使用三个概念:
-
Provider - 这是一个节点提供者,可让您对区块链进行读写访问。
-
Signer - 这代表一个能够签署交易的以太坊账户。
-
Contract - 这是一个 Ethers.js 对象,代表部署在链上的特定合约。
我们就用上一步中的合约 ABI 来创建我们的合约实例:
// interact.js
// Provider
const alchemyProvider = new ethers.providers.AlchemyProvider(network="goerli", API_KEY);
// Signer
const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider);
// Contract
const helloWorldContract = new ethers.Contract(CONTRACT_ADDRESS, contract.abi, signer);
你也可以在Ethers.js 文档中阅读有关提供者、签名者和合同的更多信息。
第 5 步:阅读初始化消息
还记得我们不熟好的的合约吗?
我们现在将读取存储在我们的智能合约中的消息并将其打印到控制台。
`initMessage = "Hello world!",
`
在 JavaScript 中,我们使用异步函数与网络交互。
// interact.js
// ...
async function main() {
const message = await helloWorldContract.message();
console.log("The message is: " + message);
}
main();
在终端中使用运行文件后,我们应该会看到以下响应:node ./scripts/interact.js
The message is: Hello world!
恭喜!
你 已经成功的从以太坊区块链读取了智能合约数据.
第六日【完】