fix: add PublicKey createWithSeed method
This commit is contained in:
parent
e0e3094370
commit
fc77e55920
|
@ -2,6 +2,7 @@
|
|||
|
||||
import BN from 'bn.js';
|
||||
import bs58 from 'bs58';
|
||||
import hasha from 'hasha';
|
||||
|
||||
/**
|
||||
* A public key
|
||||
|
@ -75,4 +76,13 @@ export class PublicKey {
|
|||
toString(): string {
|
||||
return this.toBase58();
|
||||
}
|
||||
|
||||
/**
|
||||
* Derive a public key from another key, a seed, and a programId.
|
||||
*/
|
||||
static createWithSeed(fromPublicKey: PublicKey, seed: string, programId: PublicKey): PublicKey {
|
||||
const buffer = Buffer.concat([fromPublicKey.toBuffer(), Buffer.from(seed), programId.toBuffer()])
|
||||
const hash = hasha(buffer, {algorithm: 'sha256'});
|
||||
return new PublicKey('0x' + hash);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,3 +223,43 @@ test('equals (II)', () => {
|
|||
|
||||
expect(key1.equals(key2)).toBe(true);
|
||||
});
|
||||
|
||||
test('createWithSeed', () => {
|
||||
const defaultPublicKey = new PublicKey([
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
]);
|
||||
const derivedKey = PublicKey.createWithSeed(defaultPublicKey, 'limber chicken: 4/45', defaultPublicKey);
|
||||
|
||||
expect(derivedKey.equals(new PublicKey('9h1HyLCW5dZnBVap8C5egQ9Z6pHyjsh5MNy83iPqqRuq'))).toBe(true);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue