首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ether.js部署合同

如何使用ether.js部署合同
EN

Ethereum用户
提问于 2020-06-29 19:28:43
回答 2查看 19.3K关注 0票数 14

我试图找出使用ethers.js部署合同的最佳方法

有了web3,我就可以做到:

代码语言:javascript
复制
     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,我似乎也需要一个地址?要获得这个地址,我必须首先手动部署它。澄清一下这个话题确实会有帮助。

我试图找到具体说明这一点的资源,但它们不是我想要的吗?

提前感谢

EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-06-29 21:15:56

您可以使用Ethers.js‘ContractFactory部署合同。

代码语言:javascript
复制
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/

票数 12
EN

Ethereum用户

发布于 2021-12-28 18:35:45

为了进一步阐述马滕的回答,我将试着给出一个完整的剧本。假设您安装了元问询并知道种子短语,下面是使用“醚”和“fs”部署契约的步骤:

  1. 将合同编译为.bin和.abi文件
  2. 装载‘醚’和'fs‘
  3. 使用“provider”、“Wallet”和“connect”方法从“以太”创建一个“签名者”对象
  4. 从'ContractFactory‘方法创建契约实例
  5. 使用部署方法作为承诺

例如,这里我使用了'getblock‘作为web3提供程序(参见https://getblock.io/docs/get-started/auth-with-api-key/)。其他的替代品有“快速节点”、“炼金术”和“呋喃”。

用于合同部署的nodejs脚本位于以下位置:

代码语言:javascript
复制
//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

代码语言:javascript
复制
ethers.ContractFactory( interface , bytecode [ , signer ] )

请问一下是否仍有问题。

票数 6
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/84637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档