为了账号安全,请及时绑定邮箱和手机立即绑定

如何在同一个javascript程序中部署和获取智能合约的地址

如何在同一个javascript程序中部署和获取智能合约的地址

MM们 2021-12-23 15:04:15
我想部署一个智能合约(在 .json 文件中提供)并需要它的地址(在 testnet 区块链上),然后尝试向它发送一些交易。所有这些都应该通过javascript来完成。这是我尝试部署但无法运行的代码。另外,我很困惑为什么在这里我们没有在部署合同期间使用我们的私钥进行签名。 更新代码:var Tx = require('ethereumjs-tx').Transactionconst Web3 = require('web3');const provider = new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/7f....90b30dd22f0");const web3 = new Web3(provider);const account1 = '0xd458d3B03A3D4025Ae3DD5a3358afDa832c7507e' const privateKey1 = Buffer.from('8005F9FE6F1......','hex')var compiledContract = require('./build/MyContract.json');// bytecode ="0x"+ compiledContract.bytecode;//  abi = compiledContract.abi;// console.log(web3.eth.accounts.create());(async () => {    const deployedContract = await new web3.eth.Contract(compiledContract.abi)        .deploy({            data: '0x' + compiledContract.bytecode,            arguments: [account1]        })        .send({            from: account1,            gas: '2000000'        });    console.log(        `Contract deployed at address: ${deployedContract.options.address}`    );这是我的输出:    (async () => {    ^    TypeError: Buffer.from(...) is not a function        at Object.<anonymous> (C:\Users\aa\MyProject\deploy.js:62:1)        at Module._compile (internal/modules/cjs/loader.js:778:30)        at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)        at Module.load (internal/modules/cjs/loader.js:653:32)        at tryModuleLoad (internal/modules/cjs/loader.js:593:12)        at Function.Module._load (internal/modules/cjs/loader.js:585:3)        at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)        at startup (internal/bootstrap/node.js:283:19)        at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)我也试过这个代码(async () => {const contract = new web3.eth.Contract(compiledContract.abi);const params = {    data: '0x' + compiledContract.bytecode,    arguments: [account1]};
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

我可以看到您指的是 web3js 文档。该文档是为使用本地节点的人制作的。当您使用 Infura 作为提供者时,当您需要从您的帐户进行交易时,您将面临问题。正如您所说,您不需要使用私钥,那是因为这里的部署功能假定帐户已经解锁。您应该参考“ https://infura.io/docs ”,了解在将 web3js 库与 infura 作为提供者一起使用时需要进行的更改。此外,您必须使用私钥来签署交易(即从您的账户支付gas费用)


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 386 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号