使用 web3.js 部署时如何获取智能合约地址
How to get Smart Contract address when it is deployed with web3.js
我已尝试从 web3.js 节点库部署智能合约,我从中获取了交易哈希值,但在它被矿工开采后如何获取合约地址?
在对象后添加.address
。
var contact = web3.eth.contract.new(abi,{from: web3.eth.accounts[0], data: bc});
console.log(contract.address); // Prints address
终于找到答案了
var Tx=require('ethereumjs-tx')
const Web3=require('web3')
const web3 = new Web3('https://rinkeby.infura.io/xxxxxxxxxxxxxxxxxx')
const account1='0xf2b6xxxxxxxxxxxxxxxxxxx83e9d52d934e5c'
const privateKey1=Buffer.from('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','hex')
web3.eth.getTransactionCount(account1,(err,txCount)=>{
//smart contract data
const data = 'your data here'
//create transaction object
const txObject={
nonce:web3.utils.toHex(txCount),
gasLimit:web3.utils.toHex(1000000),
gasPrice:web3.utils.toHex(web3.utils.toWei('10','gwei')),
data: data
}
//sign the transaction
const tx = new Tx(txObject)
tx.sign(privateKey1)
const serializedTx = tx.serialize()
const raw='0x'+serializedTx.toString('hex')
//broadcast the transaction
web3.eth.sendSignedTransaction(raw,(err,txHash)=>{
console.log('err : ',err,'txHash : ',txHash)
//use this hash to find smartcontract on etherscan
}).on('receipt', console.log,);
})
.on() 方法等到块挖掘结束和 returns 交易地址(这里是合约地址)。如果您不想使用元掩码来签署您的交易并向网络广播,则此方法适用。
这个returns合约地址...
MyContract
是 build/contracts
文件夹中由迁移创建的 .json 文件。
const netId = await web3.eth.net.getId();
const deployedNetwork = MyContract.networks[netId];
const contract = new web3.eth.Contract(
MyContract.abi,
deployedNetwork.address
);
如果您只想通过部署智能合约的交易哈希获取智能合约,您可以使用web3.eth.getTransactionReceipt获取交易哈希的收据。如果事务是部署,则收据有一个 contactAddress 字段。
看看这个:https://github.com/ChainSafe/web3.js/issues/3515
我已尝试从 web3.js 节点库部署智能合约,我从中获取了交易哈希值,但在它被矿工开采后如何获取合约地址?
在对象后添加.address
。
var contact = web3.eth.contract.new(abi,{from: web3.eth.accounts[0], data: bc});
console.log(contract.address); // Prints address
终于找到答案了
var Tx=require('ethereumjs-tx')
const Web3=require('web3')
const web3 = new Web3('https://rinkeby.infura.io/xxxxxxxxxxxxxxxxxx')
const account1='0xf2b6xxxxxxxxxxxxxxxxxxx83e9d52d934e5c'
const privateKey1=Buffer.from('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','hex')
web3.eth.getTransactionCount(account1,(err,txCount)=>{
//smart contract data
const data = 'your data here'
//create transaction object
const txObject={
nonce:web3.utils.toHex(txCount),
gasLimit:web3.utils.toHex(1000000),
gasPrice:web3.utils.toHex(web3.utils.toWei('10','gwei')),
data: data
}
//sign the transaction
const tx = new Tx(txObject)
tx.sign(privateKey1)
const serializedTx = tx.serialize()
const raw='0x'+serializedTx.toString('hex')
//broadcast the transaction
web3.eth.sendSignedTransaction(raw,(err,txHash)=>{
console.log('err : ',err,'txHash : ',txHash)
//use this hash to find smartcontract on etherscan
}).on('receipt', console.log,);
})
.on() 方法等到块挖掘结束和 returns 交易地址(这里是合约地址)。如果您不想使用元掩码来签署您的交易并向网络广播,则此方法适用。
这个returns合约地址...
MyContract
是 build/contracts
文件夹中由迁移创建的 .json 文件。
const netId = await web3.eth.net.getId();
const deployedNetwork = MyContract.networks[netId];
const contract = new web3.eth.Contract(
MyContract.abi,
deployedNetwork.address
);
如果您只想通过部署智能合约的交易哈希获取智能合约,您可以使用web3.eth.getTransactionReceipt获取交易哈希的收据。如果事务是部署,则收据有一个 contactAddress 字段。 看看这个:https://github.com/ChainSafe/web3.js/issues/3515