diff --git a/packages/common/package.json b/packages/common/package.json index 25347972946..d003509bbe8 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -35,6 +35,7 @@ "url": "https://github.com/AudiusProject/apps/issues" }, "dependencies": { + "@audius/eth": "*", "@audius/fetch-nft": "0.2.8", "@audius/fixed-decimal": "*", "@audius/sdk": "*", diff --git a/packages/common/src/api/tan-query/wallets/useAudioBalance.ts b/packages/common/src/api/tan-query/wallets/useAudioBalance.ts index 8989d96b5b9..025ba57c816 100644 --- a/packages/common/src/api/tan-query/wallets/useAudioBalance.ts +++ b/packages/common/src/api/tan-query/wallets/useAudioBalance.ts @@ -8,7 +8,7 @@ import { useQueryClient } from '@tanstack/react-query' import { call, getContext } from 'typed-redux-saga' -import { getAddress } from 'viem' +import { getAddress, type Hex } from 'viem' import { getQueryContext, @@ -17,6 +17,11 @@ import { } from '~/api/tan-query/utils/QueryContext' import { Chain, ID } from '~/models' import { Feature } from '~/models/ErrorReporting' +import { + createEthPublicClient, + getAudioBalance, + getFullAudioBalance +} from '~/services/ethereum/ethereum' import { toErrorWithMessage } from '~/utils/error' import { QUERY_KEYS } from '../queryKeys' @@ -43,7 +48,7 @@ export const getWalletAudioBalanceQueryKey = ({ type FetchAudioBalanceContext = Pick< QueryContextType, - 'audiusSdk' | 'audiusBackend' | 'reportToSentry' + 'audiusSdk' | 'audiusBackend' | 'reportToSentry' | 'env' > const getWalletAudioBalanceQueryFn = @@ -54,26 +59,18 @@ const getWalletAudioBalanceQueryFn = ReturnType >) => { const [_ignored, chain, address, { includeStaked }] = queryKey - const { audiusSdk, audiusBackend, reportToSentry } = context + const { audiusSdk, audiusBackend, reportToSentry, env } = context try { const sdk = await audiusSdk() if (chain === Chain.Eth) { - const checksumWallet = getAddress(address) - const balance = await sdk.services.audiusTokenClient.balanceOf({ - account: checksumWallet - }) + const checksumWallet = getAddress(address) as Hex + const ethClient = createEthPublicClient(env.ETH_PROVIDER_URL) + const balance = await getAudioBalance(ethClient, checksumWallet) if (!includeStaked) { return AUDIO(balance).value } - const delegatedBalance = - await sdk.services.delegateManagerClient.getTotalDelegatorStake({ - delegatorAddress: checksumWallet - }) - const stakedBalance = await sdk.services.stakingClient.totalStakedFor({ - account: checksumWallet - }) - - return AUDIO(balance + delegatedBalance + stakedBalance).value + const fullBalance = await getFullAudioBalance(ethClient, checksumWallet) + return AUDIO(fullBalance).value } else { const wAudioSolBalance = await audiusBackend.getAddressWAudioBalance({ address, diff --git a/packages/common/src/services/audius-backend/AudiusBackend.ts b/packages/common/src/services/audius-backend/AudiusBackend.ts index 3c018951be4..1bc856f5f5f 100644 --- a/packages/common/src/services/audius-backend/AudiusBackend.ts +++ b/packages/common/src/services/audius-backend/AudiusBackend.ts @@ -15,10 +15,15 @@ import { Transaction, VersionedTransaction } from '@solana/web3.js' -import { getAddress } from 'viem' +import { getAddress, type Hex } from 'viem' import { userMetadataToSdk } from '~/adapters/user' import { Env } from '~/services/env' +import { + createEthPublicClient, + getAudioBalance, + getFullAudioBalance +} from '~/services/ethereum/ethereum' import dayjs from '~/utils/dayjs' import { ID, ComputedUserProperties, WriteableUserMetadata } from '../../models' @@ -668,19 +673,16 @@ export const audiusBackend = ({ * @returns {Promise} balance or null if failed to fetch balance */ async function getBalance({ - ethAddress, - sdk + ethAddress }: { ethAddress: string - sdk: AudiusSdk }): Promise { if (!ethAddress) return null try { - const checksumWallet = getAddress(ethAddress) - const balance = await sdk.services.audiusTokenClient.balanceOf({ - account: checksumWallet - }) + const checksumWallet = getAddress(ethAddress) as Hex + const ethClient = createEthPublicClient(env.ETH_PROVIDER_URL) + const balance = await getAudioBalance(ethClient, checksumWallet) return AUDIO(balance).value } catch (e) { console.error(e) @@ -754,24 +756,14 @@ export const audiusBackend = ({ * @param bustCache * @returns balance or null if error */ - async function getAddressTotalStakedBalance(address: string, sdk: AudiusSdk) { + async function getAddressTotalStakedBalance(address: string) { if (!address) return null try { - const checksumWallet = getAddress(address) - const [balance, delegatedBalance, stakedBalance] = await Promise.all([ - sdk.services.audiusTokenClient.balanceOf({ - account: checksumWallet - }), - sdk.services.delegateManagerClient.getTotalDelegatorStake({ - delegatorAddress: checksumWallet - }), - sdk.services.stakingClient.totalStakedFor({ - account: checksumWallet - }) - ]) - - return AUDIO(balance + delegatedBalance + stakedBalance).value + const checksumWallet = getAddress(address) as Hex + const ethClient = createEthPublicClient(env.ETH_PROVIDER_URL) + const fullBalance = await getFullAudioBalance(ethClient, checksumWallet) + return AUDIO(fullBalance).value } catch (e) { reportError({ error: e as Error }) console.error(e) diff --git a/packages/common/src/services/ethereum/ethereum.ts b/packages/common/src/services/ethereum/ethereum.ts new file mode 100644 index 00000000000..53b1f9b17ba --- /dev/null +++ b/packages/common/src/services/ethereum/ethereum.ts @@ -0,0 +1,248 @@ +/** + * Ethereum contract utilities for Audius. + * + * Plain functions that call Audius Ethereum contracts via viem, + * using ABIs + mainnet addresses from @audius/eth. + * No classes, no schemas — just contract calls. + */ + +import { + AudiusToken, + type AudiusTokenTypes, + AudiusWormhole, + type AudiusWormholeTypes, + DelegateManager, + Staking +} from '@audius/eth' +import { + type Hex, + type PublicClient, + type TypedDataDefinition, + type WalletClient, + createPublicClient, + createWalletClient, + http, + parseSignature +} from 'viem' +import { mainnet } from 'viem/chains' + +// ---------- Types ---------- + +/** Minimal signer interface for Ethereum transactions. */ +export type EthSigner = { + getAddresses: () => Promise + signTypedData: (data: any) => Promise +} + +// ---------- Client factories ---------- + +/** Create a viem PublicClient for Ethereum mainnet. */ +export const createEthPublicClient = (rpcUrl: string) => + createPublicClient({ + chain: mainnet, + transport: http(rpcUrl) + }) + +/** Create a viem WalletClient for Ethereum mainnet. */ +export const createEthWalletClient = (rpcUrl: string) => + createWalletClient({ + chain: mainnet, + transport: http(rpcUrl) + }) + +// ---------- Reads: AudiusToken ---------- + +/** Get AUDIO token balance for an Ethereum address. */ +export const getAudioBalance = (client: PublicClient, account: Hex) => + client.readContract({ + address: AudiusToken.address, + abi: AudiusToken.abi, + functionName: 'balanceOf', + args: [account] + }) + +// ---------- Reads: Staking ---------- + +/** Get total staked AUDIO for an address. */ +export const getTotalStakedFor = (client: PublicClient, account: Hex) => + client.readContract({ + address: Staking.address, + abi: Staking.abi, + functionName: 'totalStakedFor', + args: [account] + }) + +// ---------- Reads: DelegateManager ---------- + +/** Get total delegated stake for a delegator address. */ +export const getTotalDelegatorStake = (client: PublicClient, delegator: Hex) => + client.readContract({ + address: DelegateManager.address, + abi: DelegateManager.abi, + functionName: 'getTotalDelegatorStake', + args: [delegator] + }) + +// ---------- Composite reads ---------- + +/** Get full AUDIO balance: token + staked + delegated. */ +export const getFullAudioBalance = async ( + client: PublicClient, + account: Hex +) => { + const [balance, stakedBalance, delegatedBalance] = await Promise.all([ + getAudioBalance(client, account), + getTotalStakedFor(client, account), + getTotalDelegatorStake(client, account) + ]) + return balance + stakedBalance + delegatedBalance +} + +// ---------- Writes ---------- + +const ONE_HOUR_IN_MS = 1000 * 60 * 60 +const ONE_HOUR_IN_S = 60 * 60 + +/** Wormhole chain ID for Solana (always 1 in the Wormhole protocol). */ +const WORMHOLE_SOLANA_CHAIN_ID = 1 + +/** + * EIP-2612 permit: approve a spender to transfer AUDIO tokens on behalf of + * the owner using a signed message instead of an on-chain approve() tx. + */ +export async function permitAudioToken({ + ethPublicClient, + ethWalletClient, + signer, + spender, + value +}: { + ethPublicClient: PublicClient + ethWalletClient: WalletClient + signer: EthSigner + spender: Hex + value: bigint +}): Promise { + const owner = (await signer.getAddresses())[0] + if (!owner) { + throw new Error('No wallet address available') + } + + const deadline = BigInt(Date.now() + ONE_HOUR_IN_MS) + + const nonce = await ethPublicClient.readContract({ + address: AudiusToken.address, + abi: AudiusToken.abi, + functionName: 'nonces', + args: [owner] + }) + + const name = await ethPublicClient.readContract({ + abi: AudiusToken.abi, + address: AudiusToken.address, + functionName: 'name' + }) + + const chainId = BigInt(await ethPublicClient.getChainId()) + + const typedData: TypedDataDefinition = { + primaryType: 'Permit', + domain: { + name, + version: '1', + chainId, + verifyingContract: AudiusToken.address + }, + message: { owner, spender, value, nonce, deadline }, + types: AudiusToken.types + } + + const signature = await signer.signTypedData(typedData) + const { r, s, v } = parseSignature(signature) + + const { request } = await ethPublicClient.simulateContract({ + address: AudiusToken.address, + abi: AudiusToken.abi, + functionName: 'permit', + args: [owner, spender, value, deadline, Number(v), r, s] as const, + account: owner + }) + return await ethWalletClient.writeContract(request) +} + +/** + * Transfer AUDIO tokens through the Wormhole bridge to Solana. + */ +export async function wormholeTransferTokens({ + ethPublicClient, + ethWalletClient, + signer, + amount, + recipient +}: { + ethPublicClient: PublicClient + ethWalletClient: WalletClient + signer: EthSigner + amount: bigint + recipient: Hex +}): Promise { + const from = (await signer.getAddresses())[0] + if (!from) { + throw new Error('No wallet address available') + } + + const deadline = BigInt(Math.round(Date.now() / 1000) + ONE_HOUR_IN_S) + const arbiterFee = BigInt(0) + + const nonce = await ethPublicClient.readContract({ + address: AudiusWormhole.address, + abi: AudiusWormhole.abi, + functionName: 'nonces', + args: [from] + }) + + const chainId = BigInt(await ethPublicClient.getChainId()) + + const typedData: TypedDataDefinition = + { + primaryType: 'TransferTokens', + domain: { + name: 'AudiusWormholeClient', + version: '1', + chainId, + verifyingContract: AudiusWormhole.address + }, + message: { + from, + amount, + recipientChain: WORMHOLE_SOLANA_CHAIN_ID, + recipient, + artbiterFee: arbiterFee, + deadline, + nonce + }, + types: AudiusWormhole.types + } + + const signature = await signer.signTypedData(typedData) + const { r, s, v } = parseSignature(signature) + + const { request } = await ethPublicClient.simulateContract({ + address: AudiusWormhole.address, + abi: AudiusWormhole.abi, + functionName: 'transferTokens', + args: [ + from, + amount, + WORMHOLE_SOLANA_CHAIN_ID, + recipient, + arbiterFee, + deadline, + Number(v), + r, + s + ], + account: from + }) + return await ethWalletClient.writeContract(request) +} diff --git a/packages/common/src/services/wallet-client/WalletClient.ts b/packages/common/src/services/wallet-client/WalletClient.ts index db586532da7..12ae2d59974 100644 --- a/packages/common/src/services/wallet-client/WalletClient.ts +++ b/packages/common/src/services/wallet-client/WalletClient.ts @@ -1,6 +1,8 @@ +import { AudiusWormhole } from '@audius/eth' import { AUDIO, wAUDIO, AudioWei } from '@audius/fixed-decimal' import { AudiusSdk, Id } from '@audius/sdk' import { PublicKey } from '@solana/web3.js' +import { type Hex } from 'viem' import { userWalletsFromSDK } from '~/adapters' import { ID } from '~/models/Identifiers' @@ -13,6 +15,12 @@ import { pollForTokenBalanceChange } from '../audius-backend' import { Env } from '../env' +import { + createEthPublicClient, + createEthWalletClient, + permitAudioToken, + wormholeTransferTokens +} from '../ethereum/ethereum' export const MIN_TRANSFERRABLE_WEI = AUDIO('0.001').value @@ -47,39 +55,6 @@ export class WalletClient { return new PublicKey(address) } - /** Get user's current ETH Audio balance. Returns null on failure. */ - async getCurrentBalance({ - ethAddress - }: { - ethAddress: string - }): Promise { - try { - const sdk = await this.audiusSdk() - const balance = await this.audiusBackendInstance.getBalance({ - ethAddress, - sdk - }) - return BigInt(balance?.toString() ?? 0) as AudioWei - } catch (err) { - console.error(err) - return null - } - } - - /** Get user's current SOL Audio balance. Returns null on failure. */ - async getCurrentWAudioBalance({ - ethAddress - }: { - ethAddress: string - }): Promise { - const sdk = await this.audiusSdk() - const balance = await this.audiusBackendInstance.getWAudioBalance({ - ethAddress, - sdk - }) - return balance ? (BigInt(balance.toString()) as AudioWei) : null - } - async getAssociatedTokenAccountInfo({ address }: { address: string }) { try { const sdk = await this.audiusSdk() @@ -112,32 +87,36 @@ export class WalletClient { const ercAudioBalance = BigInt( ( await this.audiusBackendInstance.getBalance({ - ethAddress, - sdk + ethAddress }) )?.toString() ?? 0 ) as AudioWei if (!isNullOrUndefined(ercAudioBalance) && ercAudioBalance > BigInt(0)) { const balance = ercAudioBalance - const permitTxHash = await sdk.services.audiusTokenClient.permit({ - args: { - value: balance, - spender: sdk.services.audiusWormholeClient.contractAddress - } + + const ethPublicClient = createEthPublicClient(this.env.ETH_PROVIDER_URL) + const ethWalletClient = createEthWalletClient(this.env.ETH_PROVIDER_URL) + + const permitTxHash = await permitAudioToken({ + ethPublicClient, + ethWalletClient, + signer: sdk.services.audiusWalletClient, + spender: AudiusWormhole.address, + value: balance }) console.debug( `Permitted AudiusWormhole to transfer ${balance} tokens...`, { permitTxHash } ) - const transferTxHash = - await sdk.services.audiusWormholeClient.transferTokens({ - args: { - amount: balance, - recipientChain: 'Solana', - recipient: `0x${account.address.toBuffer().toString('hex')}` - } - }) + + const transferTxHash = await wormholeTransferTokens({ + ethPublicClient, + ethWalletClient, + signer: sdk.services.audiusWalletClient, + amount: balance, + recipient: `0x${account.address.toBuffer().toString('hex')}` as Hex + }) console.debug( `AudiusWormhole transferred ${balance} tokens into the Wormhole...`, { transferTxHash } @@ -182,8 +161,7 @@ export class WalletClient { ...associatedWallets.wallets.map(async (wallet) => { const balance = await this.audiusBackendInstance.getAddressTotalStakedBalance( - wallet, - sdk + wallet ) return BigInt(balance?.toString() ?? 0) as AudioWei }), @@ -221,14 +199,12 @@ export class WalletClient { wallets: string[] ): Promise<{ address: string; balance: AudioWei }[]> { try { - const sdk = await this.audiusSdk() const balances: { address: string; balance: AudioWei }[] = await Promise.all( wallets.map(async (wallet) => { const balance = await this.audiusBackendInstance.getAddressTotalStakedBalance( - wallet, - sdk + wallet ) return { address: wallet, diff --git a/packages/sdk/src/sdk/config/development.ts b/packages/sdk/src/sdk/config/development.ts index d599500387c..1782fb05ceb 100644 --- a/packages/sdk/src/sdk/config/development.ts +++ b/packages/sdk/src/sdk/config/development.ts @@ -5,54 +5,44 @@ /* eslint-disable prettier/prettier */ import type { SdkServicesConfig } from './types' export const developmentConfig: SdkServicesConfig = { - "network": { - "minVersion": "0.0.0", - "apiEndpoint": "http://audius-api", - "storageNodes": [ + network: { + minVersion: '0.0.0', + apiEndpoint: 'http://audius-api', + storageNodes: [ { - "delegateOwnerWallet": "0x0D38e653eC28bdea5A2296fD5940aaB2D0B8875c", - "endpoint": "http://audius-creator-node-1" + delegateOwnerWallet: '0x0D38e653eC28bdea5A2296fD5940aaB2D0B8875c', + endpoint: 'http://audius-creator-node-1' } ], - "antiAbuseOracleNodes": { - "endpoints": [ - "http://audius-anti-abuse-oracle-1:8000" - ], - "registeredAddresses": [ - "0xF0D5BC18421fa04D0a2A2ef540ba5A9f04014BE3" - ] + antiAbuseOracleNodes: { + endpoints: ['http://audius-anti-abuse-oracle-1:8000'], + registeredAddresses: ['0xF0D5BC18421fa04D0a2A2ef540ba5A9f04014BE3'] }, - "identityService": "http://audius-identity-service-1" + identityService: 'http://audius-identity-service-1' }, - "acdc": { - "entityManagerContractAddress": "0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B", - "chainId": 1337 + acdc: { + entityManagerContractAddress: '0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B', + chainId: 1337 }, - "solana": { - "claimableTokensProgramAddress": "testHKV1B56fbvop4w6f2cTGEub9dRQ2Euta5VmqdX9", - "rewardManagerProgramAddress": "testLsJKtyABc9UXJF8JWFKf1YH4LmqCWBC42c6akPb", - "rewardManagerStateAddress": "DJPzVothq58SmkpRb1ATn5ddN2Rpv1j2TcGvM3XsHf1c", - "paymentRouterProgramAddress": "apaySbqV1XAmuiGszeN4NyWrXkkMrnuJVoNhzmS1AMa", - "stakingBridgeProgramAddress": "", - "rpcEndpoint": "http://audius-solana-test-validator-1", - "usdcTokenMint": "26Q7gP8UfkDzi7GMFEQxTJaNJ8D2ybCUjex58M5MLu8y", - "wAudioTokenMint": "37RCjhgV1qGV2Q54EHFScdxZ22ydRMdKMtVgod47fDP3", - "rewardManagerLookupTableAddress": "GNHKVSmHvoRBt1JJCxz7RSMfzDQGDGhGEjmhHyxb3K5J" + solana: { + claimableTokensProgramAddress: + 'testHKV1B56fbvop4w6f2cTGEub9dRQ2Euta5VmqdX9', + rewardManagerProgramAddress: 'testLsJKtyABc9UXJF8JWFKf1YH4LmqCWBC42c6akPb', + rewardManagerStateAddress: 'DJPzVothq58SmkpRb1ATn5ddN2Rpv1j2TcGvM3XsHf1c', + paymentRouterProgramAddress: 'apaySbqV1XAmuiGszeN4NyWrXkkMrnuJVoNhzmS1AMa', + stakingBridgeProgramAddress: '', + rpcEndpoint: 'http://audius-solana-test-validator-1', + usdcTokenMint: '26Q7gP8UfkDzi7GMFEQxTJaNJ8D2ybCUjex58M5MLu8y', + wAudioTokenMint: '37RCjhgV1qGV2Q54EHFScdxZ22ydRMdKMtVgod47fDP3', + rewardManagerLookupTableAddress: + 'GNHKVSmHvoRBt1JJCxz7RSMfzDQGDGhGEjmhHyxb3K5J' }, - "ethereum": { - "rpcEndpoint": "http://audius-eth-ganache-1", - "addresses": { - "ethRewardsManagerAddress": "0x", - "serviceProviderFactoryAddress": "0x", - "serviceTypeManagerAddress": "0x", - "audiusTokenAddress": "0xdcB2fC9469808630DD0744b0adf97C0003fC29B2", - "audiusWormholeAddress": "0x", - "delegateManagerAddress": "0x", - "stakingAddress": "0x", - "governanceAddress": "0x", - "registryAddress": "0x", - "claimsManagerAddress": "0x", - "trustedNotifierManagerAddress": "0x" + ethereum: { + rpcEndpoint: 'http://audius-eth-ganache-1', + addresses: { + ethRewardsManagerAddress: '0x', + serviceProviderFactoryAddress: '0x', + serviceTypeManagerAddress: '0x' } } } diff --git a/packages/sdk/src/sdk/config/production.ts b/packages/sdk/src/sdk/config/production.ts index f2975fe1a8d..5f8a3621805 100644 --- a/packages/sdk/src/sdk/config/production.ts +++ b/packages/sdk/src/sdk/config/production.ts @@ -5,362 +5,357 @@ /* eslint-disable prettier/prettier */ import type { SdkServicesConfig } from './types' export const productionConfig: SdkServicesConfig = { - "network": { - "minVersion": "0.7.0", - "apiEndpoint": "https://api.audius.co", - "storageNodes": [ + network: { + minVersion: '0.7.0', + apiEndpoint: 'https://api.audius.co', + storageNodes: [ { - "endpoint": "https://creatornode3.audius.co", - "delegateOwnerWallet": "0x0C32BE6328578E99b6F06E0e7A6B385EB8FC13d1" + endpoint: 'https://creatornode3.audius.co', + delegateOwnerWallet: '0x0C32BE6328578E99b6F06E0e7A6B385EB8FC13d1' }, { - "endpoint": "https://audius.bragi.cc", - "delegateOwnerWallet": "0x627d23D17a3eAaDB1D3823e73Ab80D474023Acab" + endpoint: 'https://audius.bragi.cc', + delegateOwnerWallet: '0x627d23D17a3eAaDB1D3823e73Ab80D474023Acab' }, { - "endpoint": "https://creatornode.audius.co", - "delegateOwnerWallet": "0xc8d0C29B6d540295e8fc8ac72456F2f4D41088c8" + endpoint: 'https://creatornode.audius.co', + delegateOwnerWallet: '0xc8d0C29B6d540295e8fc8ac72456F2f4D41088c8' }, { - "endpoint": "https://audius-cn1.tikilabs.com", - "delegateOwnerWallet": "0x159200F84c2cF000b3A014cD4D8244500CCc36ca" + endpoint: 'https://audius-cn1.tikilabs.com', + delegateOwnerWallet: '0x159200F84c2cF000b3A014cD4D8244500CCc36ca' }, { - "endpoint": "https://creatornode2.audius.co", - "delegateOwnerWallet": "0xf686647E3737d595C60c6DE2f5F90463542FE439" + endpoint: 'https://creatornode2.audius.co', + delegateOwnerWallet: '0xf686647E3737d595C60c6DE2f5F90463542FE439' }, { - "endpoint": "https://audius.rickyrombo.com", - "delegateOwnerWallet": "0xae5D0507b6653589A03ae5becb35EB0C160e7131" + endpoint: 'https://audius.rickyrombo.com', + delegateOwnerWallet: '0xae5D0507b6653589A03ae5becb35EB0C160e7131' }, { - "endpoint": "https://audius-discovery-2.cultur3stake.com", - "delegateOwnerWallet": "0xB98a729444E262ec9AC5F1539b68e69aEC37Ef2C" + endpoint: 'https://audius-discovery-2.cultur3stake.com', + delegateOwnerWallet: '0xB98a729444E262ec9AC5F1539b68e69aEC37Ef2C' }, { - "endpoint": "https://audius-discovery-3.cultur3stake.com", - "delegateOwnerWallet": "0xeEB73B487f8B4b23B757d9d738Bfc48fD0cc2606" + endpoint: 'https://audius-discovery-3.cultur3stake.com', + delegateOwnerWallet: '0xeEB73B487f8B4b23B757d9d738Bfc48fD0cc2606' }, { - "endpoint": "https://audius-discovery-4.cultur3stake.com", - "delegateOwnerWallet": "0x8162684B7a004AF41de09Bfd3bE6Ef53d64158F5" + endpoint: 'https://audius-discovery-4.cultur3stake.com', + delegateOwnerWallet: '0x8162684B7a004AF41de09Bfd3bE6Ef53d64158F5' }, { - "endpoint": "https://audius-discovery-7.cultur3stake.com", - "delegateOwnerWallet": "0xb03478a9e8fB1516AA91b272Afc7422b1c71D837" + endpoint: 'https://audius-discovery-7.cultur3stake.com', + delegateOwnerWallet: '0xb03478a9e8fB1516AA91b272Afc7422b1c71D837' }, { - "endpoint": "https://audius-discovery-8.cultur3stake.com", - "delegateOwnerWallet": "0x9D0a106E6cE7643DF87914c7387b3d864bfA152B" + endpoint: 'https://audius-discovery-8.cultur3stake.com', + delegateOwnerWallet: '0x9D0a106E6cE7643DF87914c7387b3d864bfA152B' }, { - "endpoint": "https://audius-discovery-10.cultur3stake.com", - "delegateOwnerWallet": "0x241Da559e97d2e76f37F7144a04623849Fa576ff" + endpoint: 'https://audius-discovery-10.cultur3stake.com', + delegateOwnerWallet: '0x241Da559e97d2e76f37F7144a04623849Fa576ff' }, { - "endpoint": "https://audius-discovery-1.cultur3stake.com", - "delegateOwnerWallet": "0x3f0cbB987b82f620dF313A74999f025E03A11a30" + endpoint: 'https://audius-discovery-1.cultur3stake.com', + delegateOwnerWallet: '0x3f0cbB987b82f620dF313A74999f025E03A11a30' }, { - "endpoint": "https://v.monophonic.digital", - "delegateOwnerWallet": "0x422541273087beC833c57D3c15B9e17F919bFB1F" + endpoint: 'https://v.monophonic.digital', + delegateOwnerWallet: '0x422541273087beC833c57D3c15B9e17F919bFB1F' }, { - "endpoint": "https://validator.stuffisup.com", - "delegateOwnerWallet": "0x3E2Cd6d498b412Da182Ef25837F72355f8918BE9" + endpoint: 'https://validator.stuffisup.com', + delegateOwnerWallet: '0x3E2Cd6d498b412Da182Ef25837F72355f8918BE9' }, { - "endpoint": "https://audius-01.staked.cloud", - "delegateOwnerWallet": "0x3001Be4f5Af5CBAa2d1bF241aEBE587913eDe14C" + endpoint: 'https://audius-01.staked.cloud', + delegateOwnerWallet: '0x3001Be4f5Af5CBAa2d1bF241aEBE587913eDe14C' }, { - "endpoint": "https://audius-standardvc-1-validator-3.figment.io", - "delegateOwnerWallet": "0xD2C877C16f2177d035D787833AeeB5B0d6737724" + endpoint: 'https://audius-standardvc-1-validator-3.figment.io', + delegateOwnerWallet: '0xD2C877C16f2177d035D787833AeeB5B0d6737724' }, { - "endpoint": "https://audius-02.staked.cloud", - "delegateOwnerWallet": "0xFc11796031A796c922F6246089aa27f08A582fc2" + endpoint: 'https://audius-02.staked.cloud', + delegateOwnerWallet: '0xFc11796031A796c922F6246089aa27f08A582fc2' }, { - "endpoint": "https://audius-03.staked.cloud", - "delegateOwnerWallet": "0x401C16123E36Dd0aE9c35F967C53C9E50f7F0768" + endpoint: 'https://audius-03.staked.cloud', + delegateOwnerWallet: '0x401C16123E36Dd0aE9c35F967C53C9E50f7F0768' }, { - "endpoint": "https://audius-04.staked.cloud", - "delegateOwnerWallet": "0x3A200E4dd0b8e6c9601cf47da2A86311A27C5b8D" + endpoint: 'https://audius-04.staked.cloud', + delegateOwnerWallet: '0x3A200E4dd0b8e6c9601cf47da2A86311A27C5b8D' }, { - "endpoint": "https://audius-discovery-3.altego.net", - "delegateOwnerWallet": "0x6209D38b940B5549b3aE54C498FD6841B6DDE0AA" + endpoint: 'https://audius-discovery-3.altego.net', + delegateOwnerWallet: '0x6209D38b940B5549b3aE54C498FD6841B6DDE0AA' }, { - "endpoint": "https://audius-discovery-2.altego.net", - "delegateOwnerWallet": "0x3FaF77e0307a3f5D552125e8791E289a575d0520" + endpoint: 'https://audius-discovery-2.altego.net', + delegateOwnerWallet: '0x3FaF77e0307a3f5D552125e8791E289a575d0520' }, { - "endpoint": "https://audius-discovery-1.altego.net", - "delegateOwnerWallet": "0xE77C7679ED77b175F935755EEb3a421635AF07EC" + endpoint: 'https://audius-discovery-1.altego.net', + delegateOwnerWallet: '0xE77C7679ED77b175F935755EEb3a421635AF07EC' }, { - "endpoint": "https://audius-05.staked.cloud", - "delegateOwnerWallet": "0x581261959005356F4cBC28141A458c4c046e52c1" + endpoint: 'https://audius-05.staked.cloud', + delegateOwnerWallet: '0x581261959005356F4cBC28141A458c4c046e52c1' }, { - "endpoint": "https://cn1.shakespearetech.com", - "delegateOwnerWallet": "0x44955AD360652c302644F564B42D1458C584A4ec" + endpoint: 'https://cn1.shakespearetech.com', + delegateOwnerWallet: '0x44955AD360652c302644F564B42D1458C584A4ec' }, { - "endpoint": "https://audius-figment-1-validator-18.figment.io", - "delegateOwnerWallet": "0x0D87407341FC34c08cFC107ee6922C3f3b6e8853" + endpoint: 'https://audius-figment-1-validator-18.figment.io', + delegateOwnerWallet: '0x0D87407341FC34c08cFC107ee6922C3f3b6e8853' }, { - "endpoint": "https://audius-content-1.figment.io", - "delegateOwnerWallet": "0xBfdE9a7DD3620CB6428463E9A9e9932B4d10fdc5" + endpoint: 'https://audius-content-1.figment.io', + delegateOwnerWallet: '0xBfdE9a7DD3620CB6428463E9A9e9932B4d10fdc5' }, { - "endpoint": "https://audius-content-2.figment.io", - "delegateOwnerWallet": "0x6444212FFc23a4CcF7460f8Fe6D0e6074db59036" + endpoint: 'https://audius-content-2.figment.io', + delegateOwnerWallet: '0x6444212FFc23a4CcF7460f8Fe6D0e6074db59036' }, { - "endpoint": "https://audius-content-3.figment.io", - "delegateOwnerWallet": "0xECEDCaABecb40ef4bE733BA47FaD612aeA1F396F" + endpoint: 'https://audius-content-3.figment.io', + delegateOwnerWallet: '0xECEDCaABecb40ef4bE733BA47FaD612aeA1F396F' }, { - "endpoint": "https://audius-creator-1.theblueprint.xyz", - "delegateOwnerWallet": "0x0E0aF7035581C615d07372be16D99A9B64E5B2e9" + endpoint: 'https://audius-creator-1.theblueprint.xyz', + delegateOwnerWallet: '0x0E0aF7035581C615d07372be16D99A9B64E5B2e9' }, { - "endpoint": "https://audius-creator-2.theblueprint.xyz", - "delegateOwnerWallet": "0x3D0dD2Cd46c2658d228769f4a394662946A28987" + endpoint: 'https://audius-creator-2.theblueprint.xyz', + delegateOwnerWallet: '0x3D0dD2Cd46c2658d228769f4a394662946A28987' }, { - "endpoint": "https://audius-creator-3.theblueprint.xyz", - "delegateOwnerWallet": "0x292B0d5987a7DE879909C48a54f0853C211da5f3" + endpoint: 'https://audius-creator-3.theblueprint.xyz', + delegateOwnerWallet: '0x292B0d5987a7DE879909C48a54f0853C211da5f3' }, { - "endpoint": "https://audius-creator-4.theblueprint.xyz", - "delegateOwnerWallet": "0xA815f8108C2772D24D7DCB866c861148f043224D" + endpoint: 'https://audius-creator-4.theblueprint.xyz', + delegateOwnerWallet: '0xA815f8108C2772D24D7DCB866c861148f043224D' }, { - "endpoint": "https://audius-creator-5.theblueprint.xyz", - "delegateOwnerWallet": "0x65Fe5BEf65A0E0b0520d6beE7767ea6Da7f792f6" + endpoint: 'https://audius-creator-5.theblueprint.xyz', + delegateOwnerWallet: '0x65Fe5BEf65A0E0b0520d6beE7767ea6Da7f792f6' }, { - "endpoint": "https://audius-creator-6.theblueprint.xyz", - "delegateOwnerWallet": "0x19B026B0f0Dbf619DBf8C4Efb0190308ace56366" + endpoint: 'https://audius-creator-6.theblueprint.xyz', + delegateOwnerWallet: '0x19B026B0f0Dbf619DBf8C4Efb0190308ace56366' }, { - "endpoint": "https://audius-creator-7.theblueprint.xyz", - "delegateOwnerWallet": "0x720758adEa33433833c14e2516fA421261D0875e" + endpoint: 'https://audius-creator-7.theblueprint.xyz', + delegateOwnerWallet: '0x720758adEa33433833c14e2516fA421261D0875e' }, { - "endpoint": "https://audius-creator-8.theblueprint.xyz", - "delegateOwnerWallet": "0x078842E88B82e6a69549043269AE3aADD5581105" + endpoint: 'https://audius-creator-8.theblueprint.xyz', + delegateOwnerWallet: '0x078842E88B82e6a69549043269AE3aADD5581105' }, { - "endpoint": "https://audius-creator-9.theblueprint.xyz", - "delegateOwnerWallet": "0x2DfC8152eF49e91b83638ad2bd0D2F9efC6f65b5" + endpoint: 'https://audius-creator-9.theblueprint.xyz', + delegateOwnerWallet: '0x2DfC8152eF49e91b83638ad2bd0D2F9efC6f65b5' }, { - "endpoint": "https://audius-creator-10.theblueprint.xyz", - "delegateOwnerWallet": "0x97BcBFA8289731d694440795094E831599Ab7A11" + endpoint: 'https://audius-creator-10.theblueprint.xyz', + delegateOwnerWallet: '0x97BcBFA8289731d694440795094E831599Ab7A11' }, { - "endpoint": "https://audius-creator-11.theblueprint.xyz", - "delegateOwnerWallet": "0xfe38c5Ea3579c9333fE302414fe1895F7a320beF" + endpoint: 'https://audius-creator-11.theblueprint.xyz', + delegateOwnerWallet: '0xfe38c5Ea3579c9333fE302414fe1895F7a320beF' }, { - "endpoint": "https://audius-creator-12.theblueprint.xyz", - "delegateOwnerWallet": "0x8C78ef541135e2cb037f91109fb8EE780fa4709d" + endpoint: 'https://audius-creator-12.theblueprint.xyz', + delegateOwnerWallet: '0x8C78ef541135e2cb037f91109fb8EE780fa4709d' }, { - "endpoint": "https://audius-creator-13.theblueprint.xyz", - "delegateOwnerWallet": "0x75D2269D18C59CC2ED00a63a40367AC495E3F330" + endpoint: 'https://audius-creator-13.theblueprint.xyz', + delegateOwnerWallet: '0x75D2269D18C59CC2ED00a63a40367AC495E3F330' }, { - "endpoint": "https://audius-creator-14.theblueprint.xyz", - "delegateOwnerWallet": "0xEDe07aCa59815fbaa75c4f813dCDD1390D371071" + endpoint: 'https://audius-creator-14.theblueprint.xyz', + delegateOwnerWallet: '0xEDe07aCa59815fbaa75c4f813dCDD1390D371071' }, { - "endpoint": "https://audius-creator-15.theblueprint.xyz", - "delegateOwnerWallet": "0xCF3f359BfdE7bcAfE4bc058B6DFae51aBe204aB4" + endpoint: 'https://audius-creator-15.theblueprint.xyz', + delegateOwnerWallet: '0xCF3f359BfdE7bcAfE4bc058B6DFae51aBe204aB4' }, { - "endpoint": "https://audius-creator-16.theblueprint.xyz", - "delegateOwnerWallet": "0x8449169096550905B903b6803FB3b64285112603" + endpoint: 'https://audius-creator-16.theblueprint.xyz', + delegateOwnerWallet: '0x8449169096550905B903b6803FB3b64285112603' }, { - "endpoint": "https://audius-creator-17.theblueprint.xyz", - "delegateOwnerWallet": "0x16e8DF288BF5DcD507615A715A2a6155F149a865" + endpoint: 'https://audius-creator-17.theblueprint.xyz', + delegateOwnerWallet: '0x16e8DF288BF5DcD507615A715A2a6155F149a865' }, { - "endpoint": "https://audius-figment-1-validator-19.figment.io", - "delegateOwnerWallet": "0xDB12172166E2675d1EcdE4adFE046e217504AB71" + endpoint: 'https://audius-figment-1-validator-19.figment.io', + delegateOwnerWallet: '0xDB12172166E2675d1EcdE4adFE046e217504AB71' }, { - "endpoint": "https://audius-content-4.figment.io", - "delegateOwnerWallet": "0x08fEF3884Db16E2E6211272cdC9Eee68E8b63b09" + endpoint: 'https://audius-content-4.figment.io', + delegateOwnerWallet: '0x08fEF3884Db16E2E6211272cdC9Eee68E8b63b09' }, { - "endpoint": "https://audius-content-5.figment.io", - "delegateOwnerWallet": "0x10fF8197f2e94eF880d940D2414E0A14983c3bFE" + endpoint: 'https://audius-content-5.figment.io', + delegateOwnerWallet: '0x10fF8197f2e94eF880d940D2414E0A14983c3bFE' }, { - "endpoint": "https://audius-content-6.figment.io", - "delegateOwnerWallet": "0x68a4Bd6b4177ffB025AF9844cBE4Fe31348AEE1D" + endpoint: 'https://audius-content-6.figment.io', + delegateOwnerWallet: '0x68a4Bd6b4177ffB025AF9844cBE4Fe31348AEE1D' }, { - "endpoint": "https://audius-content-7.figment.io", - "delegateOwnerWallet": "0xf45a6DBf3ce0201F4012a19b1fB04D4f05B53a37" + endpoint: 'https://audius-content-7.figment.io', + delegateOwnerWallet: '0xf45a6DBf3ce0201F4012a19b1fB04D4f05B53a37' }, { - "endpoint": "https://audius-content-8.figment.io", - "delegateOwnerWallet": "0x9708Fb04DeA029212126255B311a21F1F884cCB4" + endpoint: 'https://audius-content-8.figment.io', + delegateOwnerWallet: '0x9708Fb04DeA029212126255B311a21F1F884cCB4' }, { - "endpoint": "https://audius-content-9.figment.io", - "delegateOwnerWallet": "0x7c34c9709ed69513D55dF2020e799DA44fC52E6e" + endpoint: 'https://audius-content-9.figment.io', + delegateOwnerWallet: '0x7c34c9709ed69513D55dF2020e799DA44fC52E6e' }, { - "endpoint": "https://audius-content-10.figment.io", - "delegateOwnerWallet": "0xff753331CEa586DD5B23bd21222a3c902909F2dd" + endpoint: 'https://audius-content-10.figment.io', + delegateOwnerWallet: '0xff753331CEa586DD5B23bd21222a3c902909F2dd' }, { - "endpoint": "https://audius-content-11.figment.io", - "delegateOwnerWallet": "0xC9721F892BcC8822eb34237E875BE93904f11073" + endpoint: 'https://audius-content-11.figment.io', + delegateOwnerWallet: '0xC9721F892BcC8822eb34237E875BE93904f11073' }, { - "endpoint": "https://content.grassfed.network", - "delegateOwnerWallet": "0x33Ab85445c8A2690B9488e9fB5E6A9849d3a18d3" + endpoint: 'https://content.grassfed.network', + delegateOwnerWallet: '0x33Ab85445c8A2690B9488e9fB5E6A9849d3a18d3' }, { - "endpoint": "https://audius-content-1.cultur3stake.com", - "delegateOwnerWallet": "0xCEb6a23d6132Cfe329b3c8E3c45f9DDc28A62Bd4" + endpoint: 'https://audius-content-1.cultur3stake.com', + delegateOwnerWallet: '0xCEb6a23d6132Cfe329b3c8E3c45f9DDc28A62Bd4' }, { - "endpoint": "https://audius-content-2.cultur3stake.com", - "delegateOwnerWallet": "0x2e9e7A4e35C3136fB651a0dBF8f91c9f5C27BBf7" + endpoint: 'https://audius-content-2.cultur3stake.com', + delegateOwnerWallet: '0x2e9e7A4e35C3136fB651a0dBF8f91c9f5C27BBf7' }, { - "endpoint": "https://audius-content-3.cultur3stake.com", - "delegateOwnerWallet": "0x742da6cAc2782FeA961bB7B9150a048F5167D1e1" + endpoint: 'https://audius-content-3.cultur3stake.com', + delegateOwnerWallet: '0x742da6cAc2782FeA961bB7B9150a048F5167D1e1' }, { - "endpoint": "https://audius-content-4.cultur3stake.com", - "delegateOwnerWallet": "0xcbb0cE7481685587b0988195Ff0cD6AA1A701657" + endpoint: 'https://audius-content-4.cultur3stake.com', + delegateOwnerWallet: '0xcbb0cE7481685587b0988195Ff0cD6AA1A701657' }, { - "endpoint": "https://audius-content-5.cultur3stake.com", - "delegateOwnerWallet": "0xFec4708155277D35d568aD6Ca322262577683584" + endpoint: 'https://audius-content-5.cultur3stake.com', + delegateOwnerWallet: '0xFec4708155277D35d568aD6Ca322262577683584' }, { - "endpoint": "https://audius-content-6.cultur3stake.com", - "delegateOwnerWallet": "0x3Db0E61591063310eEd22fd57E6f7F1ab2Bb538E" + endpoint: 'https://audius-content-6.cultur3stake.com', + delegateOwnerWallet: '0x3Db0E61591063310eEd22fd57E6f7F1ab2Bb538E' }, { - "endpoint": "https://audius-content-7.cultur3stake.com", - "delegateOwnerWallet": "0xE6C00e7E8d582fD2856718a5439f1aeEB68e27E5" + endpoint: 'https://audius-content-7.cultur3stake.com', + delegateOwnerWallet: '0xE6C00e7E8d582fD2856718a5439f1aeEB68e27E5' }, { - "endpoint": "https://audius-content-8.cultur3stake.com", - "delegateOwnerWallet": "0xff432F81D0eb77DA5973Cf55e24A897882fdd3E6" + endpoint: 'https://audius-content-8.cultur3stake.com', + delegateOwnerWallet: '0xff432F81D0eb77DA5973Cf55e24A897882fdd3E6' }, { - "endpoint": "https://audius-content-9.cultur3stake.com", - "delegateOwnerWallet": "0xB6f506557B2e9026743FeA6157e52F204D26690F" + endpoint: 'https://audius-content-9.cultur3stake.com', + delegateOwnerWallet: '0xB6f506557B2e9026743FeA6157e52F204D26690F' }, { - "endpoint": "https://audius-content-10.cultur3stake.com", - "delegateOwnerWallet": "0x2AF4598D3CF95D8e76987c02BC8A8D71F58d49d5" + endpoint: 'https://audius-content-10.cultur3stake.com', + delegateOwnerWallet: '0x2AF4598D3CF95D8e76987c02BC8A8D71F58d49d5' }, { - "endpoint": "https://audius-content-11.cultur3stake.com", - "delegateOwnerWallet": "0xB2684Cca5281d2bA6D9Ce66Cca215635FF2Ba466" + endpoint: 'https://audius-content-11.cultur3stake.com', + delegateOwnerWallet: '0xB2684Cca5281d2bA6D9Ce66Cca215635FF2Ba466' }, { - "endpoint": "https://audius-content-12.cultur3stake.com", - "delegateOwnerWallet": "0x28924C99822eA08bFCeDdE3a411308633948b349" + endpoint: 'https://audius-content-12.cultur3stake.com', + delegateOwnerWallet: '0x28924C99822eA08bFCeDdE3a411308633948b349' }, { - "endpoint": "https://audius-content-13.cultur3stake.com", - "delegateOwnerWallet": "0xcb23908aa0dCDef762ebEaA38391D8fFC69E6e8F" + endpoint: 'https://audius-content-13.cultur3stake.com', + delegateOwnerWallet: '0xcb23908aa0dCDef762ebEaA38391D8fFC69E6e8F' }, { - "endpoint": "https://audius-content-12.figment.io", - "delegateOwnerWallet": "0x780641e157621621658F118375dc1B36Ea514d46" + endpoint: 'https://audius-content-12.figment.io', + delegateOwnerWallet: '0x780641e157621621658F118375dc1B36Ea514d46' }, { - "endpoint": "https://cn0.mainnet.audiusindex.org", - "delegateOwnerWallet": "0xf9b373E223b73473C59034072263f52aEF60133B" + endpoint: 'https://cn0.mainnet.audiusindex.org', + delegateOwnerWallet: '0xf9b373E223b73473C59034072263f52aEF60133B' }, { - "endpoint": "https://cn1.mainnet.audiusindex.org", - "delegateOwnerWallet": "0x9b0D01bd7F01BD6916Ba139743Ce9C524B9375Dd" + endpoint: 'https://cn1.mainnet.audiusindex.org', + delegateOwnerWallet: '0x9b0D01bd7F01BD6916Ba139743Ce9C524B9375Dd' }, { - "endpoint": "https://cn2.mainnet.audiusindex.org", - "delegateOwnerWallet": "0xf6e297203c0086dc229DAE17F5b61a15F42A1A00" + endpoint: 'https://cn2.mainnet.audiusindex.org', + delegateOwnerWallet: '0xf6e297203c0086dc229DAE17F5b61a15F42A1A00' }, { - "endpoint": "https://cn3.mainnet.audiusindex.org", - "delegateOwnerWallet": "0x24C4b2cb6eC4c87a03F66723d8750dbe98Fa3e4f" + endpoint: 'https://cn3.mainnet.audiusindex.org', + delegateOwnerWallet: '0x24C4b2cb6eC4c87a03F66723d8750dbe98Fa3e4f' }, { - "endpoint": "https://audius-content-13.figment.io", - "delegateOwnerWallet": "0x33a2da466B14990E0124383204b06F9196f62d8e" + endpoint: 'https://audius-content-13.figment.io', + delegateOwnerWallet: '0x33a2da466B14990E0124383204b06F9196f62d8e' }, { - "endpoint": "https://audius-content-14.figment.io", - "delegateOwnerWallet": "0x817c513C1B702eA0BdD4F8C1204C60372f715006" + endpoint: 'https://audius-content-14.figment.io', + delegateOwnerWallet: '0x817c513C1B702eA0BdD4F8C1204C60372f715006' }, { - "endpoint": "https://cn4.mainnet.audiusindex.org", - "delegateOwnerWallet": "0x69e749266C59757dA81F8C659Be6B07ce5Bac6C9" + endpoint: 'https://cn4.mainnet.audiusindex.org', + delegateOwnerWallet: '0x69e749266C59757dA81F8C659Be6B07ce5Bac6C9' } ], - "antiAbuseOracleNodes": { - "endpoints": [ - "https://discoveryprovider.audius.co", - "https://audius-oracle.creatorseed.com", - "https://oracle.audius.endl.net" + antiAbuseOracleNodes: { + endpoints: [ + 'https://discoveryprovider.audius.co', + 'https://audius-oracle.creatorseed.com', + 'https://oracle.audius.endl.net' ], - "registeredAddresses": [ - "0x9811BA3eAB1F2Cd9A2dFeDB19e8c2a69729DC8b6", - "0xe60d50356cd891f56B744165fcc1D8B352201A76", - "0x7A03cFAE79266683D9706731D6E187868E939c9C" + registeredAddresses: [ + '0x9811BA3eAB1F2Cd9A2dFeDB19e8c2a69729DC8b6', + '0xe60d50356cd891f56B744165fcc1D8B352201A76', + '0x7A03cFAE79266683D9706731D6E187868E939c9C' ] }, - "identityService": "https://identityservice.audius.co" + identityService: 'https://identityservice.audius.co' }, - "acdc": { - "entityManagerContractAddress": "0x1Cd8a543596D499B9b6E7a6eC15ECd2B7857Fd64", - "chainId": 31524 + acdc: { + entityManagerContractAddress: '0x1Cd8a543596D499B9b6E7a6eC15ECd2B7857Fd64', + chainId: 31524 }, - "solana": { - "claimableTokensProgramAddress": "Ewkv3JahEFRKkcJmpoKB7pXbnUHwjAyXiwEo4ZY2rezQ", - "rewardManagerProgramAddress": "DDZDcYdQFEMwcu2Mwo75yGFjJ1mUQyyXLWzhZLEVFcei", - "rewardManagerStateAddress": "71hWFVYokLaN1PNYzTAWi13EfJ7Xt9VbSWUKsXUT8mxE", - "paymentRouterProgramAddress": "paytYpX3LPN98TAeen6bFFeraGSuWnomZmCXjAsoqPa", - "stakingBridgeProgramAddress": "stkB5DZziVJT1C1VmzvDdRtdWxfs5nwcHViiaNBDK31", - "rpcEndpoint": "https://carolina-8qh733-fast-mainnet.helius-rpc.com", - "usdcTokenMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "wAudioTokenMint": "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM", - "rewardManagerLookupTableAddress": "4UQwpGupH66RgQrWRqmPM9Two6VJEE68VZ7GeqZ3mvVv" + solana: { + claimableTokensProgramAddress: + 'Ewkv3JahEFRKkcJmpoKB7pXbnUHwjAyXiwEo4ZY2rezQ', + rewardManagerProgramAddress: 'DDZDcYdQFEMwcu2Mwo75yGFjJ1mUQyyXLWzhZLEVFcei', + rewardManagerStateAddress: '71hWFVYokLaN1PNYzTAWi13EfJ7Xt9VbSWUKsXUT8mxE', + paymentRouterProgramAddress: 'paytYpX3LPN98TAeen6bFFeraGSuWnomZmCXjAsoqPa', + stakingBridgeProgramAddress: 'stkB5DZziVJT1C1VmzvDdRtdWxfs5nwcHViiaNBDK31', + rpcEndpoint: 'https://carolina-8qh733-fast-mainnet.helius-rpc.com', + usdcTokenMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + wAudioTokenMint: '9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM', + rewardManagerLookupTableAddress: + '4UQwpGupH66RgQrWRqmPM9Two6VJEE68VZ7GeqZ3mvVv' }, - "ethereum": { - "rpcEndpoint": "https://eth-client.audius.co", - "addresses": { - "ethRewardsManagerAddress": "0x5aa6B99A2B461bA8E97207740f0A689C5C39C3b0", - "serviceProviderFactoryAddress": "0xD17A9bc90c582249e211a4f4b16721e7f65156c8", - "serviceTypeManagerAddress": "0x9EfB0f4F38aFbb4b0984D00C126E97E21b8417C5", - "audiusTokenAddress": "0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998", - "audiusWormholeAddress": "0x6E7a1F7339bbB62b23D44797b63e4258d283E095", - "delegateManagerAddress": "0x4d7968ebfD390D5E7926Cb3587C39eFf2F9FB225", - "stakingAddress": "0xe6D97B2099F142513be7A2a068bE040656Ae4591", - "governanceAddress": "0x4DEcA517D6817B6510798b7328F2314d3003AbAC", - "registryAddress": "0xd976d3b4f4e22a238c1A736b6612D22f17b6f64C", - "claimsManagerAddress": "0x44617F9dCEd9787C3B06a05B35B4C779a2AA1334", - "trustedNotifierManagerAddress": "0x6f08105c8CEef2BC5653640fcdbBE1e7bb519D39" + ethereum: { + rpcEndpoint: 'https://eth-client.audius.co', + addresses: { + ethRewardsManagerAddress: '0x5aa6B99A2B461bA8E97207740f0A689C5C39C3b0', + serviceProviderFactoryAddress: + '0xD17A9bc90c582249e211a4f4b16721e7f65156c8', + serviceTypeManagerAddress: '0x9EfB0f4F38aFbb4b0984D00C126E97E21b8417C5' } } } diff --git a/packages/sdk/src/sdk/config/types.ts b/packages/sdk/src/sdk/config/types.ts index 453b7e403ef..270309ef0d1 100644 --- a/packages/sdk/src/sdk/config/types.ts +++ b/packages/sdk/src/sdk/config/types.ts @@ -34,14 +34,6 @@ export type SdkServicesConfig = { serviceTypeManagerAddress: Hex serviceProviderFactoryAddress: Hex ethRewardsManagerAddress: Hex - audiusTokenAddress: Hex - audiusWormholeAddress: Hex - delegateManagerAddress: Hex - stakingAddress: Hex - governanceAddress: Hex - registryAddress: Hex - claimsManagerAddress: Hex - trustedNotifierManagerAddress: Hex } } } diff --git a/packages/sdk/src/sdk/createSdkWithServices.ts b/packages/sdk/src/sdk/createSdkWithServices.ts index 968ddffeb8d..722b8987c46 100644 --- a/packages/sdk/src/sdk/createSdkWithServices.ts +++ b/packages/sdk/src/sdk/createSdkWithServices.ts @@ -1,6 +1,5 @@ -import { createPublicClient, createWalletClient, http, type Hex } from 'viem' +import { type Hex } from 'viem' import { privateKeyToAccount } from 'viem/accounts' -import { mainnet } from 'viem/chains' import { ResolveApi } from './api/ResolveApi' import { AlbumsApi } from './api/albums/AlbumsApi' @@ -45,30 +44,6 @@ import { EntityManagerClient, getDefaultEntityManagerConfig } from './services/EntityManager' -import { - EthRewardsManagerClient, - getDefaultEthRewardsManagerConfig, - getDefaultServiceProviderFactoryConfig, - getDefaultServiceTypeManagerConfig, - ServiceProviderFactoryClient, - ServiceTypeManagerClient, - AudiusTokenClient, - getDefaultAudiusTokenConfig, - ClaimsManagerClient, - getDefaultClaimsManagerConfig, - DelegateManagerClient, - getDefaultDelegateManagerConfig, - StakingClient, - getDefaultStakingConfig, - TrustedNotifierManagerClient, - getDefaultTrustedNotifierManagerConfig, - AudiusWormholeClient, - getDefaultWormholeConfig, - RegistryClient, - getDefaultRegistryConfig, - GovernanceClient, - getDefaultGovernanceConfig -} from './services/Ethereum' import { Logger } from './services/Logger' import { SolanaRelay } from './services/Solana/SolanaRelay' import { SolanaRelayWalletAdapter } from './services/Solana/SolanaRelayWalletAdapter' @@ -183,20 +158,6 @@ const initializeServices = ({ apiSecret }) - const ethPublicClient = - config.services?.ethPublicClient ?? - createPublicClient({ - chain: mainnet, - transport: http(servicesConfig.ethereum.rpcEndpoint) - }) - - const ethWalletClient = - config.services?.ethWalletClient ?? - createWalletClient({ - chain: mainnet, - transport: http(servicesConfig.ethereum.rpcEndpoint) - }) - const storageNodeSelector = config.services?.storageNodeSelector ?? new StorageNodeSelector({ @@ -315,96 +276,12 @@ const initializeServices = ({ solanaClient }) - /* Ethereum Contracts */ - const audiusTokenClient = - config.services?.audiusTokenClient ?? - new AudiusTokenClient({ - audiusWalletClient, - ethPublicClient, - ethWalletClient, - ...getDefaultAudiusTokenConfig(servicesConfig) - }) - - const claimsManagerClient = - config.services?.claimsManagerClient ?? - new ClaimsManagerClient({ - ethPublicClient, - ...getDefaultClaimsManagerConfig(servicesConfig) - }) - - const delegateManagerClient = - config.services?.delegateManagerClient ?? - new DelegateManagerClient({ - ethPublicClient, - ...getDefaultDelegateManagerConfig(servicesConfig) - }) - - const stakingClient = - config.services?.stakingClient ?? - new StakingClient({ - ethPublicClient, - ...getDefaultStakingConfig(servicesConfig) - }) - - const trustedNotifierManagerClient = - config.services?.trustedNotifierManagerClient ?? - new TrustedNotifierManagerClient({ - ethPublicClient, - ...getDefaultTrustedNotifierManagerConfig(servicesConfig) - }) - - const audiusWormholeClient = - config.services?.audiusWormholeClient ?? - new AudiusWormholeClient({ - audiusWalletClient, - ethPublicClient, - ethWalletClient, - ...getDefaultWormholeConfig(servicesConfig) - }) - - const registryClient = - config.services?.registryClient ?? - new RegistryClient({ - ethPublicClient, - ...getDefaultRegistryConfig(servicesConfig) - }) - - const governanceClient = - config.services?.governanceClient ?? - new GovernanceClient({ - ethPublicClient, - ...getDefaultGovernanceConfig(servicesConfig) - }) - - const serviceTypeManagerClient = - config.services?.serviceTypeManagerClient ?? - new ServiceTypeManagerClient({ - ethPublicClient, - ...getDefaultServiceTypeManagerConfig(servicesConfig) - }) - - const serviceProviderFactoryClient = - config.services?.serviceProviderFactoryClient ?? - new ServiceProviderFactoryClient({ - ethPublicClient, - ...getDefaultServiceProviderFactoryConfig(servicesConfig) - }) - - const ethRewardsManagerClient = - config.services?.ethRewardsManagerClient ?? - new EthRewardsManagerClient({ - ethPublicClient, - ...getDefaultEthRewardsManagerConfig(servicesConfig) - }) - const services: ServicesContainer = { storageNodeSelector, antiAbuseOracleSelector, entityManager, storage, audiusWalletClient, - ethPublicClient, - ethWalletClient, claimableTokensClient, rewardManagerClient, paymentRouterClient, @@ -412,17 +289,6 @@ const initializeServices = ({ solanaWalletAdapter, solanaRelay, antiAbuseOracle, - audiusTokenClient, - claimsManagerClient, - delegateManagerClient, - stakingClient, - trustedNotifierManagerClient, - audiusWormholeClient, - registryClient, - governanceClient, - serviceTypeManagerClient, - serviceProviderFactoryClient, - ethRewardsManagerClient, emailEncryptionService, archiverService, logger diff --git a/packages/sdk/src/sdk/scripts/generateServicesConfig.ts b/packages/sdk/src/sdk/scripts/generateServicesConfig.ts index 4be72cc502c..6ae3b4f6303 100644 --- a/packages/sdk/src/sdk/scripts/generateServicesConfig.ts +++ b/packages/sdk/src/sdk/scripts/generateServicesConfig.ts @@ -1,18 +1,16 @@ import { promises } from 'fs' import path from 'path' -import { createPublicClient, http } from 'viem' +import { + EthRewardsManager, + ServiceProviderFactory, + ServiceTypeManager +} from '@audius/eth' +import { range } from 'lodash' +import { createPublicClient, hexToString, http } from 'viem' import { mainnet } from 'viem/chains' import type { SdkServicesConfig } from '../config/types' -import { - EthRewardsManagerClient, - getDefaultEthRewardsManagerConfig, - getDefaultServiceProviderFactoryConfig, - getDefaultServiceTypeManagerConfig, - ServiceProviderFactoryClient, - ServiceTypeManagerClient -} from '../services/Ethereum' const { writeFile } = promises @@ -54,16 +52,7 @@ const productionConfig: SdkServicesConfig = { ethRewardsManagerAddress: '0x5aa6B99A2B461bA8E97207740f0A689C5C39C3b0', serviceProviderFactoryAddress: '0xD17A9bc90c582249e211a4f4b16721e7f65156c8', - serviceTypeManagerAddress: '0x9EfB0f4F38aFbb4b0984D00C126E97E21b8417C5', - audiusTokenAddress: '0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998', - audiusWormholeAddress: '0x6E7a1F7339bbB62b23D44797b63e4258d283E095', - delegateManagerAddress: '0x4d7968ebfD390D5E7926Cb3587C39eFf2F9FB225', - stakingAddress: '0xe6D97B2099F142513be7A2a068bE040656Ae4591', - governanceAddress: '0x4DEcA517D6817B6510798b7328F2314d3003AbAC', - registryAddress: '0xd976d3b4f4e22a238c1A736b6612D22f17b6f64C', - claimsManagerAddress: '0x44617F9dCEd9787C3B06a05B35B4C779a2AA1334', - trustedNotifierManagerAddress: - '0x6f08105c8CEef2BC5653640fcdbBE1e7bb519D39' + serviceTypeManagerAddress: '0x9EfB0f4F38aFbb4b0984D00C126E97E21b8417C5' } } } @@ -106,19 +95,18 @@ const developmentConfig: SdkServicesConfig = { addresses: { ethRewardsManagerAddress: '0x', serviceProviderFactoryAddress: '0x', - serviceTypeManagerAddress: '0x', - audiusTokenAddress: '0xdcB2fC9469808630DD0744b0adf97C0003fC29B2', - audiusWormholeAddress: '0x', - delegateManagerAddress: '0x', - stakingAddress: '0x', - governanceAddress: '0x', - registryAddress: '0x', - claimsManagerAddress: '0x', - trustedNotifierManagerAddress: '0x' + serviceTypeManagerAddress: '0x' } } } +const DISCOVERY_NODE_SERVICE_TYPE = + '0x646973636f766572792d6e6f6465000000000000000000000000000000000000' as const +const CONTENT_NODE_SERVICE_TYPE = + '0x636f6e74656e742d6e6f64650000000000000000000000000000000000000000' as const +const VALIDATOR_SERVICE_TYPE = + '0x76616c696461746f720000000000000000000000000000000000000000000000' as const + const generateServicesConfig = async ( config: SdkServicesConfig ): Promise => { @@ -127,33 +115,54 @@ const generateServicesConfig = async ( transport: http(config.ethereum.rpcEndpoint) }) - const serviceProviderFactory = new ServiceProviderFactoryClient({ - ethPublicClient, - ...getDefaultServiceProviderFactoryConfig(config) - }) - const ethRewardsManager = new EthRewardsManagerClient({ - ethPublicClient, - ...getDefaultEthRewardsManagerConfig(config) - }) - const serviceTypeManager = new ServiceTypeManagerClient({ - ethPublicClient, - ...getDefaultServiceTypeManagerConfig(config) - }) + const spfAddress = config.ethereum.addresses.serviceProviderFactoryAddress + const stmAddress = config.ethereum.addresses.serviceTypeManagerAddress + const ermAddress = config.ethereum.addresses.ethRewardsManagerAddress - const validators = await serviceProviderFactory.getValidators() - const contentNodes = await serviceProviderFactory.getContentNodes() + // Fetch service providers by type + const getServiceEndpoints = async (serviceType: `0x${string}`) => { + const count = await ethPublicClient.readContract({ + address: spfAddress, + abi: ServiceProviderFactory.abi, + functionName: 'getTotalServiceTypeProviders', + args: [serviceType] + }) + const list = await Promise.all( + range(1, Number(count) + 1).map((i) => + ethPublicClient.readContract({ + address: spfAddress, + abi: ServiceProviderFactory.abi, + functionName: 'getServiceEndpointInfo', + args: [serviceType, BigInt(i)] + }) + ) + ) + return list.filter(([_, endpoint]) => endpoint !== '') + } + + const validators = await getServiceEndpoints(VALIDATOR_SERVICE_TYPE) + const contentNodes = await getServiceEndpoints(CONTENT_NODE_SERVICE_TYPE) const storageNodes = validators.concat(contentNodes) if (!storageNodes || storageNodes.length === 0) { throw Error('Storage node services not found') } - const antiAbuseAddresses = - await ethRewardsManager.getAntiAbuseOracleAddresses() + const antiAbuseAddresses = await ethPublicClient.readContract({ + address: ermAddress, + abi: EthRewardsManager.abi, + functionName: 'getAntiAbuseOracleAddresses' + }) if (!antiAbuseAddresses || antiAbuseAddresses.length === 0) { throw Error('Anti Abuse node services not found') } - const minVersion = await serviceTypeManager.getDiscoveryNodeVersion() + const versionHex = await ethPublicClient.readContract({ + address: stmAddress, + abi: ServiceTypeManager.abi, + functionName: 'getCurrentVersion', + args: [DISCOVERY_NODE_SERVICE_TYPE] + }) + const minVersion = hexToString(versionHex, { size: 32 }) config.network.minVersion = minVersion config.network.storageNodes = storageNodes.map( diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/AudiusTokenClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/AudiusTokenClient.ts deleted file mode 100644 index 389781430e4..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/AudiusTokenClient.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { AudiusToken, AudiusTokenTypes } from '@audius/eth' -import { - type Hex, - type TypedDataDefinition, - type PublicClient, - type WalletClient, - parseSignature -} from 'viem' - -import { parseParams } from '../../../../utils/parseParams' -import type { AudiusWalletClient } from '../../../AudiusWalletClient' - -import { - BalanceOfSchema, - PermitSchema, - type AudiusTokenConfig, - type PermitParams, - type BalanceOfParams -} from './types' - -const ONE_HOUR_IN_MS = 1000 * 60 * 60 - -export class AudiusTokenClient { - public readonly contractAddress: Hex - - private readonly audiusWalletClient: AudiusWalletClient - private readonly walletClient: WalletClient - private readonly publicClient: PublicClient - - constructor(config: AudiusTokenConfig) { - this.audiusWalletClient = config.audiusWalletClient - this.walletClient = config.ethWalletClient - this.publicClient = config.ethPublicClient - this.contractAddress = config.address - } - - public async permit(params: PermitParams) { - const { - args: { - owner = (await this.audiusWalletClient.getAddresses())[0], - spender, - value, - deadline = BigInt(Date.now() + ONE_HOUR_IN_MS) - }, - ...other - } = await parseParams('permit', PermitSchema)(params) - - // Get args - if (owner === undefined) { - throw new Error( - 'Parameter "owner" could not be derived from wallet client.' - ) - } - const nonce = await this.publicClient.readContract({ - address: this.contractAddress, - abi: AudiusToken.abi, - functionName: 'nonces', - args: [owner] - }) - - // Sign the typed data with the user's Audius wallet - const typedData: TypedDataDefinition = { - primaryType: 'Permit', - domain: await this.domain(), - message: { owner, spender, value, nonce, deadline }, - types: AudiusToken.types - } - const signature = await this.audiusWalletClient.signTypedData(typedData) - const { r, s, v } = parseSignature(signature) - - // Send the transaction on Ethereum - const { request } = await this.publicClient.simulateContract({ - address: this.contractAddress, - abi: AudiusToken.abi, - functionName: 'permit', - args: [owner, spender, value, deadline, Number(v), r, s] as const, - ...other - }) - return await this.walletClient.writeContract(request) - } - - public async balanceOf(params: BalanceOfParams) { - const { account } = await parseParams('balanceOf', BalanceOfSchema)(params) - const balance = await this.publicClient.readContract({ - address: this.contractAddress, - abi: AudiusToken.abi, - functionName: 'balanceOf', - args: [account] - }) - return BigInt(balance) - } - - private async domain(): Promise< - TypedDataDefinition['domain'] - > { - return { - name: await this.publicClient.readContract({ - abi: AudiusToken.abi, - address: this.contractAddress, - functionName: 'name' - }), - chainId: BigInt(await this.publicClient.getChainId()), - verifyingContract: this.contractAddress, - version: '1' - } - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/getDefaultConfig.ts deleted file mode 100644 index 3f30be9be77..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { AudiusTokenConfigInternal } from './types' - -export const getDefaultAudiusTokenConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): AudiusTokenConfigInternal => ({ - address: config.ethereum.addresses.audiusTokenAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/index.ts deleted file mode 100644 index 467655079fa..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './AudiusTokenClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/types.ts deleted file mode 100644 index 2fc29525d24..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusToken/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { Account, Hex, PublicClient, Transport, WalletClient } from 'viem' -import type { mainnet } from 'viem/chains' -import { z } from 'zod' - -import { EthAddressSchema } from '../../../../types/EthAddress' -import type { AudiusWalletClient } from '../../../AudiusWalletClient' -import { GasFeeSchema } from '../types' - -export type AudiusTokenConfig = AudiusTokenConfigInternal & { - audiusWalletClient: AudiusWalletClient - ethPublicClient: PublicClient - ethWalletClient: WalletClient -} - -export type AudiusTokenConfigInternal = { - address: Hex -} - -export const BalanceOfSchema = z.object({ - account: EthAddressSchema -}) - -export type BalanceOfParams = z.input - -export const PermitSchema = GasFeeSchema.and( - z.object({ - args: z.object({ - owner: EthAddressSchema.optional(), - spender: EthAddressSchema, - value: z.bigint(), - deadline: z.bigint().optional() - }), - account: z.custom().optional() - }) -) - -export type PermitParams = z.input diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/AudiusWormholeClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/AudiusWormholeClient.ts deleted file mode 100644 index 7f860d3e306..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/AudiusWormholeClient.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { AudiusWormhole, type AudiusWormholeTypes } from '@audius/eth' -import { - type Hex, - type PublicClient, - type TypedDataDefinition, - type WalletClient, - parseSignature -} from 'viem' - -import { parseParams } from '../../../../utils/parseParams' -import type { AudiusWalletClient } from '../../../AudiusWalletClient' - -import { - TransferTokensSchema, - type TransferTokensParams, - type AudiusWormholeConfig -} from './types' - -const ONE_HOUR_IN_S = 60 * 60 - -export class AudiusWormholeClient { - public readonly contractAddress: Hex - - private readonly audiusWalletClient: AudiusWalletClient - private readonly walletClient: WalletClient - private readonly publicClient: PublicClient - - constructor(config: AudiusWormholeConfig) { - this.audiusWalletClient = config.audiusWalletClient - this.walletClient = config.ethWalletClient - this.publicClient = config.ethPublicClient - this.contractAddress = config.address - } - - async transferTokens(params: TransferTokensParams) { - const { - args: { - from = (await this.audiusWalletClient.getAddresses())[0], - amount, - recipientChain, - recipient, - deadline = BigInt(Math.round(Date.now() / 1000) + ONE_HOUR_IN_S), - arbiterFee = BigInt(0) - }, - ...other - } = await parseParams('transferTokens', TransferTokensSchema)(params) - - // Get args - if (from === undefined) { - throw new Error( - 'Parameter "from" could not be derived from wallet client.' - ) - } - const nonce = await this.publicClient.readContract({ - address: this.contractAddress, - abi: AudiusWormhole.abi, - functionName: 'nonces', - args: [from] - }) - - // Sign the typed data with the user's Audius wallet - const typedData: TypedDataDefinition< - AudiusWormholeTypes, - 'TransferTokens' - > = { - primaryType: 'TransferTokens', - domain: await this.domain(), - message: { - from, - amount, - recipientChain, - recipient, - artbiterFee: arbiterFee, - deadline, - nonce - }, - types: AudiusWormhole.types - } - const signature = await this.audiusWalletClient.signTypedData(typedData) - const { r, s, v } = parseSignature(signature) - - // Send the transaction on Ethereum - const { request } = await this.publicClient.simulateContract({ - address: this.contractAddress, - abi: AudiusWormhole.abi, - functionName: 'transferTokens', - args: [ - from, - amount, - recipientChain, - recipient, - arbiterFee, - deadline, - Number(v), - r, - s - ], - ...other - }) - return await this.walletClient.writeContract(request) - } - - private async domain(): Promise< - TypedDataDefinition['domain'] - > { - return { - name: 'AudiusWormholeClient', - chainId: BigInt(await this.publicClient.getChainId()), - verifyingContract: this.contractAddress, - version: '1' - } - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/getDefaultConfig.ts deleted file mode 100644 index 689351cf792..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { AudiusWormholeConfigInternal } from './types' - -export const getDefaultWormholeConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): AudiusWormholeConfigInternal => ({ - address: config.ethereum.addresses.audiusWormholeAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/index.ts deleted file mode 100644 index 889f9eac549..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './AudiusWormholeClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/types.ts deleted file mode 100644 index c8623522415..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/AudiusWormhole/types.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { toChainId, chains } from '@wormhole-foundation/sdk-base' -import { - type Account, - type Hex, - type PublicClient, - type Transport, - type WalletClient -} from 'viem' -import type { mainnet } from 'viem/chains' -import { z } from 'zod' - -import { EthAddressSchema } from '../../../../types/EthAddress' -import { HexSchema } from '../../../../types/Hex' -import type { AudiusWalletClient } from '../../../AudiusWalletClient' -import { GasFeeSchema } from '../types' - -export type AudiusWormholeConfig = AudiusWormholeConfigInternal & { - audiusWalletClient: AudiusWalletClient - ethPublicClient: PublicClient - ethWalletClient: WalletClient -} - -export type AudiusWormholeConfigInternal = { - address: Hex -} - -export const TransferTokensSchema = GasFeeSchema.and( - z.object({ - args: z.object({ - from: EthAddressSchema.optional(), - amount: z.bigint(), - recipientChain: z.enum(chains).transform(toChainId), - recipient: HexSchema, - deadline: z.bigint().optional(), - arbiterFee: z.bigint().optional() - }), - account: z.custom().optional() - }) -) - -export type TransferTokensParams = z.input diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/ClaimsManagerClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/ClaimsManagerClient.ts deleted file mode 100644 index 2586c3658a4..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/ClaimsManagerClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Hex, PublicClient } from 'viem' - -import type { ClaimsManagerConfig } from './types' - -export class ClaimsManagerClient { - public readonly contractAddress: Hex - - public readonly publicClient: PublicClient - - constructor(config: ClaimsManagerConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/getDefaultConfig.ts deleted file mode 100644 index e779c4a41d4..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { ClaimsManagerConfigInternal } from './types' - -export const getDefaultClaimsManagerConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): ClaimsManagerConfigInternal => ({ - address: config.ethereum.addresses.claimsManagerAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/index.ts deleted file mode 100644 index 2ab5dd5ba99..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ClaimsManagerClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/types.ts deleted file mode 100644 index 08efce0bc68..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ClaimsManager/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type ClaimsManagerConfig = ClaimsManagerConfigInternal & { - ethPublicClient: PublicClient -} - -export type ClaimsManagerConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/DelegateManagerClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/DelegateManagerClient.ts deleted file mode 100644 index 4b80a4ea6c6..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/DelegateManagerClient.ts +++ /dev/null @@ -1,412 +0,0 @@ -import { DelegateManager } from '@audius/eth' -import type { GetContractEventsParameters, Hex, PublicClient } from 'viem' - -import type { DelegateManagerConfig } from './types' - -export class DelegateManagerClient { - public readonly contractAddress: Hex - - private readonly publicClient: PublicClient - - constructor(config: DelegateManagerConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } - - getIncreaseDelegatedStakeEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider, - increaseAmount - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - increaseAmount?: bigint - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'IncreaseDelegatedStake' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - if (increaseAmount) args._increaseAmount = increaseAmount - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'IncreaseDelegatedStake', - fromBlock, - args - }) - } - - getUndelegateStakeRequestedEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'UndelegateStakeRequested' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'UndelegateStakeRequested', - fromBlock, - args - }) - } - - getUndelegateStakeRequestEvaluatedEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'UndelegateStakeRequestEvaluated' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'UndelegateStakeRequestEvaluated', - fromBlock, - args - }) - } - - getUndelegateStakeRequestCancelledEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'UndelegateStakeRequestCancelled' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'UndelegateStakeRequestCancelled', - fromBlock, - args - }) - } - - getRemoveDelegatorRequestedEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'RemoveDelegatorRequested' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'RemoveDelegatorRequested', - fromBlock, - args - }) - } - - getRemoveDelegatorEvaluatedEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider, - unstakedAmount - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - unstakedAmount?: bigint - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'RemoveDelegatorRequestEvaluated' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - if (unstakedAmount) args._unstakedAmount = unstakedAmount - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'RemoveDelegatorRequestEvaluated', - fromBlock, - args - }) - } - - getRemoveDelegatorCancelledEvents = ({ - fromBlock = BigInt(0), - delegator, - serviceProvider - }: { - fromBlock: bigint - delegator?: `0x${string}` - serviceProvider?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'RemoveDelegatorRequestCancelled' - >['args'] = {} - - if (delegator) args._delegator = delegator - if (serviceProvider) args._serviceProvider = serviceProvider - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'RemoveDelegatorRequestCancelled', - fromBlock, - args - }) - } - - getClaimEvents = ({ - fromBlock = BigInt(0), - claimer - }: { - fromBlock: bigint - claimer?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'Claim' - >['args'] = {} - - if (claimer) args._claimer = claimer - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'Claim', - fromBlock, - args - }) - } - - getSlashEvents = ({ - fromBlock = BigInt(0), - target - }: { - fromBlock: bigint - target?: `0x${string}` - }) => { - const args: GetContractEventsParameters< - typeof DelegateManager.abi, - 'Slash' - >['args'] = {} - - if (target) args._target = target - - return this.publicClient.getContractEvents({ - address: this.contractAddress, - abi: DelegateManager.abi, - eventName: 'Slash', - fromBlock, - args - }) - } - - getDelegatorsList = ({ - serviceProviderAddress - }: { - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getDelegatorsList', - args: [serviceProviderAddress] - }) - - getTotalDelegatedToServiceProvider = ({ - serviceProviderAddress - }: { - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getTotalDelegatedToServiceProvider', - args: [serviceProviderAddress] - }) - - getTotalLockedDelegationForServiceProvider = ({ - serviceProviderAddress - }: { - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getTotalLockedDelegationForServiceProvider', - args: [serviceProviderAddress] - }) - - getTotalDelegatorStake = ({ - delegatorAddress - }: { - delegatorAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getTotalDelegatorStake', - args: [delegatorAddress] - }) - - getDelegatorStakeForServiceProvider = ({ - delegatorAddress, - serviceProviderAddress - }: { - delegatorAddress: `0x${string}` - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getDelegatorStakeForServiceProvider', - args: [delegatorAddress, serviceProviderAddress] - }) - - getPendingRemoveDelegatorRequest = ({ - delegatorAddress, - serviceProviderAddress - }: { - delegatorAddress: `0x${string}` - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getPendingRemoveDelegatorRequest', - args: [serviceProviderAddress, delegatorAddress] - }) - - getPendingUndelegateRequest = ({ - delegatorAddress - }: { - delegatorAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getPendingUndelegateRequest', - args: [delegatorAddress] - }) - - getUndelegateLockupDuration = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getUndelegateLockupDuration' - }) - - getMaxDelegators = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getMaxDelegators' - }) - - getMinDelegationAmount = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getMinDelegationAmount' - }) - - getRemoveDelegatorLockupDuration = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getRemoveDelegatorLockupDuration' - }) - - getRemoveDelegatorEvalDuration = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getRemoveDelegatorEvalDuration' - }) - - getGovernanceAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getGovernanceAddress' - }) - - getServiceProviderFactoryAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getServiceProviderFactoryAddress' - }) - - getClaimsManagerAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getClaimsManagerAddress' - }) - - getStakingAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getStakingAddress' - }) - - getSPMinDelegationAmount = ({ - serviceProviderAddress - }: { - serviceProviderAddress: `0x${string}` - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: DelegateManager.abi, - functionName: 'getSPMinDelegationAmount', - args: [serviceProviderAddress] - }) -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/getDefaultConfig.ts deleted file mode 100644 index 5ebd147fdf4..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { DelegateManagerConfigInternal } from './types' - -export const getDefaultDelegateManagerConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): DelegateManagerConfigInternal => ({ - address: config.ethereum.addresses.delegateManagerAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/index.ts deleted file mode 100644 index bf3b2c4f812..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './DelegateManagerClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/types.ts deleted file mode 100644 index c8c9b26adb7..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/DelegateManager/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type DelegateManagerConfig = DelegateManagerConfigInternal & { - ethPublicClient: PublicClient -} - -export type DelegateManagerConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/EthRewardsManagerClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/EthRewardsManagerClient.ts deleted file mode 100644 index 8099b1ad3ec..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/EthRewardsManagerClient.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { EthRewardsManager } from '@audius/eth' -import type { Hex, PublicClient } from 'viem' - -import type { EthRewardsManagerConfig } from './types' - -export class EthRewardsManagerClient { - public readonly contractAddress: Hex - - private readonly publicClient: PublicClient - - constructor(config: EthRewardsManagerConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } - - getAntiAbuseOracleAddresses = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: EthRewardsManager.abi, - functionName: 'getAntiAbuseOracleAddresses' - }) -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/getDefaultConfig.ts deleted file mode 100644 index 3b9e8401f52..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { EthRewardsManagerConfigInternal } from './types' - -export const getDefaultEthRewardsManagerConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): EthRewardsManagerConfigInternal => ({ - address: config.ethereum.addresses.ethRewardsManagerAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/index.ts deleted file mode 100644 index c0518366c5f..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './EthRewardsManagerClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/types.ts deleted file mode 100644 index d61cc333c13..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/EthRewardsManager/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type EthRewardsManagerConfig = EthRewardsManagerConfigInternal & { - ethPublicClient: PublicClient -} - -export type EthRewardsManagerConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/GovernanceClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/GovernanceClient.ts deleted file mode 100644 index 17fc10ee1a2..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/GovernanceClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Hex, PublicClient } from 'viem' - -import type { GovernanceConfig } from './types' - -export class GovernanceClient { - public readonly contractAddress: Hex - - public readonly publicClient: PublicClient - - constructor(config: GovernanceConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/getDefaultConfig.ts deleted file mode 100644 index 6d595d4febf..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { GovernanceConfigInternal } from './types' - -export const getDefaultGovernanceConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): GovernanceConfigInternal => ({ - address: config.ethereum.addresses.governanceAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/index.ts deleted file mode 100644 index f810cde3741..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './GovernanceClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/types.ts deleted file mode 100644 index e89c3a8fe90..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Governance/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type GovernanceConfig = GovernanceConfigInternal & { - ethPublicClient: PublicClient -} - -export type GovernanceConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/RegistryClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/RegistryClient.ts deleted file mode 100644 index dee4bd18860..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/RegistryClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Hex, PublicClient } from 'viem' - -import type { RegistryConfig } from './types' - -export class RegistryClient { - public readonly contractAddress: Hex - - public readonly publicClient: PublicClient - - constructor(config: RegistryConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/getDefaultConfig.ts deleted file mode 100644 index 2e7fe81b4e1..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { RegistryConfigInternal } from './types' - -export const getDefaultRegistryConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): RegistryConfigInternal => ({ - address: config.ethereum.addresses.registryAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/index.ts deleted file mode 100644 index c9b4ae153db..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './RegistryClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/types.ts deleted file mode 100644 index fa7a4076c6a..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Registry/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type RegistryConfig = RegistryConfigInternal & { - ethPublicClient: PublicClient -} - -export type RegistryConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/ServiceProviderFactoryClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/ServiceProviderFactoryClient.ts deleted file mode 100644 index 7119cfdb6c7..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/ServiceProviderFactoryClient.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { ServiceProviderFactory } from '@audius/eth' -import { range } from 'lodash' -import type { Hex, PublicClient } from 'viem' - -import type { ServiceProviderFactoryConfig } from './types' - -export class ServiceProviderFactoryClient { - public readonly contractAddress: Hex - - discoveryNodeServiceType: `0x${string}` - contentNodeServiceType: `0x${string}` - validatorServiceType: `0x${string}` - - private readonly publicClient: PublicClient - - constructor(config: ServiceProviderFactoryConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - - this.discoveryNodeServiceType = config.discoveryNodeServiceType - this.contentNodeServiceType = config.contentNodeServiceType - this.validatorServiceType = config.validatorServiceType - } - - getDiscoveryNodes = async () => { - const count = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getTotalServiceTypeProviders', - args: [this.discoveryNodeServiceType] - }) - - const list = await Promise.all( - range(1, Number(count) + 1).map(async (i) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getServiceEndpointInfo', - args: [this.discoveryNodeServiceType, BigInt(i)] - }) - ) - ) - // Remove empty endpoints - return list.filter(([_, endpoint]) => endpoint !== '') - } - - getContentNodes = async () => { - const count = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getTotalServiceTypeProviders', - args: [this.contentNodeServiceType] - }) - - const list = await Promise.all( - range(1, Number(count) + 1).map(async (i) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getServiceEndpointInfo', - args: [this.contentNodeServiceType, BigInt(i)] - }) - ) - ) - // Remove empty endpoints - return list.filter(([_, endpoint]) => endpoint !== '') - } - - getValidators = async () => { - const count = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getTotalServiceTypeProviders', - args: [this.validatorServiceType] - }) - - const list = await Promise.all( - range(1, Number(count) + 1).map(async (i) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceProviderFactory.abi, - functionName: 'getServiceEndpointInfo', - args: [this.validatorServiceType, BigInt(i)] - }) - ) - ) - // Remove empty endpoints - return list.filter(([_, endpoint]) => endpoint !== '') - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/getDefaultConfig.ts deleted file mode 100644 index 0791e899208..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/getDefaultConfig.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { ServiceProviderFactoryConfigInternal } from './types' - -export const getDefaultServiceProviderFactoryConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): ServiceProviderFactoryConfigInternal => ({ - address: config.ethereum.addresses.serviceProviderFactoryAddress, - discoveryNodeServiceType: - '0x646973636f766572792d6e6f6465000000000000000000000000000000000000', - contentNodeServiceType: - '0x636f6e74656e742d6e6f64650000000000000000000000000000000000000000', - validatorServiceType: - '0x76616c696461746f720000000000000000000000000000000000000000000000' -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/index.ts deleted file mode 100644 index 96d9909504a..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ServiceProviderFactoryClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/types.ts deleted file mode 100644 index 965a44d018b..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceProviderFactory/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type ServiceProviderFactoryConfig = - ServiceProviderFactoryConfigInternal & { - ethPublicClient: PublicClient - } - -export type ServiceProviderFactoryConfigInternal = { - address: Hex - discoveryNodeServiceType: `0x${string}` - contentNodeServiceType: `0x${string}` - validatorServiceType: `0x${string}` -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/ServiceTypeManagerClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/ServiceTypeManagerClient.ts deleted file mode 100644 index c8040c01343..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/ServiceTypeManagerClient.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ServiceTypeManager } from '@audius/eth' -import type { Hex, PublicClient } from 'viem' -import { hexToString } from 'viem' - -import type { ServiceTypeManagerConfig } from './types' - -export class ServiceTypeManagerClient { - public readonly contractAddress: Hex - - discoveryNodeServiceType: `0x${string}` - contentNodeServiceType: `0x${string}` - validatorServiceType: `0x${string}` - - private readonly publicClient: PublicClient - - constructor(config: ServiceTypeManagerConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - - this.discoveryNodeServiceType = config.discoveryNodeServiceType - this.contentNodeServiceType = config.contentNodeServiceType - this.validatorServiceType = config.validatorServiceType - } - - getDiscoveryNodeVersion = async () => { - const version = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceTypeManager.abi, - functionName: 'getCurrentVersion', - args: [this.discoveryNodeServiceType] - }) - return hexToString(version, { size: 32 }) - } - - getContentNodeVersion = async () => { - const version = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceTypeManager.abi, - functionName: 'getCurrentVersion', - args: [this.contentNodeServiceType] - }) - return hexToString(version, { size: 32 }) - } - - getValidatorVersion = async () => { - const version = await this.publicClient.readContract({ - address: this.contractAddress, - abi: ServiceTypeManager.abi, - functionName: 'getCurrentVersion', - args: [this.validatorServiceType] - }) - return hexToString(version, { size: 32 }) - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/getDefaultConfig.ts deleted file mode 100644 index 7a5e032d5fb..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/getDefaultConfig.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { ServiceTypeManagerConfigInternal } from './types' - -export const getDefaultServiceTypeManagerConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): ServiceTypeManagerConfigInternal => ({ - address: config.ethereum.addresses.serviceTypeManagerAddress, - discoveryNodeServiceType: - '0x646973636f766572792d6e6f6465000000000000000000000000000000000000', - contentNodeServiceType: - '0x636f6e74656e742d6e6f64650000000000000000000000000000000000000000', - validatorServiceType: - '0x76616c696461746f720000000000000000000000000000000000000000000000' -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/index.ts deleted file mode 100644 index 0d2febc2973..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ServiceTypeManagerClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/types.ts deleted file mode 100644 index cce8e31a709..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/ServiceTypeManager/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type ServiceTypeManagerConfig = ServiceTypeManagerConfigInternal & { - ethPublicClient: PublicClient -} - -export type ServiceTypeManagerConfigInternal = { - address: Hex - discoveryNodeServiceType: `0x${string}` - contentNodeServiceType: `0x${string}` - validatorServiceType: `0x${string}` -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/StakingClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/StakingClient.ts deleted file mode 100644 index a09f149d2e0..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/StakingClient.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Staking } from '@audius/eth' -import type { Hex, PublicClient } from 'viem' - -import type { StakingConfig } from './types' - -export class StakingClient { - public readonly contractAddress: Hex - - private readonly publicClient: PublicClient - - constructor(config: StakingConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } - - token = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'token' - }) - - totalStaked = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'totalStaked' - }) - - supportsHistory = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'supportsHistory' - }) - - totalStakedFor = ({ account }: { account: `0x${string}` }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'totalStakedFor', - args: [account] - }) - - totalStakedAt = ({ blockNumber }: { blockNumber: bigint }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'totalStakedAt', - args: [blockNumber] - }) - - totalStakedForAt = ({ - account, - blockNumber - }: { - account: `0x${string}` - blockNumber: bigint - }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'totalStakedForAt', - args: [account, blockNumber] - }) - - isStaker = ({ account }: { account: `0x${string}` }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'isStaker', - args: [account] - }) - - lastClaimedFor = ({ account }: { account: `0x${string}` }) => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'lastClaimedFor', - args: [account] - }) - - getDelegateManagerAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'getDelegateManagerAddress' - }) - - getClaimsManagerAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'getClaimsManagerAddress' - }) - - getServiceProviderFactoryAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'getServiceProviderFactoryAddress' - }) - - getGovernanceAddress = () => - this.publicClient.readContract({ - address: this.contractAddress, - abi: Staking.abi, - functionName: 'getGovernanceAddress' - }) -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/getDefaultConfig.ts deleted file mode 100644 index b64be0014d1..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { StakingConfigInternal } from './types' - -export const getDefaultStakingConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): StakingConfigInternal => ({ - address: config.ethereum.addresses.stakingAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/index.ts deleted file mode 100644 index 7b31473c8e0..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './StakingClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/types.ts deleted file mode 100644 index 9cb6cac6ed8..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/Staking/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type StakingConfig = StakingConfigInternal & { - ethPublicClient: PublicClient -} - -export type StakingConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/TrustedNotifierManagerClient.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/TrustedNotifierManagerClient.ts deleted file mode 100644 index 13cf622baf0..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/TrustedNotifierManagerClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Hex, PublicClient } from 'viem' - -import type { TrustedNotifierManagerConfig } from './types' - -export class TrustedNotifierManagerClient { - public readonly contractAddress: Hex - - public readonly publicClient: PublicClient - - constructor(config: TrustedNotifierManagerConfig) { - this.contractAddress = config.address - this.publicClient = config.ethPublicClient - } -} diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/getDefaultConfig.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/getDefaultConfig.ts deleted file mode 100644 index afae18fea5a..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/getDefaultConfig.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SdkServicesConfig } from '../../../../config/types' - -import type { TrustedNotifierManagerConfigInternal } from './types' - -export const getDefaultTrustedNotifierManagerConfig = (config: { - ethereum: SdkServicesConfig['ethereum'] -}): TrustedNotifierManagerConfigInternal => ({ - address: config.ethereum.addresses.trustedNotifierManagerAddress -}) diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/index.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/index.ts deleted file mode 100644 index 4c2ee90a7f7..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './TrustedNotifierManagerClient' -export * from './getDefaultConfig' diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/types.ts deleted file mode 100644 index cea9f6fe369..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/TrustedNotifierManager/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Hex, PublicClient, Transport } from 'viem' -import type { mainnet } from 'viem/chains' - -export type TrustedNotifierManagerConfig = - TrustedNotifierManagerConfigInternal & { - ethPublicClient: PublicClient - } - -export type TrustedNotifierManagerConfigInternal = { address: Hex } diff --git a/packages/sdk/src/sdk/services/Ethereum/contracts/types.ts b/packages/sdk/src/sdk/services/Ethereum/contracts/types.ts deleted file mode 100644 index 3de0d5cd7ed..00000000000 --- a/packages/sdk/src/sdk/services/Ethereum/contracts/types.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { z } from 'zod' - -export const GasFeeSchema = z - .union([ - z.object({ - // Legacy - gasPrice: z.bigint().optional() - }), - z.object({ - // EIP-1559 - maxFeePerGas: z.bigint().optional(), - maxPriorityFeePerGas: z.bigint().optional() - }) - ]) - .and( - z.object({ - gas: z.bigint().optional() - }) - ) diff --git a/packages/sdk/src/sdk/services/Ethereum/index.ts b/packages/sdk/src/sdk/services/Ethereum/index.ts index 6ea494dfca7..2f9b611c27e 100644 --- a/packages/sdk/src/sdk/services/Ethereum/index.ts +++ b/packages/sdk/src/sdk/services/Ethereum/index.ts @@ -1,11 +1 @@ -export * from './contracts/ServiceTypeManager' -export * from './contracts/ServiceProviderFactory' -export * from './contracts/EthRewardsManager' -export * from './contracts/AudiusToken' -export * from './contracts/ClaimsManager' -export * from './contracts/DelegateManager' -export * from './contracts/Staking' -export * from './contracts/TrustedNotifierManager' -export * from './contracts/AudiusWormhole' -export * from './contracts/Registry' -export * from './contracts/Governance' +export * from './contracts' diff --git a/packages/sdk/src/sdk/services/index.ts b/packages/sdk/src/sdk/services/index.ts index 507f1f790e8..1f39a09ec04 100644 --- a/packages/sdk/src/sdk/services/index.ts +++ b/packages/sdk/src/sdk/services/index.ts @@ -7,5 +7,4 @@ export * from './Logger' export * from './Solana' export * from './Storage' export * from './StorageNodeSelector' -export * from './Ethereum' export * from './Encryption' diff --git a/packages/sdk/src/sdk/types.ts b/packages/sdk/src/sdk/types.ts index db6235253be..89e9000bc31 100644 --- a/packages/sdk/src/sdk/types.ts +++ b/packages/sdk/src/sdk/types.ts @@ -1,5 +1,3 @@ -import type { PublicClient, Transport, WalletClient } from 'viem' -import type { mainnet } from 'viem/chains' import { z } from 'zod' import { AntiAbuseOracleService } from './services/AntiAbuseOracle/types' @@ -8,19 +6,6 @@ import type { ArchiverService } from './services/Archiver' import type { AudiusWalletClient } from './services/AudiusWalletClient' import { EmailEncryptionService } from './services/Encryption' import type { EntityManagerService } from './services/EntityManager' -import { - AudiusTokenClient, - ClaimsManagerClient, - DelegateManagerClient, - EthRewardsManagerClient, - GovernanceClient, - RegistryClient, - ServiceProviderFactoryClient, - TrustedNotifierManagerClient, - AudiusWormholeClient -} from './services/Ethereum' -import { ServiceTypeManagerClient } from './services/Ethereum/contracts/ServiceTypeManager' -import { StakingClient } from './services/Ethereum/contracts/Staking/StakingClient' import type { LoggerService } from './services/Logger' import type { PaymentRouterClient, @@ -53,65 +38,6 @@ export type ServicesContainer = { */ audiusWalletClient: AudiusWalletClient - ethWalletClient: WalletClient - - ethPublicClient: PublicClient - - /** - * Contract client to interact with the Audius token - */ - audiusTokenClient: AudiusTokenClient - - /** - * Contract client to interact with claiming rewards - */ - claimsManagerClient: ClaimsManagerClient - - /** - * Contract client to interact with staking and delegating stake - */ - delegateManagerClient: DelegateManagerClient - - /** - * Contract client to interact with the staking system - */ - stakingClient: StakingClient - - /** - * Contract client to interact with the trusted notifier services - */ - trustedNotifierManagerClient: TrustedNotifierManagerClient - - /** - * Contract client to interact with wormhole - */ - audiusWormholeClient: AudiusWormholeClient - - /** - * Contract client to interact with the eth contract registry - */ - registryClient: RegistryClient - - /** - * Contract client to interact with the governance contract - */ - governanceClient: GovernanceClient - - /** - * Contract client to interact with service types - */ - serviceTypeManagerClient: ServiceTypeManagerClient - - /** - * Contract client to interact with service provider info - */ - serviceProviderFactoryClient: ServiceProviderFactoryClient - - /** - * Contract client to interact with the ethereum rewards manager - */ - ethRewardsManagerClient: EthRewardsManagerClient - /** * Service used to log and set a desired log level */