Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 0f8fe6c

Browse files
committed
refactor(experimental): implement createBase58AddressWithSeed
1 parent d6c3cfe commit 0f8fe6c

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

packages/addresses/src/__tests__/base58-test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
Base58EncodedAddress,
66
getBase58EncodedAddressCodec,
77
getBase58EncodedAddressComparator,
8+
getBase58EncodedAddressForSeed,
89
} from '../base58';
910

1011
describe('base58', () => {
@@ -132,4 +133,15 @@ describe('base58', () => {
132133
]);
133134
});
134135
});
136+
describe('getBase58EncodedAddressForSeed', () => {
137+
it('works', async () => {
138+
const baseAddress = 'Bh1uUDP3ApWLeccVNHwyQKpnfGQbuE2UECbGA6M4jiZJ';
139+
const programAddress = 'FGrddpvjBUAG6VdV4fR8Q2hEZTHS6w4SEveVBgfwbfdm';
140+
const expectedAddress = 'HUKxCeXY6gZohFJFARbLE6L6C9wDEHz1SfK8ENM7QY7z';
141+
142+
const actualAddress = await getBase58EncodedAddressForSeed(baseAddress, 'seed', programAddress);
143+
144+
expect(actualAddress).toEqual(expectedAddress);
145+
});
146+
});
135147
});

packages/addresses/src/base58.ts

+11
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,14 @@ export function getBase58EncodedAddressComparator(): (x: string, y: string) => n
5252
usage: 'sort',
5353
}).compare;
5454
}
55+
56+
export async function getBase58EncodedAddressForSeed(baseAddress: Base58EncodedAddress, seed: string, programAddress: Base58EncodedAddress): Promise<Base58EncodedAddress> {
57+
const {serialize, deserialize } = getBase58EncodedAddressCodec();
58+
const seedBytes = (new TextEncoder()).encode(seed);
59+
const addressBytesBuffer = await crypto.subtle.digest(
60+
'SHA-256',
61+
new Uint8Array([...serialize(baseAddress), ...seedBytes, ...serialize(programAddress)])
62+
);
63+
const addressBytes = new Uint8Array(addressBytesBuffer);
64+
return deserialize(addressBytes)[0];
65+
}

0 commit comments

Comments
 (0)