fix: add PublicKey createWithSeed method

This commit is contained in:
Tyera Eulberg 2019-12-20 16:14:37 -07:00 committed by Michael Vines
parent e0e3094370
commit fc77e55920
2 changed files with 50 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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);
});