fix: support creating a PublicKey from a base58 string
This commit is contained in:
parent
4b2305434e
commit
95efc7c3b0
|
@ -23,4 +23,4 @@ lib
|
|||
doc
|
||||
|
||||
# VIM swap files
|
||||
*.sw[po]
|
||||
*.sw.
|
||||
|
|
|
@ -13,13 +13,26 @@ export class PublicKey {
|
|||
* Create a new PublicKey object
|
||||
*/
|
||||
constructor(number: string | Buffer | Array<number>) {
|
||||
let radix = 10;
|
||||
|
||||
if (typeof number === 'string' && number.startsWith('0x')) {
|
||||
this._bn = new BN(number.substring(2), 16);
|
||||
} else {
|
||||
this._bn = new BN(number, radix);
|
||||
for (;;) {
|
||||
if (typeof number === 'string') {
|
||||
// base 58 encoded?
|
||||
if (/^[1-9A-HJ-NP-Za-km-z]{43,44}$/.test(number)) {
|
||||
this._bn = new BN(bs58.decode(number));
|
||||
break;
|
||||
}
|
||||
|
||||
// hexadecimal number
|
||||
if (number.startsWith('0x')) {
|
||||
this._bn = new BN(number.substring(2), 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this._bn = new BN(number);
|
||||
break;
|
||||
}
|
||||
|
||||
if (this._bn.byteLength() > 32) {
|
||||
throw new Error(`Invalid public key input`);
|
||||
}
|
||||
|
|
|
@ -23,9 +23,11 @@ test('equals', () => {
|
|||
]);
|
||||
const hexKey = new PublicKey('0x300000000000000000000000000000000000000000000000000000000000000');
|
||||
const decimalKey = new PublicKey('1356938545749799165119972480570561420155507632800475359837393562592731987968');
|
||||
const base56Key = new PublicKey('CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3');
|
||||
|
||||
expect(arrayKey.equals(hexKey)).toBeTruthy();
|
||||
expect(arrayKey.equals(decimalKey)).toBeTruthy();
|
||||
expect(arrayKey.equals(base56Key)).toBeTruthy();
|
||||
});
|
||||
|
||||
test('isPublicKey', () => {
|
||||
|
@ -40,7 +42,6 @@ test('toBase58', () => {
|
|||
|
||||
const key2 = new PublicKey('123456789');
|
||||
expect(key2.toBase58()).toBe('Vj3WURvtMv1mii1vhTqLhcSwVWDRs2E135KtTYUXtTq');
|
||||
console.log(key2.toBuffer());
|
||||
});
|
||||
|
||||
test('toBuffer', () => {
|
||||
|
|
Loading…
Reference in New Issue