Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have tried to deploy a SmartContract from web3.js node library, I am getting a transaction hash from it but how would I get the contract address after It's been mined by a miner?

like image 866
Abhishek Chudekar Avatar asked Oct 10 '18 11:10

Abhishek Chudekar


People also ask

How do I find my web3 wallet address?

You need to use requestAccounts and ask the permission from the user to access their wallet addresses. Due to privacy reasons, the website cannot do this by default. Also, you need to set up your Web3 properly with the wallet in the order it to work.

How do you deploy a contract in web3 JavaScript?

In order to deploy the contract, the bytecode of the contract is one of the send function arguments. Next, we also need to provide metadata for contract deployment. First of all, from: The account which will be used to deploy the contract. The account needs to have ether, in order to deploy the contract.


4 Answers

finally i got the answer

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() method wait till the end of block mining and returns the address of transaction(here contract address). This method is applicable if you don't want to use metamask to sign your transaction and broadcast to the network.

like image 146
Abhishek Chudekar Avatar answered Sep 29 '22 08:09

Abhishek Chudekar


Add .address after the object.

var contact = web3.eth.contract.new(abi,{from: web3.eth.accounts[0], data: bc});
console.log(contract.address); // Prints address
like image 41
Shane Fontaine Avatar answered Sep 29 '22 10:09

Shane Fontaine


This returns the contract address...

MyContract is the .json file in the build/contracts folder that is created by migration.

const netId = await web3.eth.net.getId();
const deployedNetwork = MyContract.networks[netId];


const contract = new web3.eth.Contract(
    MyContract.abi,
    deployedNetwork.address
);
like image 44
endroo Avatar answered Sep 29 '22 09:09

endroo


If you just want to get the smart contract by transaction hash which deployed the smart contract, you can use the the web3.eth.getTransactionReceipt fetches the receipt for a transaction hash. The receipt has a contactAddress field filled in if the transaction was a deployment. Check this out: https://github.com/ChainSafe/web3.js/issues/3515

like image 23
Et9 Avatar answered Sep 29 '22 08:09

Et9