import {ethers, keccak256} from "ethers"; import {getAbi} from "./abi.js"; import {getSigner} from "./blockchain.js"; import {vaults} from './cache.js'; // Vault // address owner // balances { tokenAddress: amount } // recentOrders [] const deployerAbi = await getAbi('Factory'); export function vaultAddress(chainId, ownerAddress, num=0) { const encoded = ethers.AbiCoder.defaultAbiCoder().encode(['address','uint8'], [ownerAddress,num]) const salt = ethers.keccak256(encoded) return ethers.getCreate2Address(getDeployerAddress(chainId), salt, VAULT_INIT_CODE_HASH) } export async function loginAddress(socket, chainId, address) { // todo send known tokens if (await vaults.contains(chainId,address)) { // todo send welcome with basic info and extra tokens socket.send('welcome',{}) } } export async function ensureVault(chainId, owner, num) { const address = vaultAddress(chainId, owner, num) if (!await vaults.contains(chainId,address)) await createVault(chainId, owner, num) } async function createVault(chainId, owner, num) { // todo create vault request for backend to pick up const deployer = new ethers.Contract(factoryAddresses[chainId], deployerAbi, getSigner(chainId)) await deployer.deployVault(owner, num) } export async function watchVaultCreated(provider, db, event) { console.log(`vault created`, event) } export async function watchErc20Transfer(provider, db, event) { console.log('Transfer', event) const [from, to, amount] = event.args let vault = vaults[from] let delta = 0 if (vault !== undefined) delta = -amount else { vault = vaults[to] if (vault !== undefined) delta = amount } if (vault) { let oldBalance = vault.balances[event.address] if (oldBalance === undefined) { } } }