fix: add PublicKey createWithSeed method
This commit is contained in:
parent
e0e3094370
commit
fc77e55920
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import BN from 'bn.js';
|
import BN from 'bn.js';
|
||||||
import bs58 from 'bs58';
|
import bs58 from 'bs58';
|
||||||
|
import hasha from 'hasha';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A public key
|
* A public key
|
||||||
|
@ -75,4 +76,13 @@ export class PublicKey {
|
||||||
toString(): string {
|
toString(): string {
|
||||||
return this.toBase58();
|
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);
|
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