Skip to content

Commit c625ef2

Browse files
committed
feat: make KoraLabsHandleProvider compliant with bitcoin
1 parent 07ac410 commit c625ef2

File tree

9 files changed

+49
-27
lines changed

9 files changed

+49
-27
lines changed

packages/cardano-services-client/src/HandleProvider/KoraLabsHandleProvider.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,23 @@ export interface KoraLabsHandleProviderDeps {
2626
policyId: Cardano.PolicyId;
2727
}
2828

29-
export const toHandleResolution = ({
30-
apiResponse,
31-
policyId
32-
}: {
33-
apiResponse: IHandle;
34-
policyId: Cardano.PolicyId;
35-
}): HandleResolution => ({
36-
backgroundImage: apiResponse.bg_image ? Asset.Uri(apiResponse.bg_image) : undefined,
37-
cardanoAddress: Cardano.PaymentAddress(apiResponse.resolved_addresses.ada),
38-
handle: apiResponse.name,
39-
hasDatum: apiResponse.has_datum,
40-
image: apiResponse.image ? Asset.Uri(apiResponse.image) : undefined,
41-
policyId,
42-
profilePic: apiResponse.pfp_image ? Asset.Uri(apiResponse.pfp_image) : undefined
43-
});
29+
export const toHandleResolution = ({ apiResponse, policyId }: { apiResponse: IHandle; policyId: Cardano.PolicyId }) => {
30+
const cardano = Cardano.PaymentAddress(apiResponse.resolved_addresses.ada);
31+
const result: HandleResolution = {
32+
addresses: { cardano },
33+
backgroundImage: apiResponse.bg_image ? Asset.Uri(apiResponse.bg_image) : undefined,
34+
cardanoAddress: cardano,
35+
handle: apiResponse.name,
36+
hasDatum: apiResponse.has_datum,
37+
image: apiResponse.image ? Asset.Uri(apiResponse.image) : undefined,
38+
policyId,
39+
profilePic: apiResponse.pfp_image ? Asset.Uri(apiResponse.pfp_image) : undefined
40+
};
41+
42+
if ('btc' in apiResponse.resolved_addresses) result.addresses.bitcoin = apiResponse.resolved_addresses.btc;
43+
44+
return result;
45+
};
4446

4547
/**
4648
* Creates a KoraLabs Provider instance to resolve Standard Handles

packages/cardano-services-client/test/util.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,25 @@ export const getWrongHandleProviderResponse = {
4040
}
4141
};
4242

43+
const aliceCardanoAddress =
44+
'addr_test1qqk4sr4f7vtqzd2w90d5nfu3n59jhhpawyphnek2y7er02nkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuqmcnecd';
4345
export const getAliceHandleProviderResponse = {
46+
addresses: { cardano: aliceCardanoAddress },
4447
backgroundImage: undefined,
45-
cardanoAddress:
46-
'addr_test1qqk4sr4f7vtqzd2w90d5nfu3n59jhhpawyphnek2y7er02nkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuqmcnecd',
48+
cardanoAddress: aliceCardanoAddress,
4749
handle: 'alice',
4850
hasDatum: false,
4951
image: Asset.Uri('ipfs://c8fc19c2e61bab6059bf8a466e6e754833a08a62a6c56feasd'),
5052
policyId: Cardano.PolicyId('50fdcdbfa3154db86a87e4b5697ae30d272e0bbcfa8122efd3e301cb'),
5153
profilePic: undefined
5254
};
5355

56+
const bobCardanoAddress =
57+
'addr_test1qzrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuql9tk0g';
5458
export const getBobHandleProviderResponse = {
59+
addresses: { bitcoin: 'test_bitcoin_address', cardano: bobCardanoAddress },
5560
backgroundImage: Asset.Uri('ipfs://zrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3yd'),
56-
cardanoAddress:
57-
'addr_test1qzrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuql9tk0g',
61+
cardanoAddress: bobCardanoAddress,
5862
handle: 'bob',
5963
hasDatum: false,
6064
image: Asset.Uri('ipfs://c8fc19c2e61bab6059bf8a466e6e754833a08a62a6c56fe'),
@@ -99,7 +103,8 @@ export const getBobHandleAPIResponse: Partial<IHandle> = {
99103
pfp_image: 'ipfs://zrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3yd1',
100104
rarity: Rarity.rare,
101105
resolved_addresses: {
102-
ada: 'addr_test1qzrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuql9tk0g'
106+
ada: 'addr_test1qzrljm7nskakjydxlr450ktsj08zuw6aktvgfkmmyw9semrkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuql9tk0g',
107+
btc: 'test_bitcoin_address'
103108
},
104109
standard_image: 'ipfs://c8fc19c2e61bab6059bf8a466e6e754833a08a62a6c56feasdfasd',
105110
updated_slot_number: 22,

packages/cardano-services/src/Handle/TypeOrmHandleProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export class TypeOrmHandleProvider extends TypeormProvider implements HandleProv
7171
]);
7272

7373
return {
74+
addresses: { cardano: cardanoAddress },
7475
backgroundImage: handleMetadataEntity?.backgroundImage || undefined,
7576
cardanoAddress,
7677
defaultForPaymentCredential: defaultForPaymentCredential || undefined,

packages/cardano-services/test/Handle/HandleHttpService.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,15 @@ describe('HandleHttpService', () => {
126126
});
127127

128128
it('valid not empty response is openApi schema compliant', async () => {
129+
const cardanoAddress = <Cardano.PaymentAddress>'test_address';
129130
await createServer({
130131
getPolicyIds: () => Promise.resolve([<Cardano.PolicyId>'test_policy']),
131132
healthCheck: () => Promise.resolve({ ok: true }),
132133
resolveHandles: () =>
133134
Promise.resolve([
134135
{
135-
cardanoAddress: <Cardano.PaymentAddress>'test_address',
136+
addresses: { cardano: cardanoAddress },
137+
cardanoAddress,
136138
handle: 'test',
137139
hasDatum: true,
138140
policyId: <Cardano.PolicyId>'test_policy',
@@ -146,6 +148,7 @@ describe('HandleHttpService', () => {
146148
expect({ body, status }).toEqual({
147149
body: [
148150
{
151+
addresses: { cardano: 'test_address' },
149152
cardanoAddress: 'test_address',
150153
handle: 'test',
151154
hasDatum: true,

packages/cardano-services/test/TxSubmit/NodeTxSubmitProvider.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import { NoCache, NodeTxSubmitProvider, NodeTxSubmitProviderProps } from '../../
1313
import { generateRandomHexString } from '@cardano-sdk/util-dev';
1414
import { dummyLogger as logger } from 'ts-log';
1515

16+
const cardanoAddress = Cardano.PaymentAddress(
17+
'addr_test1qqk4sr4f7vtqzd2w90d5nfu3n59jhhpawyphnek2y7er02nkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuqmcnecd'
18+
);
1619
const mockHandleResolution = {
17-
cardanoAddress: Cardano.PaymentAddress(
18-
'addr_test1qqk4sr4f7vtqzd2w90d5nfu3n59jhhpawyphnek2y7er02nkrezryq3ydtmkg0e7e2jvzg443h0ffzfwd09wpcxy2fuqmcnecd'
19-
),
20+
addresses: { cardano: cardanoAddress },
21+
cardanoAddress,
2022
handle: 'alice',
2123
hasDatum: false,
2224
policyId: Cardano.PolicyId('50fdcdbfa3154db86a87e4b5697ae30d272e0bbcfa8122efd3e301cb'),

packages/core/src/Provider/HandleProvider/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ export type Handle = string;
1010
* @param resolvedAt the point at which the Handle was resolved
1111
*/
1212
export interface HandleResolution {
13+
addresses: {
14+
bitcoin?: string;
15+
cardano: Cardano.PaymentAddress;
16+
};
1317
policyId: Cardano.PolicyId;
1418
handle: Handle;
19+
/** @deprecated Use `addresses.cardano` instead. */
1520
cardanoAddress: Cardano.PaymentAddress;
1621
hasDatum: boolean;
1722
defaultForStakeCredential?: Handle;

packages/tx-construction/test/tx-builder/TxBuilder.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ const rewardAccount2 = Cardano.RewardAccount('stake_test1up7pvfq8zn4quy45r2g5722
4040
const rewardAccount3 = Cardano.RewardAccount('stake_test1uqehkck0lajq8gr28t9uxnuvgcqrc6070x3k9r8048z8y5gssrtvn');
4141
const rewardAccount4 = Cardano.RewardAccount('stake_test17rphkx6acpnf78fuvxn0mkew3l0fd058hzquvz7w36x4gtcljw6kf');
4242

43+
const cardanoAddress = Cardano.PaymentAddress('addr_test1vr8nl4u0u6fmtfnawx2rxfz95dy7m46t6dhzdftp2uha87syeufdg');
4344
const resolvedHandle = {
44-
cardanoAddress: Cardano.PaymentAddress('addr_test1vr8nl4u0u6fmtfnawx2rxfz95dy7m46t6dhzdftp2uha87syeufdg'),
45+
addresses: { cardano: cardanoAddress },
46+
cardanoAddress,
4547
handle: 'alice',
4648
hasDatum: false,
4749
policyId: Cardano.PolicyId('b0d07d45fe9514f80213f4020e5a61241458be626841cde717cb38a7'),

packages/wallet/src/services/HandlesTracker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export const createHandlesTracker = (
135135
}
136136
return {
137137
...assetInfo,
138+
addresses: { cardano: txOut.address },
138139
cardanoAddress: txOut.address,
139140
handle: Asset.util.getAssetNameAsText(handleAssetId),
140141
hasDatum: !!txOut.datum

packages/wallet/test/services/HandlesTracker.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const handleOutput = utxo.find(
3434
)![1];
3535

3636
const expectedHandleInfo: HandleInfo = {
37+
addresses: { cardano: handleOutput.address },
3738
assetId: handleAssetId,
3839
cardanoAddress: handleOutput.address,
3940
fingerprint: handleFingerprint,
@@ -64,10 +65,10 @@ const hydrateHandle = (handleInfo: HandleInfo) =>
6465

6566
const exponentialBackoffDelay = (iteration: number) => Math.pow(2, iteration) * HYDRATE_HANDLE_INITIAL_INTERVAL;
6667

67-
const lastInteration = HYDRATE_HANDLE_MAX_RETRIES - 1;
68+
const lastIteration = HYDRATE_HANDLE_MAX_RETRIES - 1;
6869

6970
const retrySyntax = (retries: number) =>
70-
Array.from({ length: retries }, (_, i) => exponentialBackoffDelay(i) - (i === lastInteration ? 2 : 1))
71+
Array.from({ length: retries }, (_, i) => exponentialBackoffDelay(i) - (i === lastIteration ? 2 : 1))
7172
.map((exponentialDelay) => ` - ${exponentialDelay}ms `)
7273
.join('');
7374

0 commit comments

Comments
 (0)