From c46cbe193b6387f31aee6c20067a770e4714f10f Mon Sep 17 00:00:00 2001 From: William Poulin Date: Wed, 27 Sep 2023 16:47:55 -0400 Subject: [PATCH] fix(arbitrum-airdrop): Removed position because contract has been self destructed --- .../arbitrum-airdrop.module.ts | 11 - ...rdrop.airdrop.contract-position-fetcher.ts | 63 --- src/apps/arbitrum-airdrop/assets/logo.png | Bin 40812 -> 0 bytes .../contracts/abis/token-distributor.json | 348 ------------- .../contracts/ethers/TokenDistributor.ts | 461 ------------------ .../contracts/ethers/common.ts | 32 -- .../factories/TokenDistributor__factory.ts | 366 -------------- .../contracts/ethers/factories/index.ts | 4 - .../contracts/ethers/index.ts | 6 - src/apps/arbitrum-airdrop/contracts/index.ts | 23 - 10 files changed, 1314 deletions(-) delete mode 100644 src/apps/arbitrum-airdrop/arbitrum-airdrop.module.ts delete mode 100644 src/apps/arbitrum-airdrop/arbitrum/arbitrum-airdrop.airdrop.contract-position-fetcher.ts delete mode 100644 src/apps/arbitrum-airdrop/assets/logo.png delete mode 100644 src/apps/arbitrum-airdrop/contracts/abis/token-distributor.json delete mode 100644 src/apps/arbitrum-airdrop/contracts/ethers/TokenDistributor.ts delete mode 100644 src/apps/arbitrum-airdrop/contracts/ethers/common.ts delete mode 100644 src/apps/arbitrum-airdrop/contracts/ethers/factories/TokenDistributor__factory.ts delete mode 100644 src/apps/arbitrum-airdrop/contracts/ethers/factories/index.ts delete mode 100644 src/apps/arbitrum-airdrop/contracts/ethers/index.ts delete mode 100644 src/apps/arbitrum-airdrop/contracts/index.ts diff --git a/src/apps/arbitrum-airdrop/arbitrum-airdrop.module.ts b/src/apps/arbitrum-airdrop/arbitrum-airdrop.module.ts deleted file mode 100644 index 8e4150171..000000000 --- a/src/apps/arbitrum-airdrop/arbitrum-airdrop.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { ArbitrumArbitrumAirdropAirdropContractPositionFetcher } from './arbitrum/arbitrum-airdrop.airdrop.contract-position-fetcher'; -import { ArbitrumAirdropContractFactory } from './contracts'; - -@Module({ - providers: [ArbitrumAirdropContractFactory, ArbitrumArbitrumAirdropAirdropContractPositionFetcher], -}) -export class ArbitrumAirdropAppModule extends AbstractApp() {} diff --git a/src/apps/arbitrum-airdrop/arbitrum/arbitrum-airdrop.airdrop.contract-position-fetcher.ts b/src/apps/arbitrum-airdrop/arbitrum/arbitrum-airdrop.airdrop.contract-position-fetcher.ts deleted file mode 100644 index 28e12b655..000000000 --- a/src/apps/arbitrum-airdrop/arbitrum/arbitrum-airdrop.airdrop.contract-position-fetcher.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { BigNumberish, Contract } from 'ethers'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { DefaultDataProps } from '~position/display.interface'; -import { MetaType } from '~position/position.interface'; -import { ContractPositionTemplatePositionFetcher } from '~position/template/contract-position.template.position-fetcher'; -import { - GetDefinitionsParams, - DefaultContractPositionDefinition, - GetTokenDefinitionsParams, - UnderlyingTokenDefinition, - GetTokenBalancesParams, - GetDisplayPropsParams, -} from '~position/template/contract-position.template.types'; - -import { ArbitrumAirdropContractFactory, TokenDistributor } from '../contracts'; - -const TOKEN_DISTRIBUTOR = '0x67a24ce4321ab3af51c2d0a4801c3e111d88c9d9'; -const ARB_TOKEN = '0x912ce59144191c1204e64559fe8253a0e49e6548'; - -@PositionTemplate() -export class ArbitrumArbitrumAirdropAirdropContractPositionFetcher extends ContractPositionTemplatePositionFetcher { - groupLabel = 'airdrop'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(ArbitrumAirdropContractFactory) - protected readonly arbitrumAirdropContractFactory: ArbitrumAirdropContractFactory, - ) { - super(appToolkit); - } - - getContract(_address: string): Contract { - return this.arbitrumAirdropContractFactory.tokenDistributor({ - address: _address, - network: this.network, - }); - } - - async getLabel( - _params: GetDisplayPropsParams, - ): Promise { - return 'Arbitrum Airdrop'; - } - - async getDefinitions(_params: GetDefinitionsParams): Promise { - return [{ address: TOKEN_DISTRIBUTOR }]; - } - - async getTokenDefinitions( - _params: GetTokenDefinitionsParams, - ): Promise { - return [{ metaType: MetaType.CLAIMABLE, address: ARB_TOKEN, network: this.network }]; - } - - async getTokenBalancesPerPosition( - params: GetTokenBalancesParams, - ): Promise { - return [await params.contract.claimableTokens(params.address)]; - } -} diff --git a/src/apps/arbitrum-airdrop/assets/logo.png b/src/apps/arbitrum-airdrop/assets/logo.png deleted file mode 100644 index 1a7e7493ac000c13f93066c59af07bef8f3302a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40812 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 W(}6z2tM!)|fR}-;DWO)|Deix3VEx+w diff --git a/src/apps/arbitrum-airdrop/contracts/abis/token-distributor.json b/src/apps/arbitrum-airdrop/contracts/abis/token-distributor.json deleted file mode 100644 index 320d34f87..000000000 --- a/src/apps/arbitrum-airdrop/contracts/abis/token-distributor.json +++ /dev/null @@ -1,348 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IERC20VotesUpgradeable", - "name": "_token", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_sweepReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_claimPeriodStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_claimPeriodEnd", - "type": "uint256" - }, - { - "internalType": "address", - "name": "delegateTo", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "CanClaim", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "HasClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newSweepReceiver", - "type": "address" - } - ], - "name": "SweepReceiverSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Swept", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "claimAndDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimPeriodEnd", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimPeriodStart", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "claimableTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_recipients", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_claimableAmount", - "type": "uint256[]" - } - ], - "name": "setRecipients", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_sweepReceiver", - "type": "address" - } - ], - "name": "setSweepReciever", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sweepReceiver", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract IERC20VotesUpgradeable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalClaimable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/arbitrum-airdrop/contracts/ethers/TokenDistributor.ts b/src/apps/arbitrum-airdrop/contracts/ethers/TokenDistributor.ts deleted file mode 100644 index 8f4354c3e..000000000 --- a/src/apps/arbitrum-airdrop/contracts/ethers/TokenDistributor.ts +++ /dev/null @@ -1,461 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from 'ethers'; -import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi'; -import type { Listener, Provider } from '@ethersproject/providers'; -import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common'; - -export interface TokenDistributorInterface extends utils.Interface { - functions: { - 'claim()': FunctionFragment; - 'claimAndDelegate(address,uint256,uint8,bytes32,bytes32)': FunctionFragment; - 'claimPeriodEnd()': FunctionFragment; - 'claimPeriodStart()': FunctionFragment; - 'claimableTokens(address)': FunctionFragment; - 'owner()': FunctionFragment; - 'renounceOwnership()': FunctionFragment; - 'setRecipients(address[],uint256[])': FunctionFragment; - 'setSweepReciever(address)': FunctionFragment; - 'sweep()': FunctionFragment; - 'sweepReceiver()': FunctionFragment; - 'token()': FunctionFragment; - 'totalClaimable()': FunctionFragment; - 'transferOwnership(address)': FunctionFragment; - 'withdraw(uint256)': FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | 'claim' - | 'claimAndDelegate' - | 'claimPeriodEnd' - | 'claimPeriodStart' - | 'claimableTokens' - | 'owner' - | 'renounceOwnership' - | 'setRecipients' - | 'setSweepReciever' - | 'sweep' - | 'sweepReceiver' - | 'token' - | 'totalClaimable' - | 'transferOwnership' - | 'withdraw', - ): FunctionFragment; - - encodeFunctionData(functionFragment: 'claim', values?: undefined): string; - encodeFunctionData( - functionFragment: 'claimAndDelegate', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - ], - ): string; - encodeFunctionData(functionFragment: 'claimPeriodEnd', values?: undefined): string; - encodeFunctionData(functionFragment: 'claimPeriodStart', values?: undefined): string; - encodeFunctionData(functionFragment: 'claimableTokens', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'owner', values?: undefined): string; - encodeFunctionData(functionFragment: 'renounceOwnership', values?: undefined): string; - encodeFunctionData( - functionFragment: 'setRecipients', - values: [PromiseOrValue[], PromiseOrValue[]], - ): string; - encodeFunctionData(functionFragment: 'setSweepReciever', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'sweep', values?: undefined): string; - encodeFunctionData(functionFragment: 'sweepReceiver', values?: undefined): string; - encodeFunctionData(functionFragment: 'token', values?: undefined): string; - encodeFunctionData(functionFragment: 'totalClaimable', values?: undefined): string; - encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'withdraw', values: [PromiseOrValue]): string; - - decodeFunctionResult(functionFragment: 'claim', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'claimAndDelegate', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'claimPeriodEnd', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'claimPeriodStart', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'claimableTokens', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'renounceOwnership', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'setRecipients', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'setSweepReciever', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'sweep', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'sweepReceiver', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'token', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'totalClaimable', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'withdraw', data: BytesLike): Result; - - events: { - 'CanClaim(address,uint256)': EventFragment; - 'HasClaimed(address,uint256)': EventFragment; - 'OwnershipTransferred(address,address)': EventFragment; - 'SweepReceiverSet(address)': EventFragment; - 'Swept(uint256)': EventFragment; - 'Withdrawal(address,uint256)': EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: 'CanClaim'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'HasClaimed'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'SweepReceiverSet'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'Swept'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'Withdrawal'): EventFragment; -} - -export interface CanClaimEventObject { - recipient: string; - amount: BigNumber; -} -export type CanClaimEvent = TypedEvent<[string, BigNumber], CanClaimEventObject>; - -export type CanClaimEventFilter = TypedEventFilter; - -export interface HasClaimedEventObject { - recipient: string; - amount: BigNumber; -} -export type HasClaimedEvent = TypedEvent<[string, BigNumber], HasClaimedEventObject>; - -export type HasClaimedEventFilter = TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent<[string, string], OwnershipTransferredEventObject>; - -export type OwnershipTransferredEventFilter = TypedEventFilter; - -export interface SweepReceiverSetEventObject { - newSweepReceiver: string; -} -export type SweepReceiverSetEvent = TypedEvent<[string], SweepReceiverSetEventObject>; - -export type SweepReceiverSetEventFilter = TypedEventFilter; - -export interface SweptEventObject { - amount: BigNumber; -} -export type SweptEvent = TypedEvent<[BigNumber], SweptEventObject>; - -export type SweptEventFilter = TypedEventFilter; - -export interface WithdrawalEventObject { - recipient: string; - amount: BigNumber; -} -export type WithdrawalEvent = TypedEvent<[string, BigNumber], WithdrawalEventObject>; - -export type WithdrawalEventFilter = TypedEventFilter; - -export interface TokenDistributor extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TokenDistributorInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined, - ): Promise>; - - listeners(eventFilter?: TypedEventFilter): Array>; - listeners(eventName?: string): Array; - removeAllListeners(eventFilter: TypedEventFilter): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - claim(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - claimAndDelegate( - delegatee: PromiseOrValue, - expiry: PromiseOrValue, - v: PromiseOrValue, - r: PromiseOrValue, - s: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - claimPeriodEnd(overrides?: CallOverrides): Promise<[BigNumber]>; - - claimPeriodStart(overrides?: CallOverrides): Promise<[BigNumber]>; - - claimableTokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - setRecipients( - _recipients: PromiseOrValue[], - _claimableAmount: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - setSweepReciever( - _sweepReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - sweep(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - sweepReceiver(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - totalClaimable(overrides?: CallOverrides): Promise<[BigNumber]>; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - withdraw( - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - }; - - claim(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - claimAndDelegate( - delegatee: PromiseOrValue, - expiry: PromiseOrValue, - v: PromiseOrValue, - r: PromiseOrValue, - s: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - claimPeriodEnd(overrides?: CallOverrides): Promise; - - claimPeriodStart(overrides?: CallOverrides): Promise; - - claimableTokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - setRecipients( - _recipients: PromiseOrValue[], - _claimableAmount: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - setSweepReciever( - _sweepReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - sweep(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - sweepReceiver(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalClaimable(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - withdraw( - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - callStatic: { - claim(overrides?: CallOverrides): Promise; - - claimAndDelegate( - delegatee: PromiseOrValue, - expiry: PromiseOrValue, - v: PromiseOrValue, - r: PromiseOrValue, - s: PromiseOrValue, - overrides?: CallOverrides, - ): Promise; - - claimPeriodEnd(overrides?: CallOverrides): Promise; - - claimPeriodStart(overrides?: CallOverrides): Promise; - - claimableTokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - setRecipients( - _recipients: PromiseOrValue[], - _claimableAmount: PromiseOrValue[], - overrides?: CallOverrides, - ): Promise; - - setSweepReciever(_sweepReceiver: PromiseOrValue, overrides?: CallOverrides): Promise; - - sweep(overrides?: CallOverrides): Promise; - - sweepReceiver(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalClaimable(overrides?: CallOverrides): Promise; - - transferOwnership(newOwner: PromiseOrValue, overrides?: CallOverrides): Promise; - - withdraw(amount: PromiseOrValue, overrides?: CallOverrides): Promise; - }; - - filters: { - 'CanClaim(address,uint256)'(recipient?: PromiseOrValue | null, amount?: null): CanClaimEventFilter; - CanClaim(recipient?: PromiseOrValue | null, amount?: null): CanClaimEventFilter; - - 'HasClaimed(address,uint256)'(recipient?: PromiseOrValue | null, amount?: null): HasClaimedEventFilter; - HasClaimed(recipient?: PromiseOrValue | null, amount?: null): HasClaimedEventFilter; - - 'OwnershipTransferred(address,address)'( - previousOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null, - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null, - ): OwnershipTransferredEventFilter; - - 'SweepReceiverSet(address)'(newSweepReceiver?: PromiseOrValue | null): SweepReceiverSetEventFilter; - SweepReceiverSet(newSweepReceiver?: PromiseOrValue | null): SweepReceiverSetEventFilter; - - 'Swept(uint256)'(amount?: null): SweptEventFilter; - Swept(amount?: null): SweptEventFilter; - - 'Withdrawal(address,uint256)'(recipient?: PromiseOrValue | null, amount?: null): WithdrawalEventFilter; - Withdrawal(recipient?: PromiseOrValue | null, amount?: null): WithdrawalEventFilter; - }; - - estimateGas: { - claim(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - claimAndDelegate( - delegatee: PromiseOrValue, - expiry: PromiseOrValue, - v: PromiseOrValue, - r: PromiseOrValue, - s: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - claimPeriodEnd(overrides?: CallOverrides): Promise; - - claimPeriodStart(overrides?: CallOverrides): Promise; - - claimableTokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - setRecipients( - _recipients: PromiseOrValue[], - _claimableAmount: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - setSweepReciever( - _sweepReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - sweep(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - sweepReceiver(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalClaimable(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - withdraw( - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - }; - - populateTransaction: { - claim(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - claimAndDelegate( - delegatee: PromiseOrValue, - expiry: PromiseOrValue, - v: PromiseOrValue, - r: PromiseOrValue, - s: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - claimPeriodEnd(overrides?: CallOverrides): Promise; - - claimPeriodStart(overrides?: CallOverrides): Promise; - - claimableTokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - setRecipients( - _recipients: PromiseOrValue[], - _claimableAmount: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - setSweepReciever( - _sweepReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - sweep(overrides?: Overrides & { from?: PromiseOrValue }): Promise; - - sweepReceiver(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - totalClaimable(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - - withdraw( - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, - ): Promise; - }; -} diff --git a/src/apps/arbitrum-airdrop/contracts/ethers/common.ts b/src/apps/arbitrum-airdrop/contracts/ethers/common.ts deleted file mode 100644 index 35f31be99..000000000 --- a/src/apps/arbitrum-airdrop/contracts/ethers/common.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { Listener } from '@ethersproject/providers'; -import type { Event, EventFilter } from 'ethers'; - -export interface TypedEvent = any, TArgsObject = any> extends Event { - args: TArgsArray & TArgsObject; -} - -export interface TypedEventFilter<_TEvent extends TypedEvent> extends EventFilter {} - -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; -} - -type __TypechainArgsArray = T extends TypedEvent ? U : never; - -export interface OnEvent { - (eventFilter: TypedEventFilter, listener: TypedListener): TRes; - (eventName: string, listener: Listener): TRes; -} - -export type MinEthersFactory = { - deploy(...a: ARGS[]): Promise; -}; - -export type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; - -export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; - -export type PromiseOrValue = T | Promise; diff --git a/src/apps/arbitrum-airdrop/contracts/ethers/factories/TokenDistributor__factory.ts b/src/apps/arbitrum-airdrop/contracts/ethers/factories/TokenDistributor__factory.ts deleted file mode 100644 index 4569be310..000000000 --- a/src/apps/arbitrum-airdrop/contracts/ethers/factories/TokenDistributor__factory.ts +++ /dev/null @@ -1,366 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from 'ethers'; -import type { Provider } from '@ethersproject/providers'; -import type { TokenDistributor, TokenDistributorInterface } from '../TokenDistributor'; - -const _abi = [ - { - inputs: [ - { - internalType: 'contract IERC20VotesUpgradeable', - name: '_token', - type: 'address', - }, - { - internalType: 'address payable', - name: '_sweepReceiver', - type: 'address', - }, - { - internalType: 'address', - name: '_owner', - type: 'address', - }, - { - internalType: 'uint256', - name: '_claimPeriodStart', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_claimPeriodEnd', - type: 'uint256', - }, - { - internalType: 'address', - name: 'delegateTo', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'CanClaim', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'HasClaimed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'newSweepReceiver', - type: 'address', - }, - ], - name: 'SweepReceiverSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Swept', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdrawal', - type: 'event', - }, - { - inputs: [], - name: 'claim', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegatee', - type: 'address', - }, - { - internalType: 'uint256', - name: 'expiry', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'claimAndDelegate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'claimPeriodEnd', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'claimPeriodStart', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'claimableTokens', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: '_recipients', - type: 'address[]', - }, - { - internalType: 'uint256[]', - name: '_claimableAmount', - type: 'uint256[]', - }, - ], - name: 'setRecipients', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address payable', - name: '_sweepReceiver', - type: 'address', - }, - ], - name: 'setSweepReciever', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'sweep', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'sweepReceiver', - outputs: [ - { - internalType: 'address payable', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'contract IERC20VotesUpgradeable', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalClaimable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -]; - -export class TokenDistributor__factory { - static readonly abi = _abi; - static createInterface(): TokenDistributorInterface { - return new utils.Interface(_abi) as TokenDistributorInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): TokenDistributor { - return new Contract(address, _abi, signerOrProvider) as TokenDistributor; - } -} diff --git a/src/apps/arbitrum-airdrop/contracts/ethers/factories/index.ts b/src/apps/arbitrum-airdrop/contracts/ethers/factories/index.ts deleted file mode 100644 index e3e32e345..000000000 --- a/src/apps/arbitrum-airdrop/contracts/ethers/factories/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { TokenDistributor__factory } from './TokenDistributor__factory'; diff --git a/src/apps/arbitrum-airdrop/contracts/ethers/index.ts b/src/apps/arbitrum-airdrop/contracts/ethers/index.ts deleted file mode 100644 index 8b984a700..000000000 --- a/src/apps/arbitrum-airdrop/contracts/ethers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { TokenDistributor } from './TokenDistributor'; -export * as factories from './factories'; -export { TokenDistributor__factory } from './factories/TokenDistributor__factory'; diff --git a/src/apps/arbitrum-airdrop/contracts/index.ts b/src/apps/arbitrum-airdrop/contracts/index.ts deleted file mode 100644 index 06d5e5698..000000000 --- a/src/apps/arbitrum-airdrop/contracts/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { ContractFactory } from '~contract/contracts'; -import { Network } from '~types/network.interface'; - -import { TokenDistributor__factory } from './ethers'; - -// eslint-disable-next-line -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class ArbitrumAirdropContractFactory extends ContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) { - super((network: Network) => appToolkit.getNetworkProvider(network)); - } - - tokenDistributor({ address, network }: ContractOpts) { - return TokenDistributor__factory.connect(address, this.appToolkit.getNetworkProvider(network)); - } -} - -export type { TokenDistributor } from './ethers';