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

Commit bdda9c5

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

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

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

+13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { base58 } from '@metaplex-foundation/umi-serializers';
33
import {
44
assertIsBase58EncodedAddress,
55
Base58EncodedAddress,
6+
createBase58AddressWithSeed,
67
getBase58EncodedAddressCodec,
78
getBase58EncodedAddressComparator,
89
} from '../base58';
@@ -132,4 +133,16 @@ describe('base58', () => {
132133
]);
133134
});
134135
});
136+
describe('createBase58AddressWithSeed', () => {
137+
it('works', async () => {
138+
expect.assertions(1);
139+
const baseAddress = 'Bh1uUDP3ApWLeccVNHwyQKpnfGQbuE2UECbGA6M4jiZJ' as Base58EncodedAddress;
140+
const programAddress = 'FGrddpvjBUAG6VdV4fR8Q2hEZTHS6w4SEveVBgfwbfdm' as Base58EncodedAddress;
141+
const expectedAddress = 'HUKxCeXY6gZohFJFARbLE6L6C9wDEHz1SfK8ENM7QY7z' as Base58EncodedAddress;
142+
143+
const actualAddress = await createBase58AddressWithSeed(baseAddress, 'seed', programAddress);
144+
145+
expect(actualAddress).toEqual(expectedAddress);
146+
});
147+
});
135148
});

packages/addresses/src/base58.ts

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

0 commit comments

Comments
 (0)