PHP WebShell

Текущая директория: /opt/BitGoJS/examples/ts/eth

Просмотр файла: decodeSignature.ts

/**
 *  Its a function to recover the signer address of the siganture payload for a eth multisig transaction
 *
 * Copyright 2024, BitGo, Inc.  All Rights Reserved.
 */
import { Eth } from '../../../modules/account-lib';
import * as ethUtil from 'ethereumjs-util';
import * as ethAbi from 'ethereumjs-abi';

const getOperationHash = (data: string): string => {
  const { expireTime, sequenceId, amount, to } = Eth.Utils.decodeTransferData(data);
  console.log('to             :  ', to);
  console.log('amount         :  ', amount);
  console.log('expireTime     :  ', expireTime);
  console.log('sequenceId     :  ', sequenceId);
  return ethAbi.soliditySHA3(
    ...[
      ['string', 'address', 'uint', 'uint', 'uint'],
      ['ETHER', to, amount, expireTime, sequenceId],
    ]
  );
};

const recoverSigner = function () {
  // decode your transaction hex using https://rawtxdecode.in/
  // use input as data here to decode the signature
  const data = ''; // TODO : add transaction data

  const { signature } = Eth.Utils.decodeTransferData(data);
  console.log('signature     :  ', signature);
  const { v, r, s } = ethUtil.fromRpcSig(signature);
  const operationHash = getOperationHash(data);
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  // @ts-ignore known compatibility issue with @types/ethereumjs-util
  const pubKeyBuffer = ethUtil.ecrecover(operationHash, v, r, s);
  console.log('operationHash     :  ', operationHash);
  console.log('pubKeyBuffer      :  ', ethUtil.bufferToHex(pubKeyBuffer));
  return ethUtil.bufferToHex(ethUtil.pubToAddress(ethUtil.importPublic(pubKeyBuffer)));
};

async function main() {
  const recoverAdd = recoverSigner();
  console.log('\n \n The provided transaction has been signed by', recoverAdd);
}

main().catch((e) => console.error(e));

Выполнить команду


Для локальной разработки. Не используйте в интернете!