UNPKG

0xweb

Version:

Contract package manager and other web3 tools

106 lines (94 loc) 4.29 kB
import { secp256k1 } from '@noble/curves/secp256k1' import { TEth } from '@dequanto/models/TEth'; import { $buffer } from './$buffer'; import { $contract } from './$contract'; import { $is } from './$is'; import { $hex } from './$hex'; import { $address } from './$address'; throw new Error(`Deprecated. Use @dequanto/utils/$sig instead.`); // export namespace $signRawNative { // export function signEC (message: string | Uint8Array, privateKey: string | Uint8Array, chainId?: number) { // const sig = secp256k1.sign( // toUint8Array(message) as Uint8Array, // toUint8Array(privateKey, { encoding: 'hex' }) as Uint8Array // ); // let r = sig.r.toString(16).padStart(64, '0'); // let s = sig.s.toString(16).padStart(64, '0'); // // https://eips.ethereum.org/EIPS/eip-155 // let v = (chainId != null // ? sig.recovery + chainId * 2 + 35 // : sig.recovery + 27 // ).toString(16); // return { // v: `0x${v}`, // r: `0x${r}`, // s: `0x${s}`, // signature: `0x${r}${s}${v}`, // signatureVRS: `0x${v}${r}${s}` // } // } // export function signEIPHashed (message: string | Uint8Array, privateKey: string) { // const buffer = toUint8Array(message); // const hash = hashPersonalMessage(buffer); // return signEC(hash, privateKey); // } // export function ecrecover (digest: TEth.Hex | Uint8Array, signature: TEth.Hex | { v, r, s }): TEth.Address { // return recoverAddress(digest, signature); // } // export function eipRecover (message: string | Uint8Array, signature: TEth.Hex | { v, r, s }): TEth.Address { // const buffer = toUint8Array(message); // const hash = hashPersonalMessage(buffer); // return recoverAddress(hash, signature); // } // export function recoverAddress (digest: TEth.Hex | Uint8Array, signature: TEth.Hex | { v, r, s }): Promise<TEth.Address> { // const publicKey = recoverPubKey(digest, signature); // const address = $contract.keccak256(`0x${publicKey.substring(4)}`).slice(-40) // return $address.toChecksum(`0x${address}`); // } // export function recoverPubKey (digest: TEth.Hex | Uint8Array, signature: TEth.Hex | { v, r, s }) { // let { v, r, s } = $is.Hex(signature) // ? splitSignature(signature) // : signature; // let vNum = Number(v); // let recovery: 0 | 1; // if (vNum === 0 || vNum === 1) { // recovery = vNum; // } else if (vNum === 27 || vNum === 28) { // recovery = (vNum - 27) as 0 | 1; // } else if (vNum > 35) { // vNum -= 35; // recovery = vNum % 2 === 0 ? 0 : 1; // } // r = r.substring(2); // s = s.substring(2); // const publicKey = secp256k1.Signature.fromCompact(`${r}${s}`) // .addRecoveryBit(recovery) // .recoverPublicKey($hex.raw($hex.ensure(digest))) // .toHex(false); // return `0x${publicKey}` // } // function splitSignature (signature: TEth.Hex): { v, r, s} { // let r = signature.substring(2, 2 + 64); // let s = signature.substring(2 + 64, 2 + 64 + 64); // let v = signature.substring(2 + 64 + 64); // return { r, s ,v }; // } // function hashPersonalMessage (buffer: Uint8Array) { // const prefix = $buffer.fromString(`\u0019Ethereum Signed Message:\n${buffer.length}`, 'utf-8') // return $contract.keccak256($buffer.concat([prefix, buffer])) // } // function toUint8Array (message: string | Uint8Array, opts?: { encoding?: 'utf8' | 'hex' }): Uint8Array { // if (typeof message === 'string') { // let encoding = opts?.encoding; // if (encoding == null && $is.Hex(message)) { // encoding = 'hex'; // message = message.substring(2); // } // if (encoding === 'hex') { // return $buffer.fromHex(message); // } // return $buffer.fromString(message, opts?.encoding ?? 'utf8'); // } // return message; // } // }