{"version":3,"sources":["../src/bitcoin-core.ts","../src/address/index.ts","../src/network/index.ts","../src/utils.ts","../src/message/bip322-simple.ts","../src/message/deterministic-ecdsa.ts","../src/message/ecdsa.ts","../src/constants.ts"],"sourcesContent":["import * as bitcoin from 'bitcoinjs-lib'\nimport ECPairModule, { ECPairAPI } from 'ecpair'\nimport * as tinysecp256k1 from 'tiny-secp256k1'\nimport * as bitcoinlabSecp256k1 from '@bitcoinerlab/secp256k1'\n\nexport type { ECPairInterface } from 'ecpair'\nexport { bitcoin }\n\nexport enum EccType {\n  tiny = 'tiny',\n  bitcoinlab = 'bitcoinlab',\n}\n\nlet isReactNative = false\ntry {\n  const { Platform } = require('react-native')\n  isReactNative = Platform.OS === 'android' || Platform.OS === 'ios'\n} catch {\n  isReactNative = false\n}\n\nclass ECCManager {\n  eccType: EccType = isReactNative ? EccType.bitcoinlab : EccType.tiny\n\n  private tinyEcc: any = tinysecp256k1\n  // @ts-ignore\n  private tinyEccPair: ECPairAPI\n  private bitcoinlabEcc: any = bitcoinlabSecp256k1\n  private bitcoinlabEccPair: ECPairAPI\n\n  constructor() {\n    if (typeof tinysecp256k1.isPoint == 'function') {\n      // @ts-ignore\n      this.tinyEccPair = (ECPairModule.default ? ECPairModule.default : ECPairModule)(this.tinyEcc)\n    }\n    // @ts-ignore\n    this.bitcoinlabEccPair = (ECPairModule.default ? ECPairModule.default : ECPairModule)(\n      this.bitcoinlabEcc\n    )\n\n    this.setEccType(this.eccType)\n  }\n\n  setEccType(eccType: EccType) {\n    this.eccType = eccType\n    if (this.eccType === EccType.tiny) {\n      bitcoin.initEccLib(this.tinyEcc)\n    } else {\n      bitcoin.initEccLib(this.bitcoinlabEcc)\n    }\n  }\n\n  get ecc() {\n    if (this.eccType === EccType.tiny) {\n      return this.tinyEcc\n    } else {\n      return this.bitcoinlabEcc\n    }\n  }\n\n  get eccPair() {\n    if (this.eccType === EccType.tiny) {\n      return this.tinyEccPair\n    } else {\n      return this.bitcoinlabEccPair\n    }\n  }\n}\n\nexport const eccManager = new ECCManager()\n","import { AddressType, NetworkType } from '@unisat/wallet-types'\nimport { bitcoin } from '../bitcoin-core'\nimport { toPsbtNetwork } from '../network'\n\n/**\n * Convert public key to bitcoin payment object.\n */\nexport function publicKeyToPayment(publicKey: string, type: AddressType, networkType: NetworkType) {\n  const network = toPsbtNetwork(networkType)\n  if (!publicKey) return null\n  const pubkey = Buffer.from(publicKey, 'hex')\n  if (type === AddressType.P2PKH) {\n    return bitcoin.payments.p2pkh({\n      pubkey,\n      network,\n    })\n  } else if (type === AddressType.P2WPKH || type === AddressType.M44_P2WPKH) {\n    return bitcoin.payments.p2wpkh({\n      pubkey,\n      network,\n    })\n  } else if (type === AddressType.P2TR || type === AddressType.M44_P2TR) {\n    return bitcoin.payments.p2tr({\n      internalPubkey: pubkey.slice(1, 33),\n      network,\n    })\n  } else if (type === AddressType.P2SH_P2WPKH) {\n    const data = bitcoin.payments.p2wpkh({\n      pubkey,\n      network,\n    })\n    return bitcoin.payments.p2sh({\n      pubkey,\n      network,\n      redeem: data,\n    })\n  }\n  return null\n}\n\n/**\n * Convert public key to bitcoin address.\n */\nexport function publicKeyToAddress(publicKey: string, type: AddressType, networkType: NetworkType) {\n  const payment = publicKeyToPayment(publicKey, type, networkType)\n  if (payment && payment.address) {\n    return payment.address\n  } else {\n    return ''\n  }\n}\n\n/**\n * Convert public key to bitcoin scriptPk.\n */\nexport function publicKeyToScriptPk(\n  publicKey: string,\n  type: AddressType,\n  networkType: NetworkType\n) {\n  const payment = publicKeyToPayment(publicKey, type, networkType)\n  if (!payment || !payment.output) {\n    return ''\n  }\n  return payment.output.toString('hex')\n}\n\nexport function decodeAddress(address: string) {\n  const mainnet = bitcoin.networks.bitcoin\n  const testnet = bitcoin.networks.testnet\n  const regtest = bitcoin.networks.regtest\n  let decodeBase58: bitcoin.address.Base58CheckResult\n  let decodeBech32: bitcoin.address.Bech32Result\n  let networkType: NetworkType = NetworkType.MAINNET\n  let addressType: AddressType = AddressType.UNKNOWN\n  if (address.startsWith('bc1') || address.startsWith('tb1') || address.startsWith('bcrt1')) {\n    try {\n      decodeBech32 = bitcoin.address.fromBech32(address)\n      if (decodeBech32.prefix === mainnet.bech32) {\n        networkType = NetworkType.MAINNET\n      } else if (decodeBech32.prefix === testnet.bech32) {\n        networkType = NetworkType.TESTNET\n      } else if (decodeBech32.prefix === regtest.bech32) {\n        networkType = NetworkType.REGTEST\n      } else {\n        networkType = NetworkType.MAINNET\n      }\n      if (decodeBech32.version === 0) {\n        if (decodeBech32.data.length === 20) {\n          addressType = AddressType.P2WPKH\n        } else if (decodeBech32.data.length === 32) {\n          addressType = AddressType.P2WSH\n        }\n      } else if (decodeBech32.version === 1) {\n        if (decodeBech32.data.length === 32) {\n          addressType = AddressType.P2TR\n        }\n      }\n      return {\n        networkType,\n        addressType,\n        dust: getAddressTypeDust(addressType),\n      }\n    } catch (e) {}\n  } else {\n    try {\n      decodeBase58 = bitcoin.address.fromBase58Check(address)\n      if (decodeBase58.version === mainnet.pubKeyHash) {\n        networkType = NetworkType.MAINNET\n        addressType = AddressType.P2PKH\n      } else if (decodeBase58.version === testnet.pubKeyHash) {\n        networkType = NetworkType.TESTNET\n        addressType = AddressType.P2PKH\n      } else if (decodeBase58.version === regtest.pubKeyHash) {\n        // do not work\n        networkType = NetworkType.REGTEST\n        addressType = AddressType.P2PKH\n      } else if (decodeBase58.version === mainnet.scriptHash) {\n        networkType = NetworkType.MAINNET\n        addressType = AddressType.P2SH_P2WPKH\n      } else if (decodeBase58.version === testnet.scriptHash) {\n        networkType = NetworkType.TESTNET\n        addressType = AddressType.P2SH_P2WPKH\n      } else if (decodeBase58.version === regtest.scriptHash) {\n        // do not work\n        networkType = NetworkType.REGTEST\n        addressType = AddressType.P2SH_P2WPKH\n      }\n      return {\n        networkType,\n        addressType,\n        dust: getAddressTypeDust(addressType),\n      }\n    } catch (e) {}\n  }\n\n  return {\n    networkType: NetworkType.MAINNET,\n    addressType: AddressType.UNKNOWN,\n    dust: 546,\n  }\n}\n\nfunction getAddressTypeDust(addressType: AddressType) {\n  if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) {\n    return 294\n  } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) {\n    return 330\n  } else {\n    return 546\n  }\n}\n\n/**\n * Get address type.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function getAddressType(\n  address: string,\n  networkType: NetworkType = NetworkType.MAINNET\n): AddressType {\n  return decodeAddress(address).addressType\n}\n\n/**\n * Convert scriptPk to address.\n */\nexport function scriptPkToAddress(\n  scriptPk: string | Buffer,\n  networkType: NetworkType = NetworkType.MAINNET\n) {\n  const network = toPsbtNetwork(networkType)\n  try {\n    const address = bitcoin.address.fromOutputScript(\n      typeof scriptPk === 'string' ? Buffer.from(scriptPk, 'hex') : scriptPk,\n      network\n    )\n    return address\n  } catch (e) {\n    return ''\n  }\n}\n\nexport function addressToScriptPk(address: string, networkType: NetworkType): Buffer {\n  const network = toPsbtNetwork(networkType)\n\n  try {\n    return bitcoin.address.toOutputScript(address, network)\n  } catch (error) {\n    throw new Error(`Invalid address: ${address}`)\n  }\n}\n\nexport function isValidAddress(address: string, networkType: NetworkType): boolean {\n  if (!address) return false\n\n  const network = toPsbtNetwork(networkType)\n\n  try {\n    bitcoin.address.toOutputScript(address, network)\n    return true\n  } catch (error) {\n    return false\n  }\n}\n","import { NetworkType } from '@unisat/wallet-types'\nimport { bitcoin } from '../bitcoin-core'\n\n/**\n * Convert network type to bitcoinjs-lib network.\n */\nexport function toPsbtNetwork(networkType: NetworkType) {\n  if (networkType === NetworkType.MAINNET) {\n    return bitcoin.networks.bitcoin\n  } else if (networkType === NetworkType.TESTNET) {\n    return bitcoin.networks.testnet\n  } else {\n    return bitcoin.networks.regtest\n  }\n}\n\n/**\n * Convert bitcoinjs-lib network to network type.\n */\nexport function toNetworkType(network: bitcoin.Network) {\n  if (network.bech32 == bitcoin.networks.bitcoin.bech32) {\n    return NetworkType.MAINNET\n  } else if (network.bech32 == bitcoin.networks.testnet.bech32) {\n    return NetworkType.TESTNET\n  } else {\n    return NetworkType.REGTEST\n  }\n}\n","import { bitcoin, eccManager } from './bitcoin-core'\n\nexport const toXOnly = (pubKey: Buffer) => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33))\n\nfunction tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Buffer {\n  return bitcoin.crypto.taggedHash('TapTweak', Buffer.concat((h ? [pubKey, h] : [pubKey]) as any))\n}\n\n/**\n * Transform raw private key to taproot address private key\n */\nexport function tweakSigner(signer: bitcoin.Signer, opts: any = {}): bitcoin.Signer {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  let privateKey: Uint8Array | undefined = signer.privateKey!\n  if (!privateKey) {\n    throw new Error('Private key is required for tweaking signer!')\n  }\n  if (signer.publicKey[0] === 3) {\n    privateKey = eccManager.ecc.privateNegate(privateKey)\n  }\n\n  const tweakedPrivateKey = eccManager.ecc.privateAdd(\n    privateKey,\n    tapTweakHash(toXOnly(signer.publicKey), opts.tweakHash) as any\n  )\n  if (!tweakedPrivateKey) {\n    throw new Error('Invalid tweaked private key!')\n  }\n\n  return eccManager.eccPair.fromPrivateKey(Buffer.from(tweakedPrivateKey), {\n    network: opts.network,\n  })\n}\n\n/**\n * ECDSA signature validator\n */\nexport const validator = (pubkey: Buffer, msghash: Buffer, signature: Buffer): boolean => {\n  return eccManager.eccPair.fromPublicKey(pubkey).verify(msghash, signature)\n}\n\n/**\n * Schnorr signature validator\n */\nexport const schnorrValidator = (pubkey: Buffer, msghash: Buffer, signature: Buffer): boolean => {\n  return eccManager.eccPair.fromPublicKey(pubkey).verifySchnorr(msghash, signature)\n}\n","import { encode } from 'varuint-bitcoin'\nimport { addressToScriptPk, getAddressType } from '../address'\nimport { bitcoin } from '../bitcoin-core'\nimport { toPsbtNetwork } from '../network'\nimport { schnorrValidator, validator } from '../utils'\nimport { AddressType, NetworkType } from '@unisat/wallet-types'\n\nfunction bip0322_hash(message: string) {\n  const { sha256 } = bitcoin.crypto\n  const tag = 'BIP0322-signed-message'\n  const tagHash = sha256(Buffer.from(tag))\n  const result = sha256(Buffer.concat([tagHash, tagHash, Buffer.from(message)] as any))\n  return result.toString('hex')\n}\n\nexport function genPsbtOfBIP322Simple({\n  message,\n  address,\n  networkType,\n}: {\n  message: string\n  address: string\n  networkType: NetworkType\n}) {\n  const outputScript = addressToScriptPk(address, networkType)\n  const addressType = getAddressType(address, networkType)\n  const supportedTypes = [\n    AddressType.P2WPKH,\n    AddressType.P2TR,\n    AddressType.M44_P2WPKH,\n    AddressType.M44_P2TR,\n  ]\n  if (supportedTypes.includes(addressType) == false) {\n    throw new Error('Not support address type to sign')\n  }\n\n  const prevoutHash = Buffer.from(\n    '0000000000000000000000000000000000000000000000000000000000000000',\n    'hex'\n  )\n  const prevoutIndex = 0xffffffff\n  const sequence = 0\n  const scriptSig = Buffer.concat([\n    Buffer.from('0020', 'hex'),\n    Buffer.from(bip0322_hash(message), 'hex'),\n  ] as any)\n\n  const txToSpend = new bitcoin.Transaction()\n  txToSpend.version = 0\n  txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig)\n  txToSpend.addOutput(outputScript, 0)\n\n  const psbtToSign = new bitcoin.Psbt()\n  psbtToSign.setVersion(0)\n  psbtToSign.addInput({\n    hash: txToSpend.getHash(),\n    index: 0,\n    sequence: 0,\n    witnessUtxo: {\n      script: outputScript,\n      value: 0,\n    },\n  })\n  psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 })\n\n  return psbtToSign\n}\n\nexport function getSignatureFromPsbtOfBIP322Simple(psbt: bitcoin.Psbt) {\n  const txToSign = psbt.extractTransaction()\n\n  if (!txToSign) throw new Error('Failed to extract transaction from PSBT')\n\n  function encodeVarString(b: any) {\n    return Buffer.concat([encode(b.byteLength), b])\n  }\n\n  if (!txToSign.ins[0]) throw new Error('Failed to extract witness from transaction')\n\n  const len = encode(txToSign.ins[0].witness.length)\n  const result = Buffer.concat([\n    len,\n    ...txToSign.ins[0].witness.map(w => encodeVarString(w)),\n  ] as any)\n  const signature = result.toString('base64')\n\n  return signature\n}\n\nexport function verifyMessageOfBIP322Simple(\n  address: string,\n  msg: string,\n  signature: string,\n  networkType: NetworkType = NetworkType.MAINNET\n) {\n  const addressType = getAddressType(address, networkType)\n  if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) {\n    return verifySignatureOfBIP322Simple_P2PWPKH(address, msg, signature, networkType)\n  } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) {\n    return verifySignatureOfBIP322Simple_P2TR(address, msg, signature, networkType)\n  }\n  return false\n}\n\nfunction verifySignatureOfBIP322Simple_P2TR(\n  address: string,\n  msg: string,\n  sign: string,\n  networkType: NetworkType = NetworkType.MAINNET\n) {\n  const network = toPsbtNetwork(networkType)\n  const outputScript = bitcoin.address.toOutputScript(address, network)\n  const prevoutHash = Buffer.from(\n    '0000000000000000000000000000000000000000000000000000000000000000',\n    'hex'\n  )\n  const prevoutIndex = 0xffffffff\n  const sequence = 0\n  const scriptSig = Buffer.concat([\n    Buffer.from('0020', 'hex'),\n    Buffer.from(bip0322_hash(msg), 'hex'),\n  ] as any)\n\n  const txToSpend = new bitcoin.Transaction()\n  txToSpend.version = 0\n  txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig)\n  txToSpend.addOutput(outputScript, 0)\n\n  const data = Buffer.from(sign, 'base64')\n  const _res = bitcoin.script.decompile(data.slice(1))\n  if (!_res) return false\n  const signature = _res[0] as Buffer\n  const pubkey = Buffer.from('02' + outputScript.subarray(2).toString('hex'), 'hex')\n\n  const psbtToSign = new bitcoin.Psbt()\n  psbtToSign.setVersion(0)\n  psbtToSign.addInput({\n    hash: txToSpend.getHash(),\n    index: 0,\n    sequence: 0,\n    witnessUtxo: {\n      script: outputScript,\n      value: 0,\n    },\n  })\n  psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 })\n  const tapKeyHash = (psbtToSign as any).__CACHE.__TX.hashForWitnessV1(0, [outputScript], [0], 0)\n  const valid = schnorrValidator(pubkey, tapKeyHash, signature)\n  return valid\n}\n\nfunction verifySignatureOfBIP322Simple_P2PWPKH(\n  address: string,\n  msg: string,\n  sign: string,\n  networkType: NetworkType = NetworkType.MAINNET\n) {\n  const network = toPsbtNetwork(networkType)\n  const outputScript = bitcoin.address.toOutputScript(address, network)\n\n  const prevoutHash = Buffer.from(\n    '0000000000000000000000000000000000000000000000000000000000000000',\n    'hex'\n  )\n  const prevoutIndex = 0xffffffff\n  const sequence = 0\n  const scriptSig = Buffer.concat([\n    Buffer.from('0020', 'hex'),\n    Buffer.from(bip0322_hash(msg), 'hex'),\n  ] as any)\n\n  const txToSpend = new bitcoin.Transaction()\n  txToSpend.version = 0\n  txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig)\n  txToSpend.addOutput(outputScript, 0)\n\n  const data = Buffer.from(sign, 'base64')\n  const _res = bitcoin.script.decompile(data.slice(1))\n\n  if (!_res) return false\n\n  const psbtToSign = new bitcoin.Psbt()\n  psbtToSign.setVersion(0)\n  psbtToSign.addInput({\n    hash: txToSpend.getHash(),\n    index: 0,\n    sequence: 0,\n    witnessUtxo: {\n      script: outputScript,\n      value: 0,\n    },\n  })\n  psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 })\n\n  psbtToSign.updateInput(0, {\n    partialSig: [\n      {\n        pubkey: _res[1] as any,\n        signature: _res[0] as any,\n      },\n    ],\n  })\n  const valid = psbtToSign.validateSignaturesOfAllInputs(validator)\n  return valid\n}\n","import * as hmac from '@noble/hashes/hmac'\nimport * as sha256 from '@noble/hashes/sha256'\nimport * as noble_secp256k1 from '@noble/secp256k1'\nimport { ECPairInterface, bitcoin } from '../bitcoin-core'\nnoble_secp256k1.utils.hmacSha256Sync = (key, ...msgs) =>\n  hmac.hmac(sha256.sha256, key, noble_secp256k1.utils.concatBytes(...msgs))\nconst MAGIC_BYTES = Buffer.from('Bitcoin Signed Message:\\n')\n\nfunction varintBufNum(n: number) {\n  let buf\n  if (n < 253) {\n    buf = Buffer.alloc(1)\n    buf.writeUInt8(n, 0)\n  } else if (n < 0x10000) {\n    buf = Buffer.alloc(1 + 2)\n    buf.writeUInt8(253, 0)\n    buf.writeUInt16LE(n, 1)\n  } else if (n < 0x100000000) {\n    buf = Buffer.alloc(1 + 4)\n    buf.writeUInt8(254, 0)\n    buf.writeUInt32LE(n, 1)\n  } else {\n    buf = Buffer.alloc(1 + 8)\n    buf.writeUInt8(255, 0)\n    buf.writeInt32LE(n & -1, 1)\n    buf.writeUInt32LE(Math.floor(n / 0x100000000), 5)\n  }\n  return buf as any\n}\n\nfunction magicHash(message: string) {\n  const prefix1 = varintBufNum(MAGIC_BYTES.length)\n  const messageBuffer = Buffer.from(message)\n  const prefix2 = varintBufNum(messageBuffer.length)\n  const buf = Buffer.concat([prefix1, MAGIC_BYTES, prefix2, messageBuffer])\n  return bitcoin.crypto.hash256(buf)\n}\n\nfunction toCompact(i: number, signature: Uint8Array, compressed: boolean) {\n  if (!(i === 0 || i === 1 || i === 2 || i === 3)) {\n    throw new Error('i must be equal to 0, 1, 2, or 3')\n  }\n\n  let val = i + 27 + 4\n  if (!compressed) {\n    val = val - 4\n  }\n  const result = noble_secp256k1.utils.concatBytes(new Uint8Array([val]), signature)\n  return Buffer.from(result)\n}\n\nexport function signMessageOfDeterministicECDSA(ecpair: ECPairInterface, message: string): string {\n  if (!ecpair.privateKey) {\n    throw new Error('Private key is required for signing');\n  }\n  \n  const hash = magicHash(message)\n  const [signature, i] = noble_secp256k1.signSync(\n    Uint8Array.from(hash),\n    ecpair.privateKey.toString('hex'),\n    {\n      canonical: true,\n      recovered: true,\n      der: false,\n    }\n  )\n  return toCompact(i, signature, true).toString('base64')\n}\n","import { ECPairInterface, bitcoin, eccManager } from '../bitcoin-core'\n\nconst MAGIC_BYTES = Buffer.from('Bitcoin Signed Message:\\n')\n\nfunction varintBufNum(n: number) {\n  let buf\n  if (n < 253) {\n    buf = Buffer.alloc(1)\n    buf.writeUInt8(n, 0)\n  } else if (n < 0x10000) {\n    buf = Buffer.alloc(1 + 2)\n    buf.writeUInt8(253, 0)\n    buf.writeUInt16LE(n, 1)\n  } else if (n < 0x100000000) {\n    buf = Buffer.alloc(1 + 4)\n    buf.writeUInt8(254, 0)\n    buf.writeUInt32LE(n, 1)\n  } else {\n    buf = Buffer.alloc(1 + 8)\n    buf.writeUInt8(255, 0)\n    buf.writeInt32LE(n & -1, 1)\n    buf.writeUInt32LE(Math.floor(n / 0x100000000), 5)\n  }\n  return buf\n}\n\nfunction magicHash(message: string) {\n  const prefix1 = varintBufNum(MAGIC_BYTES.length)\n  const messageBuffer = Buffer.from(message)\n  const prefix2 = varintBufNum(messageBuffer.length)\n  const buf = Buffer.concat([prefix1, MAGIC_BYTES, prefix2, messageBuffer] as any)\n  return bitcoin.crypto.hash256(buf)\n}\n\nexport function signMessageOfECDSA(privateKey: ECPairInterface, text: string) {\n  // Use deterministic ECDSA for now - can be enhanced later\n  const hash = magicHash(text)\n  const signature = privateKey.sign(hash)\n  return signature.toString('hex')\n}\n\nexport function verifyMessageOfECDSA(publicKey: string, text: string, sig: string) {\n  try {\n    const hash = magicHash(text)\n    const pubKeyBuffer = Buffer.from(publicKey, 'hex')\n\n    // The signature from deterministic-ecdsa is in base64 format\n    const sigBuffer = Buffer.from(sig, 'base64')\n\n    if (sigBuffer.length !== 65) {\n      return false\n    }\n\n    // Extract recovery flag and signature\n    const recoveryFlag = sigBuffer[0]\n    const signature = sigBuffer.slice(1)\n\n    // Verify the signature using ECPair\n    const keyPair = eccManager.eccPair.fromPublicKey(pubKeyBuffer)\n    return keyPair.verify(hash, signature)\n  } catch (error) {\n    return false\n  }\n}\n","export const UTXO_DUST = 546\n"],"mappings":"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","names":["NetworkType","NetworkType","AddressType","NetworkType","sha256","MAGIC_BYTES","varintBufNum","magicHash"]}