UNPKG

@ixily/activ

Version:

Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.

709 lines (623 loc) 17.2 kB
import { ConfigModule } from './config.module' import { ContractModule } from './contract.module' import { CryptoIdeasModule } from './crypto-ideas.module' import { LitModule } from './lit.module' import { ProvableIdeasModule } from './provable-ideas.module' import { StrategyChainModule } from './strategy-chain.module' import { version } from '../../../version.json' import { contractDbVersion } from '../../../version-contract-db.json' // temporary import { MigrationV3TemporaryModule } from './migration-v3.module' import { CONTRACT_INTERFACES, CacheService, Contract, IContract, IMessContractSpecs, // IActivConfig, IOperationalCost, IPaging, IStrategyChain, MessModule, MyMessDbServer, OperationalCostModule, PricingModule, ethers, skipExpirationInSeconds, } from '../../' import { ACTIV_AVAILABLE_CHAINS, ACTIV_LIVE_CHAINS, } from '../../constants/chunks/contracts' import { QueryViewsModule } from './query-views.module' import { ITradeIdeaIdea } from 'contract/interfaces' const config = ConfigModule.config const listContractChains = ContractModule.listBlockchainNetworks const listContractsForChain = ContractModule.listContractsForNetwork const selectChainContract = ContractModule.changeToContract const getBlockchainContract = ContractModule.getBlockchainContract const getGateContract = (): Contract | undefined => ContractModule.getGate() const getIdeaByNftId = async ( ideaNft: number, decrypt: boolean = true, inflateImages: boolean = false, contract?: IContract, ) => { contract = ContractModule.thisOrGet(contract) const key = `getIdeaByNftId_${ideaNft}_${decrypt}` const { data } = await CacheService.getData({ contract: contract?.gate, key, init: async () => { return ProvableIdeasModule.general.getIdeaByNftId( ideaNft, decrypt, inflateImages, contract, ) }, }) if (MigrationV3TemporaryModule.isCloseIdea(data)) { await CacheService.updateData({ key, contract: contract?.gate, data, expirationInSeconds: skipExpirationInSeconds, }) } return data } const getIdeaMetadataByKeys = async ( strategyKey: string, ideaKey: number, stageKey: number, creator?: string, contract?: IContract, ): Promise<string> => ProvableIdeasModule.general.getIdeaMetadataByKeys( strategyKey, ideaKey, stageKey, creator, contract, ) const getIdeaNftIdByKeys = async ( creator: string, strategyKey: string, ideaKey: number, stageKey: number, contract?: IContract, ): Promise<number> => ProvableIdeasModule.general.getIdeaNftIdByKeys( creator, strategyKey, ideaKey, stageKey, contract, ) const getIdeaByKeys = async ( strategyKey: string, ideaKey: number, stageKey: number, creator?: string, contract?: IContract, ): Promise<CONTRACT_INTERFACES.ITradeIdea> => ProvableIdeasModule.general.getIdeaByKeys( strategyKey, ideaKey, stageKey, creator, contract, ) // const listAllStrategies = async (contract?: IContract): Promise<any[]> => // ProvableIdeasModule.general.listAllStrategies(contract) const updateCurrentContractDb = async (contract?: IContract) => { contract = ContractModule.thisOrGet(contract) await MessModule.updateContractDb(contract) } const serveContractsDb = async ( chainContracts: IMessContractSpecs[], ): Promise<MyMessDbServer[]> => { return MessModule.serveContractsDb(chainContracts) } const readEvents = async () => ProvableIdeasModule.canonical.readEvents() const listStrategyReferences = async ( creator?: string, contract?: IContract, ): Promise<string[]> => ProvableIdeasModule.canonical.listStrategyReferences(creator, contract) const getStrategyIdeasCanonical = async ( strategyReference: string, creator?: string, contract?: IContract, ): Promise<CONTRACT_INTERFACES.ITradeIdea[]> => ProvableIdeasModule.canonical.getStrategyIdeasCanonical( strategyReference, creator, contract, ) // const listCreatorAndStrategyReferences = async ( // creator?: string, // contract?: IContract, // ): Promise<IOrderedReference> => // ProvableIdeasModule.canonical.listCreatorAndStrategyReferences( // creator, // contract, // ) const listStrategyReferencesCanonical = async ( creator?: string, contract?: IContract, ): Promise<string[]> => ProvableIdeasModule.canonical.listStrategyReferencesCanonical( creator, contract, ) const listStrategiesDetailsCanonical = async ( creator?: string, contract?: IContract, ): Promise<CONTRACT_INTERFACES.ITradeIdeaStrategy[]> => ProvableIdeasModule.canonical.listStrategiesDetailsCanonical( creator, contract, ) const listAllIdeasCanonical = async ( creator?: string, contract?: IContract, ): Promise<CONTRACT_INTERFACES.ITradeIdea[]> => ProvableIdeasModule.canonical.listIdeasCanonical(creator, contract) // We can proide the creator address to get from the strategies otherwise it defaults to the current user const listStrategiesByCreator = async ( creator?: string, contract?: IContract, ): Promise<any[]> => ProvableIdeasModule.general.listStrategies(creator, contract) /* const getAllIdeas = async ( creator?: string, contract?: IContract, ): Promise<any[]> => { */ const getMetadataByBlockId = async ( blockId: number, decryptIdea?: boolean, contract?: IContract, ) => ProvableIdeasModule.general.getMetadataByBlockId( blockId, decryptIdea, contract, ) const listStrategyIdeasByCreatorAndReference = async ( strategyReference: string, creator?: string, contract?: IContract, ): Promise<number[]> => { const { data } = await CacheService.getData({ contract: contract?.gate, key: `listIdeas_${strategyReference}`, init: async () => { return ProvableIdeasModule.general.listIdeas( strategyReference, creator, contract, ) }, }) return data } const listStrategyIdeasStagesByCreatorAndReference = async ( strategyReference: string, ideaKey: number, creator?: string, contract?: IContract, ): Promise<number[]> => ProvableIdeasModule.general.listStages( strategyReference, ideaKey, creator, contract, ) const getCurrentStrategyTickers = async ( strategyChainOrStrategyKey: IStrategyChain | string, creator?: string, contract?: IContract, ): Promise< { ticker: string ideaKey: number }[] > => { const { data } = await CacheService.getData({ contract: contract?.gate, key: `getCurrentStrategyTickers_${ (strategyChainOrStrategyKey as IStrategyChain)?.strategyKey || strategyChainOrStrategyKey }`, init: async () => { return ProvableIdeasModule.general.getCurrentStrategyTickers( strategyChainOrStrategyKey, creator, contract, ) }, }) return data } const getStrategyChain = async ( strategyKey: string, creator?: string, contract?: IContract, ): Promise<IStrategyChain> => ProvableIdeasModule.general.getStrategyChain(strategyKey, creator, contract) const getValidatedStrategyChain = async ( strategyKey: string, creator?: string, contract?: IContract, ): Promise<IStrategyChain> => ProvableIdeasModule.general.getValidatedStrategyChain( strategyKey, creator, contract, ) const getStrategyMetadata = async ( strategyChain?: IStrategyChain, strategyKey?: string, creator?: string, contract?: IContract, ): Promise<CONTRACT_INTERFACES.ITradeIdeaStrategy> => { if (strategyChain === undefined) { strategyChain = await getValidatedStrategyChain( strategyKey!, creator, contract, ) } let strategyMetadata: CONTRACT_INTERFACES.ITradeIdeaStrategy | undefined = undefined let reverseSeachIndex: number = 1 while (strategyMetadata === undefined) { const lastIdea = strategyChain.ideas[strategyChain.ideas.length - reverseSeachIndex] strategyMetadata = lastIdea.stages[lastIdea.stages.length - 1].ideaStage.strategy } return strategyMetadata } // const getOwnedByNfts = async ( // owner?: string, // contract?: IContract, // ): Promise<any> => ProvableIdeasModule.general.getOwnedByNfts(owner, contract) // // const getCreatedByNfts = async ( // creator?: string, // contract?: IContract, // ): Promise<number[]> => // ProvableIdeasModule.general.getCreatedByNfts(creator, contract) /* * Get all ideas created by a wallet address user * * creator defaults to the caller * * @param {string} creator * @param {number} page * @param {number} limit * @param {Contract} contract * @returns {Promise<any[]>} */ // const getCreatedByIdeas = async ( // page: number = 1, // limit: number = 5, // creator?: string, // contract?: IContract, // ): Promise<IPaging<IOpenSeaMetadata>> => // ProvableIdeasModule.general.getCreatedByIdeas( // creator, // page, // limit, // undefined, // contract, // ) const getMyIdeas = async ( page: number = 1, limit: number = 5, contract?: IContract, ): Promise<IPaging<CONTRACT_INTERFACES.ITradeIdea>> => ProvableIdeasModule.general.getCreatedByIdeas( undefined, page, limit, undefined, contract, ) // const getMyIdeasByFilter = async ( // page: number = 1, // limit: number = 5, // filterIdeaKind: ITradeIdeaIdeaKind, // contract?: IContract, // ): Promise<IPaging<any>> => // ProvableIdeasModule.general.getCreatedByIdeas( // undefined, // page, // limit, // filterIdeaKind, // contract, // ) /* * Get all ideas owned by a wallet address user * * creator defaults to the caller * * @param {string} creator * @param {number} page * @param {number} limit * @param {Contract} contract * @returns {Promise<any[]>} */ // const getOwnedByIdeas = async ( // page: number = 1, // limit: number = 5, // creator?: string, // contract?: IContract, // ): Promise<IPaging<any>> => // ProvableIdeasModule.general.getOwnedByIdeas( // creator, // page, // limit, // undefined, // contract, // ) const getAllIdeasUserCanSee = async ( page: number = 1, limit: number = 5, user?: string, contract?: IContract, ): Promise<IPaging<any>> => ProvableIdeasModule.general.getAllIdeasUserCanSee( user, page, limit, undefined, contract, ) const getAllMyIdeas = async ( page: number = 1, limit: number = 5, contract?: IContract, ): Promise<IPaging<any>> => ProvableIdeasModule.general.getAllIdeasUserCanSee( undefined, page, limit, undefined, contract, ) // const getAllPublicIdeas = async ( // page: number = 1, // limit: number = 5, // contract?: IContract, // ): Promise<IPaging<any>> => // ProvableIdeasModule.general.getAllPublicClosedIdeas(page, limit, contract) const testPricingAsset = async ( request: CONTRACT_INTERFACES.IProviderRequest, ): Promise<CONTRACT_INTERFACES.IPrice> => PricingModule.testPricingAsset(request) const settings = async (contract?: IContract) => ContractModule.getWalletSettings(contract) const supportedChainNetworks = () => ACTIV_AVAILABLE_CHAINS const getEstimatedCosts = async ( newIdea: boolean = true, clientInBehalf?: string, contract?: IContract, ): Promise<IOperationalCost> => { contract = await ContractModule.thisOrGet(contract) return OperationalCostModule.getEstimatedCosts( contract, clientInBehalf, newIdea, ) } const createPortfolioEntry = ProvableIdeasModule?.clientOnly?.createPortfolioEntry const createPortfolio = ProvableIdeasModule?.clientOnly?.createPortfolio const createIdea = ProvableIdeasModule?.clientOnly?.createIdea const createNormalizedTradeIdea = ProvableIdeasModule?.clientOnly?.createNormalizedTradeIdea const adjustIdea = ProvableIdeasModule?.clientOnly?.adjustIdea const closeIdea = ProvableIdeasModule?.clientOnly?.closeIdea const providerCreateIdea = ProvableIdeasModule.providerOnly.providerCreateIdea const providerCloseIdea = ProvableIdeasModule.providerOnly.providerCloseIdea const providerAdjustIdea = ProvableIdeasModule.providerOnly.providerAdjustIdea const providerCreateFiatMintIdea = ProvableIdeasModule.providerOnly.providerCreateFiatMintIdea const createIdeaFromFiatMint = ProvableIdeasModule?.fiatMint?.createIdea const createNormalizedTradeIdeaFromFiatMint = ProvableIdeasModule?.fiatMint?.createNormalizedTradeIdea const adjustIdeaFromFiatMint = ProvableIdeasModule?.fiatMint?.adjustIdea const closeIdeaFromFiatMint = ProvableIdeasModule?.fiatMint?.closeIdea const getCreatorOfNftIdea = async (nftId: number, contract?: IContract) => ProvableIdeasModule.general.getCreatorOfNftIdea(nftId, contract) const restoredIdeasWithPagination = CryptoIdeasModule.getRestoredIdeasByNftIdsWithPaginationAndFilter const restoreIdeaImages = CryptoIdeasModule.restoreImages const restoreIdeasImages = (ideas: CONTRACT_INTERFACES.ITradeIdea[]) => { return Promise.all(ideas.map((idea) => restoreIdeaImages(idea))) } const getChronologicalIdeasFromStrategyChain = StrategyChainModule.chronologicalIdeasFromChain const getActiveIdeasFromStrategyChain = StrategyChainModule.getActiveIdeasFromChain const getExistingNftByStrategyRefAndTicker = ProvableIdeasModule.general.getExistingNftByStrategyRefAndTicker const getPricingInfo = (tradeIdea: CONTRACT_INTERFACES.ITradeIdea) => ProvableIdeasModule.general.getPricingInfo( tradeIdea.pricing, (tradeIdea.idea as ITradeIdeaIdea).asset.ticker, tradeIdea.tracker, tradeIdea.devSettings?.croupierUrl, ) const getVersion = () => { return version } const getContractDbVersion = () => { return contractDbVersion } const giveIdeaAccessTo = ( nftId: number, addresses: string[], contract?: IContract, ) => ProvableIdeasModule.clientOnly.giveIdeaAccessTo(nftId, addresses, contract) const getIdeaViewers = (nftId: number, contract?: IContract) => ProvableIdeasModule.general.getIdeaViewers(nftId, contract) const authorizeProvider = ( provider: string, contract?: IContract, ): Promise<void> => ProvableIdeasModule.clientOnly.authorizeProvider(provider, contract) const revokeProvider = ( provider: string, contract?: IContract, ): Promise<void> => ProvableIdeasModule.clientOnly.revokeProvider(provider, contract) const authorizeCheck = ( provider: string, contract?: IContract, ): Promise<boolean> => ProvableIdeasModule.clientOnly.authorizeCheck(provider, contract) const providerCheck = ( client: string, contract?: IContract, ): Promise<boolean> => ProvableIdeasModule.providerOnly.providerCheck(client, contract) const getKeysFromIdea = ( tradeIdea: CONTRACT_INTERFACES.ITradeIdea, ): { strategyKey: string ideaKey?: number ideaStageKey?: number nftId?: number tradeIdea: CONTRACT_INTERFACES.ITradeIdea } => { return { strategyKey: tradeIdea.strategy.reference, ideaKey: tradeIdea.content.ideaKey, ideaStageKey: tradeIdea.content.ideaStageKey, nftId: tradeIdea.nftId, tradeIdea, } } const isValidWalletAddress = (walletAddressList: string[]) => { let globalCheck = true const checkerResponse: { [key: string]: boolean } = {} for (const wallet of walletAddressList) { if (wallet) { checkerResponse[wallet] = ethers.utils.isAddress(wallet) if (!checkerResponse[wallet]) { globalCheck = false } } } return { globalCheck, checkerResponse, } } const testLitActionsAvailability = LitModule.testJS const listNetworks = () => ACTIV_LIVE_CHAINS // const listExchanges = () => PRICING_PROVIDERS export const ActivV4Module = { settings, supportedChainNetworks, config, // getEstimatedCosts, // adminCreateIdea, createIdea, createPortfolioEntry, createPortfolio, createNormalizedTradeIdea, adjustIdea, closeIdea, providerCreateIdea, providerCloseIdea, providerAdjustIdea, providerCreateFiatMintIdea, createIdeaFromFiatMint, createNormalizedTradeIdeaFromFiatMint, adjustIdeaFromFiatMint, closeIdeaFromFiatMint, // adminCreateClientTokens, giveIdeaAccessTo, getPricingInfo, getIdeaViewers, // crud // contract // listAllStrategies, // creator of ideas listStrategiesByCreator, listStrategyIdeasByCreatorAndReference, listStrategyIdeasStagesByCreatorAndReference, // getIdeaNftIdByKeys, getIdeaMetadataByKeys, getIdeaByKeys, getIdeaByNftId, // owner of token to ideas // getOwnedByIdeas, // getOwnedByNfts, // getCreatedByIdeas, // getCreatedByNfts, // getMyIdeasByFilter, getExistingNftByStrategyRefAndTicker, getCreatorOfNftIdea, restoredIdeasWithPagination, restoreIdeaImages, restoreIdeasImages, getAllIdeasUserCanSee, getAllMyIdeas, getMyIdeas, // getAllPublicIdeas, getMetadataByBlockId, getKeysFromIdea, testPricingAsset, // adminListStrategies, getStrategyChain, getValidatedStrategyChain, getStrategyMetadata, getChronologicalIdeasFromStrategyChain, getActiveIdeasFromStrategyChain, getCurrentStrategyTickers, // adminGetStrategyChain, // getStrategyIdeas, authorizeProvider, revokeProvider, authorizeCheck, providerCheck, // contract setup listContractChains, listContractsForChain, selectChainContract, getBlockchainContract, getGateContract, testLitActionsAvailability, isValidWalletAddress, listNetworks, // listExchanges, // canonical readEvents, updateCurrentContractDb, serveContractsDb, // listCreatorAndStrategyReferences, listStrategyReferences, getStrategyIdeasCanonical, listStrategyReferencesCanonical, listStrategiesDetailsCanonical, listAllIdeasCanonical, // TODO: this is not All, but all for creator ...MigrationV3TemporaryModule, getVersion, getContractDbVersion, query: { ...QueryViewsModule, }, }