Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .changeset/ethereum-service-refactor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
'@audius/sdk': major
---

Consolidate Ethereum contract services into a single `EthereumService`

The individual Ethereum contract client classes (`GovernanceClient`,
`ClaimsManagerClient`, `ServiceProviderFactoryClient`,
`EthRewardsManagerClient`, `ServiceTypeManagerClient`,
`TrustedNotifierManagerClient`, `StakingClient`, `DelegateManagerClient`,
`AudiusTokenClient`, `AudiusWormholeClient`, `RegistryClient`) have been
removed from the SDK's `ServicesContainer`. They are replaced by a single
`EthereumService` instance exposed at `sdk.services.ethereum`, which wraps
each contract as a typed viem contract instance.

**Before:**
```ts
await sdk.services.governanceClient.getVotingPeriod()
await sdk.services.claimsManagerClient.getPendingClaim(wallet)
```

**After:**
```ts
await sdk.services.ethereum.governance.read.getVotingPeriod([])
await sdk.services.ethereum.claimsManager.read.getPendingClaim([wallet])
```

Contract instances expose the full viem contract interface (`.read.*`,
`.simulate.*`, `.write.*`, `.watchEvent.*`). ABIs and addresses are sourced
from `@audius/eth` with optional per-environment overrides via
`EthereumServiceConfig`.
22 changes: 10 additions & 12 deletions packages/common/src/api/tan-query/wallets/useAudioBalance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,19 @@ const getWalletAudioBalanceQueryFn =
const sdk = await audiusSdk()
if (chain === Chain.Eth) {
const checksumWallet = getAddress(address)
const balance = await sdk.services.audiusTokenClient.balanceOf({
account: checksumWallet
})
const ethereum = sdk.services.ethereum
const balance = await ethereum.audiusToken.read.balanceOf([
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 [stakedBalance, delegatedBalance] = await Promise.all([
ethereum.staking.read.totalStakedFor([checksumWallet]),
ethereum.delegateManager.read.getTotalDelegatorStake([checksumWallet])
])
const fullBalance = balance + stakedBalance + delegatedBalance
return AUDIO(fullBalance).value
} else {
const wAudioSolBalance = await audiusBackend.getAddressWAudioBalance({
address,
Expand Down
29 changes: 10 additions & 19 deletions packages/common/src/services/audius-backend/AudiusBackend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -712,9 +712,9 @@ export const audiusBackend = ({

try {
const checksumWallet = getAddress(ethAddress)
const balance = await sdk.services.audiusTokenClient.balanceOf({
account: checksumWallet
})
const balance = await sdk.services.ethereum.audiusToken.read.balanceOf([
checksumWallet
])
return AUDIO(balance).value
} catch (e) {
console.error(e)
Expand Down Expand Up @@ -788,27 +788,18 @@ export const audiusBackend = ({
* @param bustCache
* @returns balance or null if error
*/
async function getAddressTotalStakedBalance(
address: string,
sdk: AudiusSdkWithServices
) {
async function getAddressTotalStakedBalance(address: string, sdk: AudiusSdkWithServices) {
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
})
const ethereum = sdk.services.ethereum
const [balance, stakedBalance, delegatedBalance] = await Promise.all([
ethereum.audiusToken.read.balanceOf([checksumWallet]),
ethereum.staking.read.totalStakedFor([checksumWallet]),
ethereum.delegateManager.read.getTotalDelegatorStake([checksumWallet])
])

return AUDIO(balance + delegatedBalance + stakedBalance).value
return AUDIO(balance + stakedBalance + delegatedBalance).value
} catch (e) {
reportError({ error: e as Error })
console.error(e)
Expand Down
57 changes: 11 additions & 46 deletions packages/common/src/services/wallet-client/WalletClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,39 +47,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<AudioWei | null> {
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<AudioWei | null> {
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()
Expand Down Expand Up @@ -120,24 +87,22 @@ export class WalletClient {

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 ethereum = sdk.services.ethereum

const permitTxHash = await ethereum.permitAudioToken({
spender: ethereum.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 ethereum.wormholeTransferTokens({
amount: balance,
recipient: `0x${account.address.toBuffer().toString('hex')}`
})
console.debug(
`AudiusWormhole transferred ${balance} tokens into the Wormhole...`,
{ transferTxHash }
Expand Down
4 changes: 2 additions & 2 deletions packages/sdk/src/sdk/config/development.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ export const developmentConfig: SdkServicesConfig = {
"delegateManagerAddress": "0x",
"stakingAddress": "0x",
"governanceAddress": "0x",
"registryAddress": "0x",
"claimsManagerAddress": "0x",
"trustedNotifierManagerAddress": "0x"
"trustedNotifierManagerAddress": "0x",
"registryAddress": "0x"
}
}
}
32 changes: 18 additions & 14 deletions packages/sdk/src/sdk/config/production.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,22 @@ export const productionConfig: SdkServicesConfig = {
"endpoint": "https://audius-content-11.figment.io",
"delegateOwnerWallet": "0xC9721F892BcC8822eb34237E875BE93904f11073"
},
{
"endpoint": "https://audius-content-13.figment.io",
"delegateOwnerWallet": "0x33a2da466B14990E0124383204b06F9196f62d8e"
},
{
"endpoint": "https://audius-content-14.figment.io",
"delegateOwnerWallet": "0x817c513C1B702eA0BdD4F8C1204C60372f715006"
},
{
"endpoint": "https://audius-content-12.figment.io",
"delegateOwnerWallet": "0x780641e157621621658F118375dc1B36Ea514d46"
},
{
"endpoint": "https://audius-nodes.com",
"delegateOwnerWallet": "0xE83699015c8eb793A0678eA7dC398ac58f7928c4"
},
{
"endpoint": "https://content.grassfed.network",
"delegateOwnerWallet": "0x33Ab85445c8A2690B9488e9fB5E6A9849d3a18d3"
Expand Down Expand Up @@ -285,10 +301,6 @@ export const productionConfig: SdkServicesConfig = {
"endpoint": "https://audius-content-13.cultur3stake.com",
"delegateOwnerWallet": "0xcb23908aa0dCDef762ebEaA38391D8fFC69E6e8F"
},
{
"endpoint": "https://audius-content-12.figment.io",
"delegateOwnerWallet": "0x780641e157621621658F118375dc1B36Ea514d46"
},
{
"endpoint": "https://cn0.mainnet.audiusindex.org",
"delegateOwnerWallet": "0xf9b373E223b73473C59034072263f52aEF60133B"
Expand All @@ -305,14 +317,6 @@ export const productionConfig: SdkServicesConfig = {
"endpoint": "https://cn3.mainnet.audiusindex.org",
"delegateOwnerWallet": "0x24C4b2cb6eC4c87a03F66723d8750dbe98Fa3e4f"
},
{
"endpoint": "https://audius-content-13.figment.io",
"delegateOwnerWallet": "0x33a2da466B14990E0124383204b06F9196f62d8e"
},
{
"endpoint": "https://audius-content-14.figment.io",
"delegateOwnerWallet": "0x817c513C1B702eA0BdD4F8C1204C60372f715006"
},
{
"endpoint": "https://cn4.mainnet.audiusindex.org",
"delegateOwnerWallet": "0x69e749266C59757dA81F8C659Be6B07ce5Bac6C9"
Expand Down Expand Up @@ -358,9 +362,9 @@ export const productionConfig: SdkServicesConfig = {
"delegateManagerAddress": "0x4d7968ebfD390D5E7926Cb3587C39eFf2F9FB225",
"stakingAddress": "0xe6D97B2099F142513be7A2a068bE040656Ae4591",
"governanceAddress": "0x4DEcA517D6817B6510798b7328F2314d3003AbAC",
"registryAddress": "0xd976d3b4f4e22a238c1A736b6612D22f17b6f64C",
"claimsManagerAddress": "0x44617F9dCEd9787C3B06a05B35B4C779a2AA1334",
"trustedNotifierManagerAddress": "0x6f08105c8CEef2BC5653640fcdbBE1e7bb519D39"
"trustedNotifierManagerAddress": "0x6f08105c8CEef2BC5653640fcdbBE1e7bb519D39",
"registryAddress": "0xd976d3b4f4e22a238c1A736b6612D22f17b6f64C"
}
}
}
2 changes: 1 addition & 1 deletion packages/sdk/src/sdk/config/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ export type SdkServicesConfig = {
delegateManagerAddress: Hex
stakingAddress: Hex
governanceAddress: Hex
registryAddress: Hex
claimsManagerAddress: Hex
trustedNotifierManagerAddress: Hex
registryAddress: Hex
}
}
}
Loading
Loading