From bfbdc672a29d3c00061edeb80aa85c85b5c61aef Mon Sep 17 00:00:00 2001 From: 0xTARC <0xtarc@protonmail.com> Date: Mon, 31 Oct 2022 19:31:15 -0600 Subject: [PATCH 1/9] [sdk-full-typescript-support] make index fully typescript compliant. tests are failing tho --- src/{index.js => index.ts} | 14 +++++++++++--- test/test.js | 1 + tsconfig.json | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) rename src/{index.js => index.ts} (98%) diff --git a/src/index.js b/src/index.ts similarity index 98% rename from src/index.js rename to src/index.ts index 9027e24..65cba5e 100644 --- a/src/index.js +++ b/src/index.ts @@ -89,6 +89,13 @@ export * from './queries'; // all number values are generally expected as ethers.BigNumber unless they come from the subgraph directly export class FIAT { + signer; + provider; + ethcallProvider; + gasMultiplier; + subgraphUrl; + addresses; + metadata; constructor(signer, provider, chainId, opts) { // supported networks: 1 - Mainnet, 5 - Goerli, 1337 - Ganache @@ -133,7 +140,7 @@ export class FIAT { #getContract(artifact, address) { const contract = new ethers.ContractFactory(artifact.abi, artifact.bytecode, this.signer).attach(address); - contract.abi = artifact.abi; + // contract.abi = artifact.abi; return contract; } @@ -192,7 +199,8 @@ export class FIAT { let txOpts = txRequest[txRequest.length - 1]; if (txOpts && Object.getPrototypeOf(txOpts) === Object.prototype) { if (txOpts.from) contract = contract.connect(new ethers.VoidSigner(txOpts.from, this.provider)); - delete txRequest.splice([txRequest.length - 1], 1); + // TODO: do we need this? seems like it's not doing anything + // delete txRequest.splice([txRequest.length - 1], 1); } else { txOpts = {}; } @@ -365,7 +373,7 @@ export class FIAT { } // collateralTypesFilter: [{ vault: Address, tokenId: Number }] - async fetchCollateralTypesAndPrices(collateralTypesFilter) { + async fetchCollateralTypesAndPrices(collateralTypesFilter: Array) { const collateralTypes = (collateralTypesFilter && collateralTypesFilter.length) ? collateralTypesFilter : Object.keys(this.metadata).reduce((collateralTypes_, vault) => ( diff --git a/test/test.js b/test/test.js index e30275e..36b396b 100644 --- a/test/test.js +++ b/test/test.js @@ -142,6 +142,7 @@ describe('FIAT', () => { }); test('multicall', async () => { + console.log('contract codex') const results = await fiat.multicall([ { contract: contracts.codex, method: 'globalDebt', args: [] }, { contract: contracts.codex, method: 'globalUnbackedDebt', args: [] }, diff --git a/tsconfig.json b/tsconfig.json index 3282e21..d993fea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,10 @@ "declarationDir": "lib", "allowJs": true, "pretty": true, - "target": "es5" + "target": "es2015", + "resolveJsonModule": true, + "moduleResolution": "node", + "esModuleInterop": true }, "include": ["./src/**/*"], "exclude": [ From 11f90f68875c65f2adeb7fb001e9123179e1a30e Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 16:49:44 -0500 Subject: [PATCH 2/9] Fix abi usage --- src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 65cba5e..28c3b24 100644 --- a/src/index.ts +++ b/src/index.ts @@ -140,7 +140,6 @@ export class FIAT { #getContract(artifact, address) { const contract = new ethers.ContractFactory(artifact.abi, artifact.bytecode, this.signer).attach(address); - // contract.abi = artifact.abi; return contract; } @@ -184,7 +183,7 @@ export class FIAT { async multicall(calls) { const multicall = calls.map(({ contract, method, args }) => { - return (new EthCallContract(contract.address, contract.abi))[method](...args); + return (new EthCallContract(contract.address, contract.interface.fragments))[method](...args); }); return await this.ethcallProvider.all(multicall); } From 26d6752e564f796f0958beb2332bdbe1b68868c0 Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 16:50:25 -0500 Subject: [PATCH 3/9] Update splice call, fix unit tests --- src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 28c3b24..ad6956d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -198,8 +198,7 @@ export class FIAT { let txOpts = txRequest[txRequest.length - 1]; if (txOpts && Object.getPrototypeOf(txOpts) === Object.prototype) { if (txOpts.from) contract = contract.connect(new ethers.VoidSigner(txOpts.from, this.provider)); - // TODO: do we need this? seems like it's not doing anything - // delete txRequest.splice([txRequest.length - 1], 1); + txRequest.splice(-1, 1); } else { txOpts = {}; } From 12a4cc757fd91f6a9a232cfaaf42961159d0fd94 Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 18:12:07 -0500 Subject: [PATCH 4/9] Add type CollateralTypesFilter --- src/index.ts | 5 +++-- src/types.ts | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/types.ts diff --git a/src/index.ts b/src/index.ts index ad6956d..8bd60de 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,6 +24,7 @@ import Publican from 'changelog/abis/Publican.sol/Publican.json'; import VaultEPTActions from 'changelog/abis/VaultEPTActions.sol/VaultEPTActions.json'; import VaultFCActions from 'changelog/abis/VaultFCActions.sol/VaultFCActions.json'; import VaultFYActions from 'changelog/abis/VaultFYActions.sol/VaultFYActions.json'; +import { CollateralTypesFilter } from './types'; import { SUBGRAPH_URL_MAINNET, SUBGRAPH_URL_GOERLI, queryCollateralTypes, queryUser, queryUserProxies @@ -296,7 +297,7 @@ export class FIAT { } // collateralTypesFilter: [{ vault: Address, tokenId: Number }] - async fetchCollateralTypes(collateralTypesFilter) { + async fetchCollateralTypes(collateralTypesFilter: CollateralTypesFilter) { const graphData = await this.query( queryCollateralTypes, (collateralTypesFilter && collateralTypesFilter.length !== 0) @@ -371,7 +372,7 @@ export class FIAT { } // collateralTypesFilter: [{ vault: Address, tokenId: Number }] - async fetchCollateralTypesAndPrices(collateralTypesFilter: Array) { + async fetchCollateralTypesAndPrices(collateralTypesFilter: CollateralTypesFilter) { const collateralTypes = (collateralTypesFilter && collateralTypesFilter.length) ? collateralTypesFilter : Object.keys(this.metadata).reduce((collateralTypes_, vault) => ( diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..000e260 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,4 @@ +export type CollateralTypesFilter = Array<{ + vault: string; + tokenId: number; +}>; \ No newline at end of file From 3faa1258722017268f8a3594e5e203157b2ef6aa Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 18:37:51 -0500 Subject: [PATCH 5/9] Types for fetchCollateralTypes --- src/index.ts | 6 +-- src/types.ts | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8bd60de..f78d193 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,7 +24,7 @@ import Publican from 'changelog/abis/Publican.sol/Publican.json'; import VaultEPTActions from 'changelog/abis/VaultEPTActions.sol/VaultEPTActions.json'; import VaultFCActions from 'changelog/abis/VaultFCActions.sol/VaultFCActions.json'; import VaultFYActions from 'changelog/abis/VaultFYActions.sol/VaultFYActions.json'; -import { CollateralTypesFilter } from './types'; +import { CollateralTypes, CollateralType, CollateralTypesFilter } from './types'; import { SUBGRAPH_URL_MAINNET, SUBGRAPH_URL_GOERLI, queryCollateralTypes, queryUser, queryUserProxies @@ -297,7 +297,7 @@ export class FIAT { } // collateralTypesFilter: [{ vault: Address, tokenId: Number }] - async fetchCollateralTypes(collateralTypesFilter: CollateralTypesFilter) { + async fetchCollateralTypes(collateralTypesFilter: CollateralTypesFilter) : Promise { const graphData = await this.query( queryCollateralTypes, (collateralTypesFilter && collateralTypesFilter.length !== 0) @@ -367,7 +367,7 @@ export class FIAT { discountRate: (collateralType.discountRate) ? ethers.BigNumber.from(collateralType.discountRate.discountRate) : null, } } - }; + } as CollateralType; }); } diff --git a/src/types.ts b/src/types.ts index 000e260..c4ed776 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,114 @@ +import { BigNumber } from "ethers"; + export type CollateralTypesFilter = Array<{ vault: string; tokenId: number; -}>; \ No newline at end of file +}>; + +export type CollateralTypes = Array; + +export interface CollateralType { + properties: Properties; + metadata: Metadata; + settings: Settings; + state: State; +} +export interface Properties { + vault: string; + vaultType: string; + name: string; + protocol: string; + token: string; + tokenId: string; + tokenScale: BigNumber; + tokenSymbol: string; + underlierToken: string; + underlierScale: BigNumber; + underlierSymbol: string; + maturity: BigNumber; + eptData: EptData; + fcData?: null; + fyData?: null; +} + +export interface EptData { + id: string; + balancerVault: string; + convergentCurvePool: string; + poolId: string; +} + +export interface Metadata { + protocol: string; + asset: string; + symbol: string; + decimals: number; + name: string; + tokenIds?: (string)[] | null; + icons: Icons; + urls: Urls; +} + +export interface Icons { + protocol: string; + asset: string; + underlier: string; +} + +export interface Urls { + project: string; + asset: string; +} + +export interface Settings { + codex: CodexSettings; + collybus: CollybusSettings; + limes: LimesSettings; + collateralAuction: CollateralAuctionSettings; +} +export interface CodexSettings { + debtCeiling: BigNumber; + debtFloor: BigNumber; +} + +export interface CollybusSettings { + liquidationRatio: BigNumber; + defaultRateId: BigNumber; +} + +export interface LimesSettings { + liquidationPenalty: BigNumber; + collateralAuction: string; + maxDebtOnAuction: BigNumber; +} + +export interface CollateralAuctionSettings { + multiplier: BigNumber; + maxAuctionDuration: BigNumber; + auctionDebtFloor: BigNumber; + collybus: string; +} + +export interface State { + codex: CodexState; + limes: LimesState; + publican: PublicanState; + collybus: CollybusState; +} +export interface CodexState { + totalNormalDebt: BigNumber; + rate: BigNumber; +} + +export interface LimesState { + debtOnAuction: string; +} + +export interface PublicanState { + interestPerSecond: string; +} +  +export interface CollybusState { + rateId?: BigNumber | null; + discountRate?: BigNumber | null; +} \ No newline at end of file From 34a72a6337f9c1a705d37e0c21591cf2fca44329 Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 18:46:07 -0500 Subject: [PATCH 6/9] Types for fetchCollateralTypesAndPrices --- src/index.ts | 4 ++-- src/types.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index f78d193..edf7575 100644 --- a/src/index.ts +++ b/src/index.ts @@ -372,7 +372,7 @@ export class FIAT { } // collateralTypesFilter: [{ vault: Address, tokenId: Number }] - async fetchCollateralTypesAndPrices(collateralTypesFilter: CollateralTypesFilter) { + async fetchCollateralTypesAndPrices(collateralTypesFilter: CollateralTypesFilter) : Promise { const collateralTypes = (collateralTypesFilter && collateralTypesFilter.length) ? collateralTypesFilter : Object.keys(this.metadata).reduce((collateralTypes_, vault) => ( @@ -422,7 +422,7 @@ export class FIAT { faceValue: prices.faceValue } } - }; + } as CollateralType; }); } diff --git a/src/types.ts b/src/types.ts index c4ed776..1e64fb8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -98,6 +98,7 @@ export interface State { export interface CodexState { totalNormalDebt: BigNumber; rate: BigNumber; + virtualRate? : BigNumber; // fetchCollateralTypesAndPrices } export interface LimesState { @@ -107,8 +108,11 @@ export interface LimesState { export interface PublicanState { interestPerSecond: string; } -  + export interface CollybusState { rateId?: BigNumber | null; discountRate?: BigNumber | null; + fairPrice?: BigNumber; // fetchCollateralTypesAndPrices + liquidationPrice?: BigNumber; // fetchCollateralTypesAndPrices + faceValue?: BigNumber; // fetchCollateralTypesAndPrices } \ No newline at end of file From b35e2abc0010e182f371ead7f6456559bb3975eb Mon Sep 17 00:00:00 2001 From: jFarms Date: Sun, 6 Nov 2022 18:59:22 -0500 Subject: [PATCH 7/9] Add types for fetchUserData --- src/index.ts | 6 +++--- src/types.ts | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index edf7575..99ca965 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,7 +24,7 @@ import Publican from 'changelog/abis/Publican.sol/Publican.json'; import VaultEPTActions from 'changelog/abis/VaultEPTActions.sol/VaultEPTActions.json'; import VaultFCActions from 'changelog/abis/VaultFCActions.sol/VaultFCActions.json'; import VaultFYActions from 'changelog/abis/VaultFYActions.sol/VaultFYActions.json'; -import { CollateralTypes, CollateralType, CollateralTypesFilter } from './types'; +import { CollateralTypes, CollateralType, CollateralTypesFilter, UserData } from './types'; import { SUBGRAPH_URL_MAINNET, SUBGRAPH_URL_GOERLI, queryCollateralTypes, queryUser, queryUserProxies @@ -427,7 +427,7 @@ export class FIAT { } // user: either owner of a Position or owner of a Proxy which is the owner of a Position - async fetchUserData(userOrProxyOwner) { + async fetchUserData(userOrProxyOwner: string) : Promise { const graphData = await Promise.all([ this.query(queryUser, { id: userOrProxyOwner.toLowerCase() }), this.query(queryUserProxies, { where: { owner: userOrProxyOwner.toLowerCase() } }) @@ -451,7 +451,7 @@ export class FIAT { collateral: ethers.BigNumber.from(position.collateral), normalDebt: ethers.BigNumber.from(position.normalDebt) })) - })); + } as UserData )); } // collateral in WAD diff --git a/src/types.ts b/src/types.ts index 1e64fb8..1d8371d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -115,4 +115,34 @@ export interface CollybusState { fairPrice?: BigNumber; // fetchCollateralTypesAndPrices liquidationPrice?: BigNumber; // fetchCollateralTypesAndPrices faceValue?: BigNumber; // fetchCollateralTypesAndPrices -} \ No newline at end of file +} + +export interface UserData { + user: string; + isProxy: boolean; + credit: BigNumber; + unbackedDebt: BigNumber; + balances?: (Balances)[] | null; + delegated?: (null)[] | null; // todo + delegates?: (null)[] | null; // todo + positions?: (Positions)[] | null; +} + +export interface Balances { + collateralType: BalanceCollateralType; + balance: BigNumber; +} + +export interface BalanceCollateralType { + token: string; + tokenId: string; +} + +export interface Positions { + owner: string; + vault: string; + token: string; + tokenId: BigNumber; + collateral: BigNumber; + normalDebt: BigNumber; +} From 957ed3fc529ad27a44266fa5e4764476b4ba476e Mon Sep 17 00:00:00 2001 From: jFarms Date: Mon, 14 Nov 2022 10:04:25 -0500 Subject: [PATCH 8/9] Update protocol specific properties + sense --- src/types.ts | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/types.ts b/src/types.ts index 1d8371d..b20dd7b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -26,18 +26,35 @@ export interface Properties { underlierScale: BigNumber; underlierSymbol: string; maturity: BigNumber; - eptData: EptData; - fcData?: null; - fyData?: null; + eptData?: EptData; + fcData?: FcData; + fyData?: FyData; + sptData?: SptData; } export interface EptData { - id: string; balancerVault: string; convergentCurvePool: string; poolId: string; } +export interface FcData { + notional: string; + tenor: string; +} + +export interface FyData { + yieldSpacePool: string; +} + +export interface SptData { + adapter: string; + balancerVault: string; + maturity: string; + spacePool: string; + target: string; +} + export interface Metadata { protocol: string; asset: string; From f5b10b2ede3a90316e9abe0104eacb2182d77d6d Mon Sep 17 00:00:00 2001 From: jFarms Date: Mon, 14 Nov 2022 10:21:16 -0500 Subject: [PATCH 9/9] Remove granular subtypes --- src/types.ts | 78 ++++++++++------------------------------------------ 1 file changed, 15 insertions(+), 63 deletions(-) diff --git a/src/types.ts b/src/types.ts index b20dd7b..4ab4dc3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -78,83 +78,35 @@ export interface Urls { } export interface Settings { - codex: CodexSettings; - collybus: CollybusSettings; - limes: LimesSettings; - collateralAuction: CollateralAuctionSettings; -} -export interface CodexSettings { - debtCeiling: BigNumber; - debtFloor: BigNumber; -} - -export interface CollybusSettings { - liquidationRatio: BigNumber; - defaultRateId: BigNumber; -} - -export interface LimesSettings { - liquidationPenalty: BigNumber; - collateralAuction: string; - maxDebtOnAuction: BigNumber; -} - -export interface CollateralAuctionSettings { - multiplier: BigNumber; - maxAuctionDuration: BigNumber; - auctionDebtFloor: BigNumber; - collybus: string; + codex: any; + collybus: any; + limes: any; + collateralAuction: any; } export interface State { - codex: CodexState; - limes: LimesState; - publican: PublicanState; - collybus: CollybusState; -} -export interface CodexState { - totalNormalDebt: BigNumber; - rate: BigNumber; - virtualRate? : BigNumber; // fetchCollateralTypesAndPrices -} - -export interface LimesState { - debtOnAuction: string; -} - -export interface PublicanState { - interestPerSecond: string; -} - -export interface CollybusState { - rateId?: BigNumber | null; - discountRate?: BigNumber | null; - fairPrice?: BigNumber; // fetchCollateralTypesAndPrices - liquidationPrice?: BigNumber; // fetchCollateralTypesAndPrices - faceValue?: BigNumber; // fetchCollateralTypesAndPrices + codex: any; + limes: any; + publican: any; + collybus: any; } export interface UserData { - user: string; - isProxy: boolean; + balances?: Balances[]; credit: BigNumber; + delegated?: any[]; + delegates?: any[]; + isProxy: boolean; + positions?: Positions[] | null; unbackedDebt: BigNumber; - balances?: (Balances)[] | null; - delegated?: (null)[] | null; // todo - delegates?: (null)[] | null; // todo - positions?: (Positions)[] | null; + user: string; } export interface Balances { - collateralType: BalanceCollateralType; + collateralType: any; balance: BigNumber; } -export interface BalanceCollateralType { - token: string; - tokenId: string; -} - export interface Positions { owner: string; vault: string;