mirror of
https://github.com/3lLobo/zkAuth.git
synced 2026-01-22 18:57:58 -05:00
71 lines
2.7 KiB
TypeScript
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]
|
|
} |