The web3.js library is a collection of modules which contain specific functionality for the ethereum ecosystem.
web3-eth
is for the ethereum blockchain and smart contractsweb3-shh
is for the whisper protocol to communicate p2p and broadcastweb3-bzz
is for the swarm protocol, the decentralized file storageweb3-utils
contains useful helper functions for Dapp developers.First you need to get web3.js into your project. This can be done using the following methods:
npm install web3
meteor add ethereum:web3
dist/web3.min.js
After that you need to create a web3 instance and set a provider.
Ethereum supported Browsers like Mist or MetaMask will have a ethereumProvider
or web3.currentProvider
available. For web3.js, check Web3.givenProvider
.
If this property is null
you should connect to a remote/local node.
… code-block:: javascript
// in node.js use: var Web3 = require('web3');
var web3 = new Web3(Web3.givenProvider || "ws://localhost:8546");
That’s it! now you can use the web3
object.
const Web3 = require('web3');
const Provider = require('@truffle/hdwallet-provider');
const MyContract = require('./build/contracts/MyContract.json');
const address = '';
const privateKey = '';
const infuraUrl = '';
//Hard way (web3#signTransaction() + web3#sendSignedTransaction())
const init1 = async () => {
const web3 = new Web3(infuraUrl);
const networkId = await web3.eth.net.getId();
const myContract = new web3.eth.Contract(
MyContract.abi,
MyContract.networks[networkId].address
);
const tx = myContract.methods.setData(1);
const gas = await tx.estimateGas({from: address});
const gasPrice = await web3.eth.getGasPrice();
const data = tx.encodeABI();
const nonce = await web3.eth.getTransactionCount(address);
const signedTx = await web3.eth.accounts.signTransaction(
{
to: myContract.options.address,
data,
gas,
gasPrice,
nonce,
chainId: networkId
},
privateKey
);
console.log(`Old data value: ${await myContract.methods.data().call()}`);
const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
console.log(`Transaction hash: ${receipt.transactionHash}`);
console.log(`New data value: ${await myContract.methods.data().call()}`);
}
//Slightly easier (web3#sendTransaction())
const init2 = async () => {
const web3 = new Web3(infuraUrl);
const networkId = await web3.eth.net.getId();
const myContract = new web3.eth.Contract(
MyContract.abi,
MyContract.networks[networkId].address
);
web3.eth.accounts.wallet.add(privateKey);
const tx = myContract.methods.setData(2);
const gas = await tx.estimateGas({from: address});
const gasPrice = await web3.eth.getGasPrice();
const data = tx.encodeABI();
const nonce = await web3.eth.getTransactionCount(address);
const txData = {
from: address,
to: myContract.options.address,
data: data,
gas,
gasPrice,
nonce,
chain: 'rinkeby',
hardfork: 'istanbul'
};
console.log(`Old data value: ${await myContract.methods.data().call()}`);
const receipt = await web3.eth.sendTransaction(txData);
console.log(`Transaction hash: ${receipt.transactionHash}`);
console.log(`New data value: ${await myContract.methods.data().call()}`);
}
//Easy way (Web3 + @truffle/hdwallet-provider)
const init3 = async () => {
const provider = new Provider(privateKey, 'https://rinkeby.infura.io/v3/74aa9a15e2524f6980edb8a377301f3c');
const web3 = new Web3(provider);
const networkId = await web3.eth.net.getId();
const myContract = new web3.eth.Contract(
MyContract.abi,
MyContract.networks[networkId].address
);
console.log(await myContract.methods.data().call());
console.log(`Old data value: ${await myContract.methods.data().call()}`);
const receipt = await myContract.methods.setData(3).send({ from: address });
console.log(`Transaction hash: ${receipt.transactionHash}`);
console.log(`New data value: ${await myContract.methods.data().call()}`);
}
init3();
Read more docs: https://web3js.readthedocs.io/en/v1.2.1/web3-eth.html#sendtransaction
#node #nodejs #web3 #eth #ethereum