import { ContractTransaction } from 'ethers'; import { BigNumber, BigNumberish } from 'ethers/utils'; import { MaxUint256 } from 'ethers/constants'; import { TransactionOverrides } from '../../../contracts/3'; import { IColony as IColonyV7 } from '../../../contracts/colony/7/IColony'; import { IColony as PreviousIColony } from '../../../contracts/colony/6/IColony'; import { ColonyNetworkClient } from '../../ColonyNetworkClient'; import { ExtendedIColony, getMoveFundsPermissionProofs, } from './commonExtensions'; import { ColonyExtensionsV3 } from './extensionsV3'; import { ColonyExtensionsV4 } from './extensionsV4'; import { ColonyExtensionsV5 } from './extensionsV5'; import { addExtensions as addExtensionsV6, ColonyExtensionsV6, ExtendedEstimateV6, } from './extensionsV6'; type ValidColony = IColonyV7; type PreviousVersionsExtensions = Omit< ExtendedIColony, 'moveFundsBetweenPotsWithProofs' > & ColonyExtensionsV3 & ColonyExtensionsV4 & ColonyExtensionsV5 & ColonyExtensionsV6; /* * Estimates */ export interface ExtendedEstimateV7 extends ExtendedEstimateV6 { moveFundsBetweenPotsWithProofs( _permissionDomainId: BigNumberish, _childSkillIndex: BigNumberish, _domainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, ): Promise; // eslint-disable-next-line max-len 'moveFundsBetweenPots(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)'( _permissionDomainId: BigNumberish, _childSkillIndex: BigNumberish, _domainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, ): Promise; // eslint-disable-next-line max-len 'moveFundsBetweenPots(uint256,uint256,uint256,uint256,uint256,uint256,address)'( _permissionDomainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, ): Promise; } /* * Extension Methods */ export type ColonyExtensionsV7 = { moveFundsBetweenPotsWithProofs( _permissionDomainId: BigNumberish, _childSkillIndex: BigNumberish, _domainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, overrides?: TransactionOverrides, ): Promise; // eslint-disable-next-line max-len 'moveFundsBetweenPots(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)'( _permissionDomainId: BigNumberish, _childSkillIndex: BigNumberish, _domainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, overrides?: TransactionOverrides, ): Promise; // eslint-disable-next-line max-len 'moveFundsBetweenPots(uint256,uint256,uint256,uint256,uint256,uint256,address)'( _permissionDomainId: BigNumberish, _fromChildSkillIndex: BigNumberish, _toChildSkillIndex: BigNumberish, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, overrides?: TransactionOverrides, ): Promise; estimate: T['estimate'] & ExtendedEstimateV7; } & PreviousVersionsExtensions; /* * Extension Methods */ async function moveFundsBetweenPotsWithProofs( this: ExtendedIColony, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, overrides?: TransactionOverrides, ): Promise { const [ permissionDomainId, fromChildSkillIndex, toChildSkillIndex, ] = await getMoveFundsPermissionProofs(this, _fromPot, _toPot); return this.moveFundsBetweenPots( permissionDomainId, MaxUint256, permissionDomainId, fromChildSkillIndex, toChildSkillIndex, _fromPot, _toPot as string, _amount, _token, overrides, ); } /* * Estimates */ async function estimateMoveFundsBetweenPotsWithProofs( this: ExtendedIColony, _fromPot: BigNumberish, _toPot: BigNumberish, _amount: BigNumberish, _token: string, ): Promise { const [ permissionDomainId, fromChildSkillIndex, toChildSkillIndex, ] = await getMoveFundsPermissionProofs(this, _fromPot, _toPot); return (this as IColonyV7).estimate.moveFundsBetweenPots( permissionDomainId, MaxUint256, permissionDomainId, fromChildSkillIndex, toChildSkillIndex, _fromPot, _toPot as string, _amount, _token, ); } /* * Bindings */ export const addExtensions = ( instance: PreviousVersionsExtensions, networkClient: ColonyNetworkClient, ): ColonyExtensionsV7 => { // Add all extensions from v6, because these are also still valid const extendedInstance = addExtensionsV6( instance, networkClient, ) as ColonyExtensionsV7; /* * We basically disable the signature type of the initial (pre V7) method * * This is because we overload the method, but not in a way that TS likes, as we * add the overloaded argument in the middle, and not at the end. */ // eslint-disable-next-line max-len (extendedInstance.moveFundsBetweenPotsWithProofs as unknown) = moveFundsBetweenPotsWithProofs.bind( extendedInstance, ); /* * We basically disable the signature type of the initial (pre V7) method * * This is because we overload the method, but not in a way that TS likes, as we * add the overloaded argument in the middle, and not at the end. */ // eslint-disable-next-line prettier/prettier (extendedInstance.estimate // eslint-disable-next-line max-len .moveFundsBetweenPotsWithProofs as unknown) = estimateMoveFundsBetweenPotsWithProofs.bind( extendedInstance, ); return extendedInstance; };