const { createInstance } = require("fhevmjs");
const { Wallet, JsonRpcProvider, Contract } = require("ethers");
const contractInfo = require("./EncryptedERC20.json");
const CONTRACT_ADDRESS = "0x309cf2aae85ad8a1db70ca88cfd4225bf17a7482";
const provider = new JsonRpcProvider(`https://devnet.zama.ai/`);
const signer = new Wallet("0x92293977156de6e03b20b26708cb4496b523116190b5c32d77cee8286d0c41f6", provider);
let _instance;
const getInstance = async () => {
if (_instance) return _instance;
// 1. Get chain id
const network = await provider.getNetwork();
const chainId = +network.chainId.toString(); // Need to be a number
// Get blockchain public key
const publicKey = await provider.call({
to: "0x0000000000000000000000000000000000000044",
});
// Create instance
_instance = createInstance({ chainId, publicKey });
return _instance;
};
const transfer = async (to, amount) => {
// Initialize contract with ethers
const contract = new Contract(CONTRACT_ADDRESS, contractInfo.abi, signer);
// Get instance to encrypt amount parameter
const instance = await getInstance();
const encryptedAmount = instance.encrypt32(amount);
const transaction = await contract["transfer(address,bytes)"](to, encryptedAmount);
return transaction;
};
transfer("0xa83a498Eee26f9594E3A784f204e507a5Fae3210", 10);