Skip to content

Commit

Permalink
Add getUsedAddresses
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeljscript committed Apr 29, 2024
1 parent fe868d9 commit e209e24
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 4 deletions.
1 change: 1 addition & 0 deletions apps/wallet-mobile/src/features/Discover/common/helpers.ts
Expand Up @@ -61,6 +61,7 @@ export const createDappConnector = (appStorage: App.Storage, wallet: YoroiWallet
const handlerWallet: ResolverWallet = {
id: wallet.id,
networkId: wallet.networkId,
getUsedAddresses: (params) => wallet.getUsedAddresses(params),
getUnusedAddresses: () => wallet.getUnusedAddresses(),
getBalance: (tokenId) => wallet.getBalance(tokenId),
confirmConnection: async (origin: string) => {
Expand Down
Expand Up @@ -918,13 +918,24 @@ export const makeShelleyWallet = (constants: typeof MAINNET | typeof TESTNET | t
}

async getUnusedAddresses() {
const bech32Addresses = this.receiveAddresses.filter((address) => this.isUsedAddressIndex[address])
const bech32Addresses = this.receiveAddresses.filter((address) => !this.isUsedAddressIndex[address])
const result = await Promise.all(
bech32Addresses.map((addr) => Cardano.Wasm.Address.fromBech32(addr).then((a) => a.toHex())),
)
return result
}

async getUsedAddresses(pagination?: {page: number; limit: number}) {
const allAddresses = this.receiveAddresses.filter((address) => this.isUsedAddressIndex[address])
const selectedAddresses = pagination
? allAddresses.slice(pagination.page * pagination.limit, (pagination.page + 1) * pagination.limit)
: allAddresses
const result = await Promise.all(
selectedAddresses.map((addr) => Cardano.Wasm.Address.fromBech32(addr).then((a) => a.toHex())),
)
return result
}

async signSwapCancellationWithLedger(cbor: string, useUSB: boolean): Promise<void> {
if (!this.hwDeviceInfo) throw new Error('Invalid wallet state')

Expand Down
1 change: 1 addition & 0 deletions apps/wallet-mobile/src/yoroi-wallets/cardano/types.ts
Expand Up @@ -194,6 +194,7 @@ export type YoroiWallet = {
// CIP-30
getBalance(tokenId?: string): Promise<string>
getUnusedAddresses(): Promise<string[]>
getUsedAddresses(params?: {page: number; limit: number}): Promise<string[]>
}

export const isYoroiWallet = (wallet: unknown): wallet is YoroiWallet => {
Expand Down
3 changes: 2 additions & 1 deletion packages/dapp-connector/src/dapp-connector.test.ts
Expand Up @@ -254,7 +254,7 @@ describe('DappConnector', () => {
const sendMessage = jest.fn()
await dappConnector.addConnection({walletId, dappOrigin: 'https://yoroi-wallet.com'})
await dappConnector.handleEvent(createEvent('api.getUsedAddresses'), trustedUrl, sendMessage)
expect(sendMessage).toHaveBeenCalledWith('1', mockedData[walletId].usedAddresses)
expect(sendMessage).toHaveBeenCalledWith('1', [])
})
})

Expand All @@ -281,5 +281,6 @@ const mockWallet: ResolverWallet = {
confirmConnection: async () => true,
getBalance: () => Promise.resolve('1a062ea8a0'),
getUnusedAddresses: () => Promise.resolve([]),
getUsedAddresses: () => Promise.resolve([]),
}
const trustedUrl = 'https://yoroi-wallet.com/'
8 changes: 6 additions & 2 deletions packages/dapp-connector/src/resolver.ts
Expand Up @@ -80,16 +80,19 @@ export const resolver: Resolver = {
await assertWalletAcceptedConnection(context)
return mockedData[mockWalletId1].rewardAddresses
},
getUsedAddresses: async (_params: unknown, context: Context) => {
getUsedAddresses: async (params: unknown, context: Context) => {
assertOriginsMatch(context)
await assertWalletAcceptedConnection(context)
return mockedData[mockWalletId1].usedAddresses
const pagination = isRecord(params) && isPaginationParams(params.args) ? params.args : undefined
return context.wallet.getUsedAddresses(pagination)
},
},
} as const

const paginationSchema = z.object({page: z.number(), limit: z.number()})
const getBalanceSchema = z.object({args: z.array(z.string().optional())})
const isGetBalanceParams = createTypeGuardFromSchema(getBalanceSchema)
const isPaginationParams = createTypeGuardFromSchema(paginationSchema)

const assertOriginsMatch = (context: Context) => {
if (context.browserOrigin !== context.trustedOrigin) {
Expand Down Expand Up @@ -173,6 +176,7 @@ export type ResolverWallet = {
confirmConnection: (dappOrigin: string) => Promise<boolean>
getBalance: (tokenId?: string) => Promise<string>
getUnusedAddresses: () => Promise<string[]>
getUsedAddresses: (pagination?: {page: number; limit: number}) => Promise<string[]>
}

const LOG_MESSAGE_EVENT = 'log_message'

0 comments on commit e209e24

Please sign in to comment.