import {readFile} from './misc.js' import {ethers} from "ethers"; const ABI_BASE_PATH = '../contract/out' export const erc20Abi = [ 'function name() view returns (string)', 'function symbol() view returns (string)', 'function decimals() view returns (uint8)', 'function totalSupply() view returns (uint256)', 'function balanceOf(address) view returns (uint256)', 'function transfer(address,uint256) returns (bool)', 'function transferFrom(address,address,uint256) returns (bool)', 'function approve(address,uint256) returns (bool success)', 'function allowance(address,address) view returns (uint256)', 'event Transfer(address indexed,address indexed,uint256)', 'event Approval(address indexed,address indexed,uint256)', ] const factoryAbi = [ 'function deployVault(address owner) returns (address vault)', 'event VaultCreated( address deployer, address owner )', ] export const abi = { 'ERC20': erc20Abi, 'Factory': factoryAbi, } export async function getAbi(className) { let found = abi[className] if (found === undefined) { console.log('warning: loading ABI from filesystem for '+className) const data = await readFile(ABI_BASE_PATH + `/${className}.sol/${className}.json`) found = JSON.parse(data.toString())['abi'] abi[className] = found } return found } export async function getInterface(className) { return new ethers.Interface(await getAbi(className)) }