feat: use crypto-hash instead of hasha
This commit is contained in:
parent
bd7e802e46
commit
402c160ae9
|
@ -12,10 +12,6 @@ node_modules
|
||||||
# Coverage
|
# Coverage
|
||||||
coverage
|
coverage
|
||||||
|
|
||||||
# Types
|
|
||||||
flow-typed/npm/*
|
|
||||||
!flow-typed/npm/module_vx.x.x.js
|
|
||||||
|
|
||||||
# Release
|
# Release
|
||||||
lib
|
lib
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
declare module 'hasha' {
|
|
||||||
// TODO: Fill in types
|
|
||||||
declare module.exports: any;
|
|
||||||
}
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
// flow-typed signature: bd59b655ec89c675a5f5c2188a37c49d
|
||||||
|
// flow-typed version: <<STUB>>/crypto-hash_v1.2.2/flow_v0.120.1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an autogenerated libdef stub for:
|
||||||
|
*
|
||||||
|
* 'crypto-hash'
|
||||||
|
*
|
||||||
|
* Fill this stub out by replacing all the `any` types.
|
||||||
|
*
|
||||||
|
* Once filled out, we encourage you to share your work with the
|
||||||
|
* community by sending a pull request to:
|
||||||
|
* https://github.com/flowtype/flow-typed
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare module 'crypto-hash' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We include stubs for each file inside this npm package in case you need to
|
||||||
|
* require those files directly. Feel free to delete any files that aren't
|
||||||
|
* needed.
|
||||||
|
*/
|
||||||
|
declare module 'crypto-hash/browser' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'crypto-hash/thread' {
|
||||||
|
declare module.exports: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filename aliases
|
||||||
|
declare module 'crypto-hash/browser.js' {
|
||||||
|
declare module.exports: $Exports<'crypto-hash/browser'>;
|
||||||
|
}
|
||||||
|
declare module 'crypto-hash/index' {
|
||||||
|
declare module.exports: $Exports<'crypto-hash'>;
|
||||||
|
}
|
||||||
|
declare module 'crypto-hash/index.js' {
|
||||||
|
declare module.exports: $Exports<'crypto-hash'>;
|
||||||
|
}
|
||||||
|
declare module 'crypto-hash/thread.js' {
|
||||||
|
declare module.exports: $Exports<'crypto-hash/thread'>;
|
||||||
|
}
|
|
@ -6,6 +6,11 @@ declare module '@solana/web3.js' {
|
||||||
export class PublicKey {
|
export class PublicKey {
|
||||||
constructor(value: number | string | Buffer | Uint8Array | Array<number>);
|
constructor(value: number | string | Buffer | Uint8Array | Array<number>);
|
||||||
static isPublicKey(o: object): boolean;
|
static isPublicKey(o: object): boolean;
|
||||||
|
static createWithSeed(
|
||||||
|
fromPublicKey: PublicKey,
|
||||||
|
seed: string,
|
||||||
|
programId: PublicKey,
|
||||||
|
): Promise<PublicKey>;
|
||||||
equals(publickey: PublicKey): boolean;
|
equals(publickey: PublicKey): boolean;
|
||||||
toBase58(): string;
|
toBase58(): string;
|
||||||
toBuffer(): Buffer;
|
toBuffer(): Buffer;
|
||||||
|
|
|
@ -20,6 +20,11 @@ declare module '@solana/web3.js' {
|
||||||
value: number | string | Buffer | Uint8Array | Array<number>,
|
value: number | string | Buffer | Uint8Array | Array<number>,
|
||||||
): PublicKey;
|
): PublicKey;
|
||||||
static isPublicKey(o: Object): boolean;
|
static isPublicKey(o: Object): boolean;
|
||||||
|
static createWithSeed(
|
||||||
|
fromPublicKey: PublicKey,
|
||||||
|
seed: string,
|
||||||
|
programId: PublicKey,
|
||||||
|
): Promise<PublicKey>;
|
||||||
equals(publickey: PublicKey): boolean;
|
equals(publickey: PublicKey): boolean;
|
||||||
toBase58(): string;
|
toBase58(): string;
|
||||||
toBuffer(): Buffer;
|
toBuffer(): Buffer;
|
||||||
|
|
|
@ -8175,6 +8175,11 @@
|
||||||
"randomfill": "^1.0.3"
|
"randomfill": "^1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"crypto-hash": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-rXXMXepuKg9gIfqE7I1jtVa6saLhzIkDQ2u3kTGUWYiUGsHcUa3LTsfrjPEdOY8kxKlryQtsOmJOU0F23yRJTg=="
|
||||||
|
},
|
||||||
"crypto-random-string": {
|
"crypto-random-string": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
|
||||||
|
@ -10942,27 +10947,6 @@
|
||||||
"minimalistic-assert": "^1.0.1"
|
"minimalistic-assert": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hasha": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
|
|
||||||
"integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
|
|
||||||
"requires": {
|
|
||||||
"is-stream": "^2.0.0",
|
|
||||||
"type-fest": "^0.8.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"is-stream": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
|
|
||||||
},
|
|
||||||
"type-fest": {
|
|
||||||
"version": "0.8.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
|
|
||||||
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hawk": {
|
"hawk": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
|
||||||
|
|
|
@ -73,8 +73,8 @@
|
||||||
"bs58": "^4.0.1",
|
"bs58": "^4.0.1",
|
||||||
"buffer": "^5.4.3",
|
"buffer": "^5.4.3",
|
||||||
"buffer-layout": "^1.2.0",
|
"buffer-layout": "^1.2.0",
|
||||||
|
"crypto-hash": "^1.2.2",
|
||||||
"esdoc-inject-style-plugin": "^1.0.0",
|
"esdoc-inject-style-plugin": "^1.0.0",
|
||||||
"hasha": "^5.1.0",
|
|
||||||
"jayson": "^3.0.1",
|
"jayson": "^3.0.1",
|
||||||
"mz": "^2.7.0",
|
"mz": "^2.7.0",
|
||||||
"node-fetch": "^2.2.0",
|
"node-fetch": "^2.2.0",
|
||||||
|
|
|
@ -98,6 +98,7 @@ function generateConfig(configType) {
|
||||||
'bn.js',
|
'bn.js',
|
||||||
'bs58',
|
'bs58',
|
||||||
'buffer-layout',
|
'buffer-layout',
|
||||||
|
'crypto-hash',
|
||||||
'jayson/lib/client/browser',
|
'jayson/lib/client/browser',
|
||||||
'node-fetch',
|
'node-fetch',
|
||||||
'rpc-websockets',
|
'rpc-websockets',
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
import BN from 'bn.js';
|
import BN from 'bn.js';
|
||||||
import bs58 from 'bs58';
|
import bs58 from 'bs58';
|
||||||
import hasha from 'hasha';
|
import {sha256} from 'crypto-hash';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A public key
|
* A public key
|
||||||
|
@ -80,17 +80,17 @@ export class PublicKey {
|
||||||
/**
|
/**
|
||||||
* Derive a public key from another key, a seed, and a programId.
|
* Derive a public key from another key, a seed, and a programId.
|
||||||
*/
|
*/
|
||||||
static createWithSeed(
|
static async createWithSeed(
|
||||||
fromPublicKey: PublicKey,
|
fromPublicKey: PublicKey,
|
||||||
seed: string,
|
seed: string,
|
||||||
programId: PublicKey,
|
programId: PublicKey,
|
||||||
): PublicKey {
|
): Promise<PublicKey> {
|
||||||
const buffer = Buffer.concat([
|
const buffer = Buffer.concat([
|
||||||
fromPublicKey.toBuffer(),
|
fromPublicKey.toBuffer(),
|
||||||
Buffer.from(seed),
|
Buffer.from(seed),
|
||||||
programId.toBuffer(),
|
programId.toBuffer(),
|
||||||
]);
|
]);
|
||||||
const hash = hasha(buffer, {algorithm: 'sha256'});
|
const hash = await sha256(new Uint8Array(buffer));
|
||||||
return new PublicKey('0x' + hash);
|
return new PublicKey('0x' + hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,42 +224,9 @@ test('equals (II)', () => {
|
||||||
expect(key1.equals(key2)).toBe(true);
|
expect(key1.equals(key2)).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('createWithSeed', () => {
|
test('createWithSeed', async () => {
|
||||||
const defaultPublicKey = new PublicKey([
|
const defaultPublicKey = new PublicKey('11111111111111111111111111111111');
|
||||||
0,
|
const derivedKey = await PublicKey.createWithSeed(
|
||||||
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,
|
defaultPublicKey,
|
||||||
'limber chicken: 4/45',
|
'limber chicken: 4/45',
|
||||||
defaultPublicKey,
|
defaultPublicKey,
|
||||||
|
|
|
@ -22,10 +22,10 @@ if (!mockRpcEnabled) {
|
||||||
jest.setTimeout(30000);
|
jest.setTimeout(30000);
|
||||||
}
|
}
|
||||||
|
|
||||||
test('createAccountWithSeed', () => {
|
test('createAccountWithSeed', async () => {
|
||||||
const fromPubkey = new Account().publicKey;
|
const fromPubkey = new Account().publicKey;
|
||||||
const seed = 'test string';
|
const seed = 'test string';
|
||||||
const newAccountPubkey = PublicKey.createWithSeed(
|
const newAccountPubkey = await PublicKey.createWithSeed(
|
||||||
fromPubkey,
|
fromPubkey,
|
||||||
seed,
|
seed,
|
||||||
StakeProgram.programId,
|
StakeProgram.programId,
|
||||||
|
@ -180,10 +180,10 @@ test('deactivate', () => {
|
||||||
expect(params).toEqual(StakeInstruction.decodeDeactivate(stakeInstruction));
|
expect(params).toEqual(StakeInstruction.decodeDeactivate(stakeInstruction));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('StakeInstructions', () => {
|
test('StakeInstructions', async () => {
|
||||||
const from = new Account();
|
const from = new Account();
|
||||||
const seed = 'test string';
|
const seed = 'test string';
|
||||||
const newAccountPubkey = PublicKey.createWithSeed(
|
const newAccountPubkey = await PublicKey.createWithSeed(
|
||||||
from.publicKey,
|
from.publicKey,
|
||||||
seed,
|
seed,
|
||||||
StakeProgram.programId,
|
StakeProgram.programId,
|
||||||
|
@ -288,7 +288,7 @@ test('live staking actions', async () => {
|
||||||
|
|
||||||
// Create Stake account with seed
|
// Create Stake account with seed
|
||||||
const seed = 'test string';
|
const seed = 'test string';
|
||||||
const newAccountPubkey = PublicKey.createWithSeed(
|
const newAccountPubkey = await PublicKey.createWithSeed(
|
||||||
from.publicKey,
|
from.publicKey,
|
||||||
seed,
|
seed,
|
||||||
StakeProgram.programId,
|
StakeProgram.programId,
|
||||||
|
|
|
@ -8,9 +8,7 @@ test('invalid', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('stable', () => {
|
test('stable', () => {
|
||||||
expect(testnetChannelEndpoint('stable')).toEqual(
|
expect(testnetChannelEndpoint('stable')).toEqual('https://devnet.solana.com');
|
||||||
'https://devnet.solana.com',
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(testnetChannelEndpoint('stable', true)).toEqual(
|
expect(testnetChannelEndpoint('stable', true)).toEqual(
|
||||||
'https://devnet.solana.com',
|
'https://devnet.solana.com',
|
||||||
|
|
Loading…
Reference in New Issue