67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
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) {
|
|
|
|
}
|
|
}
|
|
}
|