Skip to content

Commit

Permalink
chore: moved contracts class to contracts folder as index file
Browse files Browse the repository at this point in the history
  • Loading branch information
mishuagopian committed Feb 22, 2024
1 parent c49d782 commit d5da73c
Show file tree
Hide file tree
Showing 15 changed files with 169 additions and 173 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"docs": "typedoc --options ./typedocconfig.ts --out docs/$npm_package_version && rm -rf docs/lts && cp -r docs/$npm_package_version/ docs/lts/",
"build": "node esbuild.js && tsc && tsc-alias",
"build-unbundle": "tsc --outDir dist && tsc-alias",
"lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
"lint": "yarn run fmt-check && eslint src/ --ext .js,.jsx,.ts,.tsx",
"fmt-check": "prettier --config .prettierrc --ignore-path .prettierignore --check .",
"fmt": "prettier --config .prettierrc --ignore-path .prettierignore --write .",
"gql:types": "graphql-code-generator",
Expand Down
119 changes: 2 additions & 117 deletions src/blockchain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,137 +4,22 @@ import {
ExtractAbiEventNames,
ExtractAbiFunction,
} from 'abitype';
import { DecodeEventLogReturnType, EncodeEventTopicsParameters, WalletClient } from 'viem';
import {
Account,
Address,
Chain,
decodeEventLog,
DecodeEventLogReturnType,
encodeEventTopics,
getContract,
GetContractReturnType,
EncodeEventTopicsParameters,
Hash,
PublicClient,
TransactionReceipt,
Transport,
zeroAddress as zeroAddressViem,
} from 'viem';

import type { multiSourceLoanABI as multiSourceLoanABIV4 } from '@/generated/blockchain/v4';
import type { auctionLoanLiquidatorABI as auctionLoanLiquidatorABIV5 } from '@/generated/blockchain/v5';
import type { multiSourceLoanABI as multiSourceLoanABIV5 } from '@/generated/blockchain/v5';
import { erc20ABI, erc721ABI } from '@/generated/blockchain/v5';
import type { multiSourceLoanAbi as multiSourceLoanABIV6 } from '@/generated/blockchain/v6';

import { AllV4 } from './contracts/AllV4';
import { AllV5 } from './contracts/AllV5';
import { AllV6 } from './contracts/AllV6';
import { CryptoPunks } from './contracts/CryptoPunks';
import { Leverage } from './contracts/Leverage';
import { MslV4 } from './contracts/MslV4';
import { MslV5 } from './contracts/MslV5';
import { MslV6 } from './contracts/MslV6';
import { Seaport } from './contracts/Seaport';
import { UserVault } from './contracts/UserVault';
import { areSameAddress } from './utils';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class Contracts {
walletClient: Wallet;
publicClient: PublicClient;

MultiSourceLoanV4: MslV4;
MultiSourceLoanV5: MslV5;
MultiSourceLoanV6: MslV6;
AuctionLoanLiquidatorV4: AllV4;
AuctionLoanLiquidatorV5: AllV5;
AuctionLoanLiquidatorV6: AllV6;
UserVaultV5: UserVault;
Leverage: Leverage;
Seaport: Seaport;
CryptoPunks: CryptoPunks;

constructor(publicClient: PublicClient, walletClient: Wallet) {
this.walletClient = walletClient;
this.publicClient = publicClient;

this.MultiSourceLoanV4 = new MslV4({ walletClient });
this.MultiSourceLoanV5 = new MslV5({ walletClient });
this.MultiSourceLoanV6 = new MslV6({ walletClient });
this.AuctionLoanLiquidatorV4 = new AllV4({ walletClient });
this.AuctionLoanLiquidatorV5 = new AllV5({ walletClient });
this.AuctionLoanLiquidatorV6 = new AllV6({ walletClient });
this.UserVaultV5 = new UserVault({ walletClient });
this.Leverage = new Leverage({
walletClient,
mslAddress: this.MultiSourceLoanV5.address,
});
this.Seaport = new Seaport({ walletClient });
this.CryptoPunks = new CryptoPunks({ walletClient });
}

Msl(contractAddress: Address) {
if (areSameAddress(contractAddress, this.MultiSourceLoanV4.address)) {
return this.MultiSourceLoanV4;
}
if (areSameAddress(contractAddress, this.MultiSourceLoanV5.address)) {
return this.MultiSourceLoanV5;
}
if (areSameAddress(contractAddress, this.MultiSourceLoanV6.address)) {
return this.MultiSourceLoanV6;
}
throw new Error(`Invalid Contract Address ${contractAddress}`);
}

/**
*
* @param contractAddress The contract address of the MultiSourceLoanV4 or MultiSourceLoanV5 contract
* @returns The corresponding AuctionLoanLiquidator contract
*/
All(contractAddress: Address) {
if (areSameAddress(contractAddress, this.MultiSourceLoanV4.address)) {
return this.AuctionLoanLiquidatorV4;
}
if (areSameAddress(contractAddress, this.MultiSourceLoanV5.address)) {
return this.AuctionLoanLiquidatorV5;
}
if (areSameAddress(contractAddress, this.MultiSourceLoanV6.address)) {
return this.AuctionLoanLiquidatorV6;
}
throw new Error(`Invalid Contract Address ${contractAddress}`);
}

UserVault(contractAddress: Address) {
if (areSameAddress(contractAddress, this.UserVaultV5.address)) {
return this.UserVaultV5;
}
throw new Error(`Invalid Contract Address ${contractAddress}`);
}

ERC721(
nftAddress: Address,
): GetContractReturnType<typeof erc721ABI, PublicClient, Wallet, Address> {
return getContract({
address: nftAddress,
abi: erc721ABI,
walletClient: this.walletClient,
publicClient: this.publicClient,
});
}

ERC20(
nftAddress: Address,
): GetContractReturnType<typeof erc20ABI, PublicClient, Wallet, Address> {
return getContract({
address: nftAddress,
abi: erc20ABI,
walletClient: this.walletClient,
publicClient: this.publicClient,
});
}
}

type RepayAbiTypeV4 = AbiParametersToPrimitiveTypes<
ExtractAbiFunction<typeof multiSourceLoanABIV4, 'repayLoan'>['inputs']
>;
Expand Down
9 changes: 4 additions & 5 deletions src/contracts/AllV4.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { Account, Address, Chain, encodeAbiParameters, Transport, WalletClient } from 'viem';
import { Address, encodeAbiParameters } from 'viem';

import { filterLogs, LoanV4 } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { auctionLoanLiquidatorABI as auctionLoanLiquidatorABIV4 } from '@/generated/blockchain/v4';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class AllV4 extends Contract<typeof auctionLoanLiquidatorABIV4> {
export class AllV4 extends BaseContract<typeof auctionLoanLiquidatorABIV4> {
static LOAN_SETTLEMENT_ENCODE_TYPES = [
{
name: '',
Expand Down
9 changes: 4 additions & 5 deletions src/contracts/AllV5.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import { Account, Address, Chain, Transport, WalletClient } from 'viem';
import { Address } from 'viem';

import { filterLogs, LoanV5 } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { auctionLoanLiquidatorABI as auctionLoanLiquidatorABIV5 } from '@/generated/blockchain/v5';
import * as model from '@/model';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class AllV5 extends Contract<typeof auctionLoanLiquidatorABIV5> {
export class AllV5 extends BaseContract<typeof auctionLoanLiquidatorABIV5> {
constructor({ walletClient }: { walletClient: Wallet }) {
const {
AuctionLoanLiquidator: { v5 },
Expand Down
9 changes: 4 additions & 5 deletions src/contracts/AllV6.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import { Account, Address, Chain, Transport, WalletClient } from 'viem';
import { Address } from 'viem';

import { filterLogs, LoanV6 } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { auctionLoanLiquidatorAbi as auctionLoanLiquidatorABIV6 } from '@/generated/blockchain/v6';
import * as model from '@/model';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class AllV6 extends Contract<typeof auctionLoanLiquidatorABIV6> {
export class AllV6 extends BaseContract<typeof auctionLoanLiquidatorABIV6> {
constructor({ walletClient }: { walletClient: Wallet }) {
const {
AuctionLoanLiquidator: { v6 },
Expand Down
5 changes: 3 additions & 2 deletions src/contracts/Contract.ts → src/contracts/BaseContract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ import {
SimulateContractParameters,
} from 'viem';

import { Wallet } from '@/blockchain';
export class Contract<TAbi extends Abi> {
import { Wallet } from '@/contracts';

export class BaseContract<TAbi extends Abi> {
abi: TAbi;
address: Address;
bcClient: PublicClient;
Expand Down
9 changes: 4 additions & 5 deletions src/contracts/CryptoPunks.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { Account, Chain, encodeFunctionData, Transport, WalletClient } from 'viem';
import { encodeFunctionData } from 'viem';

import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { cryptopunksABI } from '@/generated/blockchain/cryptopunks';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class CryptoPunks extends Contract<typeof cryptopunksABI> {
export class CryptoPunks extends BaseContract<typeof cryptopunksABI> {
constructor({ walletClient }: { walletClient: Wallet }) {
const { CryptoPunksAddress } = getContracts(walletClient.chain);

Expand Down
9 changes: 4 additions & 5 deletions src/contracts/Leverage.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import { Account, Address, Chain, encodeFunctionData, Hash, Transport, WalletClient } from 'viem';
import { Address, encodeFunctionData, Hash } from 'viem';

import { filterLogs, LoanV5, OfferV5 } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { leverageABI, multiSourceLoanABI } from '@/generated/blockchain/v5';
import { getDomain } from '@/utils';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class Leverage extends Contract<typeof leverageABI> {
export class Leverage extends BaseContract<typeof leverageABI> {
mslAddress: Address;

constructor({ walletClient, mslAddress }: { walletClient: Wallet; mslAddress: Address }) {
Expand Down
7 changes: 4 additions & 3 deletions src/contracts/MslV4.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { Address, Hash, zeroAddress } from 'viem';

import { filterLogs, LoanV4, OfferV4, RenegotiationV4, Wallet } from '@/blockchain';
import { filterLogs, LoanV4, OfferV4, RenegotiationV4 } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { multiSourceLoanABI as multiSourceLoanABIV4 } from '@/generated/blockchain/v4';
import { EmitLoanArgs } from '@/gondi';
import { getDomain } from '@/utils';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';
import { MslV5 } from './MslV5';

export class MslV4 extends Contract<typeof multiSourceLoanABIV4> {
export class MslV4 extends BaseContract<typeof multiSourceLoanABIV4> {
constructor({ walletClient }: { walletClient: Wallet }) {
const {
MultiSourceLoan: { v4 },
Expand Down
7 changes: 4 additions & 3 deletions src/contracts/MslV5.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { Address, encodeFunctionData, Hash } from 'viem';

import { filterLogs, LoanV5, OfferV5, RenegotiationV5, Wallet, zeroHash } from '@/blockchain';
import { filterLogs, LoanV5, OfferV5, RenegotiationV5, zeroHash } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { multiSourceLoanABI as multiSourceLoanABIV5 } from '@/generated/blockchain/v5';
import { EmitLoanArgs } from '@/gondi';
import { bpsToPercentage, getDomain, millisToSeconds, SECONDS_IN_DAY } from '@/utils';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export class MslV5 extends Contract<typeof multiSourceLoanABIV5> {
export class MslV5 extends BaseContract<typeof multiSourceLoanABIV5> {
constructor({ walletClient }: { walletClient: Wallet }) {
const {
MultiSourceLoan: { v5 },
Expand Down
7 changes: 4 additions & 3 deletions src/contracts/MslV6.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { Address, encodeFunctionData, Hash } from 'viem';

import { filterLogs, LoanV6, OfferV6, RenegotiationV6, Wallet, zeroHash } from '@/blockchain';
import { filterLogs, LoanV6, OfferV6, RenegotiationV6, zeroHash } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { multiSourceLoanAbi as multiSourceLoanAbiV6 } from '@/generated/blockchain/v6';
import { EmitLoanArgs } from '@/gondi';
import { bpsToPercentage, getDomain, millisToSeconds, SECONDS_IN_DAY } from '@/utils';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';
import { MslV5 } from './MslV5';

export class MslV6 extends Contract<typeof multiSourceLoanAbiV6> {
export class MslV6 extends BaseContract<typeof multiSourceLoanAbiV6> {
constructor({ walletClient }: { walletClient: Wallet }) {
const {
MultiSourceLoan: { v6 },
Expand Down
9 changes: 4 additions & 5 deletions src/contracts/Seaport.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import { Account, Address, Chain, Transport, WalletClient, zeroAddress } from 'viem';
import { Address, zeroAddress } from 'viem';

import { filterLogs, zeroHash } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts, getCurrencies } from '@/deploys';
import { seaportABI } from '@/generated/blockchain/seaport';
import { SaleOfferInfoFragment } from '@/generated/graphql';
import { Fulfillment, SeaportOrder, SeaportOrderParameter } from '@/reservoir/utils';
import { millisToSeconds } from '@/utils';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export type Wallet = WalletClient<Transport, Chain, Account>;

export class Seaport extends Contract<typeof seaportABI> {
export class Seaport extends BaseContract<typeof seaportABI> {
constructor({ walletClient }: { walletClient: Wallet }) {
const { SeaportAddress } = getContracts(walletClient.chain);

Expand Down
7 changes: 4 additions & 3 deletions src/contracts/UserVault.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Address } from 'viem';

import { filterLogs, Wallet } from '@/blockchain';
import { filterLogs } from '@/blockchain';
import { Wallet } from '@/contracts';
import { getContracts } from '@/deploys';
import { userVaultABI as userVaultABIV5 } from '@/generated/blockchain/v5';

import { Contract } from './Contract';
import { BaseContract } from './BaseContract';

export class UserVault extends Contract<typeof userVaultABIV5> {
export class UserVault extends BaseContract<typeof userVaultABIV5> {
constructor({ walletClient }: { walletClient: Wallet }) {
const { UserVault } = getContracts(walletClient.chain);

Expand Down
Loading

0 comments on commit d5da73c

Please sign in to comment.