Files
zkAuth/dapp/helpers/contract.tsx
2022-09-23 13:59:23 +05:30

71 lines
2.7 KiB
TypeScript

import { ethers } from "ethers";
import address from '../artifacts/address.json';
import ZkWallet from '../artifacts/ZkSocialRecoveryWallet.json';
import ZkWalletFactory from '../artifacts/ZkWalletFactory.json';
import { generateCalldata } from '../circuit_js/generate_calldata.js';
let factory: ethers.Contract;
let zkWallet: ethers.Contract;
export async function connectContract(addr: string) {
const { ethereum } = window;
let provider = new ethers.providers.Web3Provider(ethereum);
let signer = provider.getSigner();
console.log('signer: ', await signer.getAddress());
zkWallet = new ethers.Contract(addr, ZkWallet.abi, signer);
console.log("Connect to ZkWalletAddress Contract:", addr);
}
export async function connectZkWalletFactory() {
const { ethereum } = window;
let provider = new ethers.providers.Web3Provider(ethereum);
let signer = provider.getSigner();
console.log('signer: ', await signer.getAddress());
factory = new ethers.Contract(address['ZkWalletFactory'], ZkWalletFactory.abi, signer);
console.log("Connect to ZkWalletFactory Contract:", ZkWalletFactory);
}
export async function deployZkWallet(ownerPasswordHash: BigInt, trustees: string[], passwordHashes: BigInt[], thresholdForRecovery: number, root: BigInt) {
await connectZkWalletFactory();
let txn = await factory.deployWallet(address["HashCheckVerfier"], ownerPasswordHash, trustees, passwordHashes, thresholdForRecovery, root, address["OtpMerkleTreeVerifier"]);
let rc = await txn.wait()
let newWalletAddress = txn.events[0].args.walletAddress;
localStorage.setItem("ZkWalletAddress", newWalletAddress);
return newWalletAddress;
}
export async function hashCheckGenerateCalldata(input: Object) {
if (localStorage.getItem('ZkWalletAddress')) {
console.log(localStorage.getItem('ZkWalletAddress'));
await connectContract(localStorage.getItem('ZkWalletAddress')!);
} else {
throw new Error("No zkWallet contract address found. Deploy first.");
}
let calldata = await generateCalldata(input, 'hash_check');
return calldata;
//a: calldata[0], b: calldata[1], c: calldata[2], Input: calldata[3]
}
export async function otpVerificationGenerateCalldata(input: Object) {
if (localStorage.getItem('ZkWalletAddress')) {
console.log(localStorage.getItem('ZkWalletAddress'));
await connectContract(localStorage.getItem('ZkWalletAddress')!);
} else {
throw new Error("No zkWallet contract address found. Deploy first.");
}
let calldata = await generateCalldata(input, 'otp_verification');
return calldata;
//a: calldata[0], b: calldata[1], c: calldata[2], Input: calldata[3]
}