PHP WebShell
Текущая директория: /opt/BitGoJS/modules/abstract-eth/src/lib
Просмотр файла: keyPair.ts
import { addHexPrefix, pubToAddress } from 'ethereumjs-util';
import {
DefaultKeys,
isPrivateKey,
isPublicKey,
isSeed,
KeyPairOptions,
Secp256k1ExtendedKeyPair,
} from '@bitgo/sdk-core';
import { randomBytes } from 'crypto';
import { bip32 } from '@bitgo/secp256k1';
const DEFAULT_SEED_SIZE_BYTES = 64;
/**
* Ethereum keys and address management.
*/
export class KeyPair extends Secp256k1ExtendedKeyPair {
/**
* Public constructor. By default, creates a key pair with a random master seed.
*
* @param { KeyPairOptions } source Either a master seed, a private key (extended or raw), or a public key
* (extended, compressed, or uncompressed)
*/
constructor(source?: KeyPairOptions) {
super(source);
if (!source) {
const seed = randomBytes(DEFAULT_SEED_SIZE_BYTES);
this.hdNode = bip32.fromSeed(seed);
} else if (isSeed(source)) {
this.hdNode = bip32.fromSeed(source.seed);
} else if (isPrivateKey(source)) {
this.recordKeysFromPrivateKey(source.prv);
} else if (isPublicKey(source)) {
this.recordKeysFromPublicKey(source.pub);
} else {
throw new Error('Invalid key pair options');
}
if (this.hdNode) {
this.keyPair = Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
}
}
/**
* Ethereum default keys format is raw private and uncompressed public key
*
* @returns { DefaultKeys } The keys in the protocol default key format
*/
getKeys(): DefaultKeys {
return {
pub: this.getPublicKey({ compressed: this.hdNode !== undefined })
.toString('hex')
.toUpperCase(),
prv: this.getPrivateKey()?.toString('hex').toUpperCase(),
};
}
/**
* Get an Ethereum public address
*
* @returns {string} The address derived from the public key
*/
getAddress(): string {
const publicKey = Buffer.from(this.getKeys().pub, 'hex'); // first two characters identify a public key
return addHexPrefix(pubToAddress(publicKey, true).toString('hex'));
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!