Skip to content

Instantly share code, notes, and snippets.

@mikekelly
Forked from protortyp/getPubKey.js
Created February 1, 2022 16:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikekelly/fb9ff6323ac364d07cd2aef7486e94fb to your computer and use it in GitHub Desktop.
Save mikekelly/fb9ff6323ac364d07cd2aef7486e94fb to your computer and use it in GitHub Desktop.
Attempting to get the public key
const ethers = require("ethers")
const pk =
"0x0471c746523d16e93d4738f882d9b0beebf66c68caa0f895db15686b57b878cfc7b3e09813ba94f1bbfaa91a06566d3d18bbf69d10bcc947325bbcd6fea97ed692"
const ad = "0xcD3edF915387E2555A829567cE0dBbC919834B82"
getPubKey = async () => {
const infuraProvider = new ethers.providers.JsonRpcProvider(
"https://ropsten.infura.io/v3/<projectID>"
)
const tx = await infuraProvider.getTransaction(
"0x07035a057bdddc9c0e1c07c32b341f6082f9d6be2dc39452753587c2e69fbf96"
)
const expandedSig = {
r: tx.r,
s: tx.s,
v: tx.v
}
const signature = ethers.utils.joinSignature(expandedSig)
const txData = {
gasPrice: tx.gasPrice,
gasLimit: tx.gasLimit,
value: tx.value,
nonce: tx.nonce,
data: tx.data,
chainId: tx.chainId,
to: tx.to
}
const rsTx = await ethers.utils.resolveProperties(txData)
const raw = ethers.utils.serializeTransaction(rsTx) // returns RLP encoded tx
const msgHash = ethers.utils.keccak256(raw) // as specified by ECDSA
const msgBytes = ethers.utils.arrayify(msgHash) // create binary hash
const recoveredPubKey = ethers.utils.recoverPublicKey(msgBytes, signature)
const recoveredAddress = ethers.utils.recoverAddress(msgBytes, signature)
console.log(recoveredAddress)
console.log(recoveredPubKey)
console.log("Correct public key:", recoveredPubKey === pk)
console.log("Correct address:", recoveredAddress === ad)
}
getPubKey()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment