乐闻世界logo
搜索文章和话题

How to get Smart Contract address when it is deployed with web3.js

2 个月前提问
2 个月前修改
浏览次数23

1个答案

1

在部署智能合约时获取合约地址是一个重要的步骤,因为这个地址是与部署后的智能合约进行交互的关键。以下是使用Web3.js来获取智能合约地址的步骤:

1. 准备工作

确保你已经安装了Node.js和npm,并且通过npm安装了Web3.js。同时,你需要有一个Ethereum节点可以连接,这可以是本地的Ganache,也可以是Infura等远程节点。

2. 编写智能合约

首先,你需要有一个已经编写好的智能合约。例如,一个简单的存储合约:

solidity
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } }

3. 编译智能合约

使用Solidity编译器(solc)编译智能合约,获取ABI和字节码。这可以通过命令行工具或使用Remix等IDE完成。

4. 使用Web3.js部署合约

编写JavaScript代码来部署智能合约,并获取合约地址。以下是一个示例脚本:

javascript
const Web3 = require('web3'); const { abi, evm } = require('./SimpleStorage.json'); // 导入合约的ABI和字节码 const web3 = new Web3('http://localhost:8545'); // 连接到Ethereum节点 const deployContract = async () => { const accounts = await web3.eth.getAccounts(); // 获取账户 const result = await new web3.eth.Contract(abi) .deploy({ data: evm.bytecode.object }) .send({ from: accounts[0], gas: '1000000' }); console.log('Contract deployed to:', result.options.address); }; deployContract();

在这个脚本中,我们首先导入了智能合约的ABI和字节码。然后连接到本地的Ethereum节点,并使用第一个账户部署合约。deploy方法用于初始化合约部署,send方法实际将合约发送到网络,并等待部署完成。部署完成后,我们可以通过result.options.address获取部署的合约地址。

5. 验证和交互

部署后,你可以使用返回的合约地址来与合约进行交互,例如调用合约函数等。

这是一个基本的流程,实际操作时可能需要处理更多细节,例如网络连接的选择、交易的确认等。希望这个例子能够帮助你了解在使用Web3.js时如何获取智能合约的地址。

2024年7月23日 16:20 回复

你的答案