6. Interact with the contract - Call

Last updated

Last updated
//Import hardhat and swisstronikJS functions
const hre = require("hardhat");
const { encryptDataField, decryptNodeResponse } = require("@swisstronik/utils");/**
* Send a shielded query/call to the Swisstronik blockchain.
*
* @param {object} provider - The provider object for making the call.
* @param {string} destination - The address of the contract to call.
* @param {string} data - Encoded data for the function call.
*
* @returns {Uint8Array} - Encrypted response from the blockchain.
*/
const sendShieldedQuery = async (provider, destination, data) => {
// Get the RPC link from the network configuration
const rpclink = hre.network.config.url;
// Encrypt the call data using the SwisstronikJS function encryptDataField()
const [encryptedData, usedEncryptedKey] = await encryptDataField(rpclink, data);
// Execute the call/query using the provider
const response = await provider.call({
to: destination,
data: encryptedData,
});
// Decrypt the call result using SwisstronikJS function decryptNodeResponse()
return await decryptNodeResponse(rpclink, response, usedEncryptedKey);
};async function main() {
// Address of the deployed contract
const contractAddress = "0xf84Df872D385997aBc28E3f07A2E3cd707c9698a";
// Get the signer (your account)
const [signer] = await hre.ethers.getSigners();
// Construct a contract instance (must match the name of contract)
const contractFactory = await hre.ethers.getContractFactory("Swisstronik");
const contract = contractFactory.attach(contractAddress);
// Send a shielded query to retrieve data from the contract
const functionName = "getMessage";
const responseMessage = await sendShieldedQuery(signer.provider, contractAddress, contract.interface.encodeFunctionData(functionName));
// Decode the Uint8Array response into a readable string
console.log("Decoded response:", contract.interface.decodeFunctionResult(functionName, responseMessage)[0]);
}main().catch((error) => {
console.error(error);
process.exitCode = 1;
});const hre = require("hardhat");
const { encryptDataField, decryptNodeResponse } = require("@swisstronik/utils");
const sendShieldedQuery = async (provider, destination, data) => {
const rpclink = hre.network.config.url;
const [encryptedData, usedEncryptedKey] = await encryptDataField(rpclink, data);
const response = await provider.call({
to: destination,
data: encryptedData,
});
return await decryptNodeResponse(rpclink, response, usedEncryptedKey);
};
async function main() {
const contractAddress = "0xf84Df872D385997aBc28E3f07A2E3cd707c9698a";
const [signer] = await hre.ethers.getSigners();
const contractFactory = await hre.ethers.getContractFactory("Swisstronik");
const contract = contractFactory.attach(contractAddress);
const functionName = "getMessage";
const responseMessage = await sendShieldedQuery(signer.provider, contractAddress, contract.interface.encodeFunctionData(functionName));
console.log("Decoded response:", contract.interface.decodeFunctionResult(functionName, responseMessage)[0]);
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});