fix: support creating a PublicKey from a base58 string
This commit is contained in:
2
web3.js/.gitignore
vendored
2
web3.js/.gitignore
vendored
@ -23,4 +23,4 @@ lib
|
|||||||
doc
|
doc
|
||||||
|
|
||||||
# VIM swap files
|
# VIM swap files
|
||||||
*.sw[po]
|
*.sw.
|
||||||
|
@ -13,13 +13,26 @@ export class PublicKey {
|
|||||||
* Create a new PublicKey object
|
* Create a new PublicKey object
|
||||||
*/
|
*/
|
||||||
constructor(number: string | Buffer | Array<number>) {
|
constructor(number: string | Buffer | Array<number>) {
|
||||||
let radix = 10;
|
|
||||||
|
|
||||||
if (typeof number === 'string' && number.startsWith('0x')) {
|
for (;;) {
|
||||||
this._bn = new BN(number.substring(2), 16);
|
if (typeof number === 'string') {
|
||||||
} else {
|
// base 58 encoded?
|
||||||
this._bn = new BN(number, radix);
|
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) {
|
if (this._bn.byteLength() > 32) {
|
||||||
throw new Error(`Invalid public key input`);
|
throw new Error(`Invalid public key input`);
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,11 @@ test('equals', () => {
|
|||||||
]);
|
]);
|
||||||
const hexKey = new PublicKey('0x300000000000000000000000000000000000000000000000000000000000000');
|
const hexKey = new PublicKey('0x300000000000000000000000000000000000000000000000000000000000000');
|
||||||
const decimalKey = new PublicKey('1356938545749799165119972480570561420155507632800475359837393562592731987968');
|
const decimalKey = new PublicKey('1356938545749799165119972480570561420155507632800475359837393562592731987968');
|
||||||
|
const base56Key = new PublicKey('CiDwVBFgWV9E5MvXWoLgnEgn2hK7rJikbvfWavzAQz3');
|
||||||
|
|
||||||
expect(arrayKey.equals(hexKey)).toBeTruthy();
|
expect(arrayKey.equals(hexKey)).toBeTruthy();
|
||||||
expect(arrayKey.equals(decimalKey)).toBeTruthy();
|
expect(arrayKey.equals(decimalKey)).toBeTruthy();
|
||||||
|
expect(arrayKey.equals(base56Key)).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('isPublicKey', () => {
|
test('isPublicKey', () => {
|
||||||
@ -40,7 +42,6 @@ test('toBase58', () => {
|
|||||||
|
|
||||||
const key2 = new PublicKey('123456789');
|
const key2 = new PublicKey('123456789');
|
||||||
expect(key2.toBase58()).toBe('Vj3WURvtMv1mii1vhTqLhcSwVWDRs2E135KtTYUXtTq');
|
expect(key2.toBase58()).toBe('Vj3WURvtMv1mii1vhTqLhcSwVWDRs2E135KtTYUXtTq');
|
||||||
console.log(key2.toBuffer());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('toBuffer', () => {
|
test('toBuffer', () => {
|
||||||
|
Reference in New Issue
Block a user