我试图找出使用ethers.js部署合同的最佳方法
有了web3,我就可以做到:
const contractInstance = new this.web3.eth.Contract(contractObject.abi)
var deployTx
debug(contractInstance)
if (params === undefined || params.length === 0) {
deployTx = contractInstance.deploy({
data: contractObject.bytecode
})
} else {
deployTx = contractInstance.deploy({
data: contractObject.bytecode,
arguments: params
})
}
const data = await deployTx.encodeABI()然而,对于Web 3,我似乎也需要一个地址?要获得这个地址,我必须首先手动部署它。澄清一下这个话题确实会有帮助。
我试图找到具体说明这一点的资源,但它们不是我想要的吗?
提前感谢
发布于 2020-06-29 21:15:56
您可以使用Ethers.js‘ContractFactory部署合同。
import { ContractFactory } from 'ethers';
const factory = new ContractFactory(contractAbi, contractByteCode);
// If your contract requires constructor args, you can specify them here
const contract = await factory.deploy(deployArgs);
console.log(contract.address);
console.log(contract.deployTransaction);更多信息可以在文档中找到,在这里可以找到:https://docs.ethers.io/v5/api/contract/contract-factory/
发布于 2021-12-28 18:35:45
为了进一步阐述马滕的回答,我将试着给出一个完整的剧本。假设您安装了元问询并知道种子短语,下面是使用“醚”和“fs”部署契约的步骤:
例如,这里我使用了'getblock‘作为web3提供程序(参见https://getblock.io/docs/get-started/auth-with-api-key/)。其他的替代品有“快速节点”、“炼金术”和“呋喃”。
用于合同部署的nodejs脚本位于以下位置:
//load 'ethers' and 'fs'
const ethers = require('ethers');
const fs = require('fs');
//Read bin and abi file to object; names of the solcjs-generated files renamed
bytecode = fs.readFileSync('storage.bin').toString();
abi = JSON.parse(fs.readFileSync('storage.abi').toString());
//to create 'signer' object;here 'account'
const mnemonic = "<see-phrase>" // seed phrase for your Metamask account
const provider = new ethers.providers.WebSocketProvider("wss://bsc.getblock.io/testnet/?api_key=<your-api-key>");
const wallet = ethers.Wallet.fromMnemonic(mnemonic);
const account = wallet.connect(provider);
const myContract = new ethers.ContractFactory(abi, bytecode, account);
//Ussing async-await for deploy method
async function main() {
// If your contract requires constructor args, you can specify them here
const contract = await myContract.deploy();
console.log(contract.address);
console.log(contract.deployTransaction);
}
main();在上面的代码'account‘中是醚的docs https://docs.ethers.io/v5/api/contract/contract-factory/#ContractFactory--creating
ethers.ContractFactory( interface , bytecode [ , signer ] )请问一下是否仍有问题。
https://ethereum.stackexchange.com/questions/84637
复制相似问题