web3.eth.contract.js
Interact with smart contracts on the blockchain
var Web3 = require('web3');
const { signTransaction } = require('../common');
const { TESTNET_RPC, ABI, CONTRACT_ADDRESS, BYTE_CODE } = require('../constants');
const web3 = new Web3(new Web3.providers.HttpProvider(TESTNET_RPC));
var myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS);
const firstMessage = 'Hello, Hardhat!';
let messageToUpdate = 'Hello, Hardhat again!';
const deploy = async () => {
let deployContract = new web3.eth.Contract(ABI);
// Function Parameter
let payload = {
data: BYTE_CODE,
arguments: ['Hello!']
};
const tx = await deployContract.deploy(payload);
signTransaction(tx);
};
const updateProperties = async () => {
web3.eth.defaultAccount = process.env.FROM_ADDRESS;
console.log('Setting the default account: ', web3.eth.defaultAccount);
let message = await myContract.methods.greet().call();
console.log('Using method.call() to get value: ', message);
messageToUpdate =
message === firstMessage ? 'Hello, Hardhat again!' : firstMessage;
console.log('Using method.send() to update the message');
const tx = await myContract.methods.setGreeting(messageToUpdate);
await signTransaction(tx, myContract, true);
console.log(`New data value: ${await myContract.methods.greet().call()}`);
};
const getEvents = async () => {
await myContract.getPastEvents(
'UpdateGreeting',
{
fromBlock: 0,
toBlock: 'latest'
},
function (error, events) {
if (error) {
console;
return;
}
for (i = 0; i < events.length; i++) {
var eventObj = events[i];
console.log('Event Blocknumber: ', eventObj.blockNumber);
console.log('Event Data: ' + eventObj.returnValues.greeting);
}
}
);
};
const batchRequest = async () => {
var myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS);
var batch = await new web3.BatchRequest();
batch.add(
web3.eth.getBalance.request(
process.env.FROM_ADDRESS,
'latest',
(error, result) => {
if (error) console.error(error);
else console.log('Result: ', web3.utils.fromWei(result, 'ether'));
}
)
);
batch.add(
myContract.methods
.greet()
.call.request({ from: process.env.FROM_ADDRESS }, (error, result) => {
if (error) console.error(error);
else console.log('Result: ', result);
})
);
batch.execute();
};
module.exports = { deploy, updateProperties, getEvents, batchRequest };
Last updated