48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
import {ethers} from "ethers";
|
|
import {AbiURLCache} from "../common.js";
|
|
import {provider as walletProvider} from "@/blockchain/wallet.js";
|
|
|
|
export const abiCache = new AbiURLCache('/contract/out/')
|
|
|
|
|
|
export function vaultAddress( factory, vaultInitCodeHash, owner, num=0) {
|
|
if( !owner || !factory || !vaultInitCodeHash )
|
|
return null
|
|
const salt = ethers.solidityPackedKeccak256(['address','uint8'],[owner,num])
|
|
return ethers.getCreate2Address(factory, salt, vaultInitCodeHash)
|
|
}
|
|
|
|
|
|
export function contractOrNull(addr,abi,provider) {
|
|
try {
|
|
return new ethers.Contract(addr,abi,provider)
|
|
}
|
|
catch (e) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
export async function queryHelperContract(helper, provider) {
|
|
return newContract(helper, 'QueryHelper', provider)
|
|
}
|
|
|
|
|
|
// do not supply extensions with name or file: e.g.
|
|
// use newContract(addr, 'IVaultLogic', provider, 'IVault') to get the ABI from IVault.sol/IVaultLogic.json
|
|
export async function newContract(addr, name, provider) {
|
|
const abi = await abiCache.get(name)
|
|
return new ethers.Contract(addr, abi, provider)
|
|
}
|
|
|
|
|
|
export async function erc20Contract(addr, provider) {
|
|
return newContract(addr, 'IERC20Metadata', provider)
|
|
}
|
|
|
|
|
|
export async function vaultContract(addr, provider=null) {
|
|
if (provider===null)
|
|
provider = walletProvider
|
|
return await newContract(addr, 'IVault', provider)
|
|
}
|