-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: KeepKey produces accurate EIP-712 eth_signTypedData_v4 signatures #649
fix: KeepKey produces accurate EIP-712 eth_signTypedData_v4 signatures #649
Conversation
…by recovering the signing address + refactor the Ethereum Sandbox section + tech debt + random bug fixes caught along the way + messing around with tsconfig
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
This is tested and confirmed to be working. great work @millsmcilroy v4 types data is current broken for both shapeshift web and kk desktop users. this is a required pr for addressing and fixing. Issues are demonstrable by using v4 typed data over wallet connect. 👍 |
ShapeShift team, @0xApotheosis, @gomesalexandre, et al., I'll just standby and wait for a PR review. When it's all ✅ and ready to ship I can update with a version bump or leave that to you. Thx! |
This reverts commit b5fa182 and resolves all conflicts Lesson for future: use `git reset` to "revert" a merge commit or bad things can happen
needs to be rebased against master and another package bump. logic looks sane outside of the couple small comments above |
…net-type nightmare). Remove some tsconfig changes based on PR feedback.
Should be g2g. Apparently running |
This PR fixes ethSignTypedData for KeepKey, which was returning inaccurate, unverifiable signatures.
Officially closes the hdwallet part of issue #578 and is fully compatible with EIP-712.
This bug was apparent in issues like shapeshift/web#5384
after the JSON RPC eth_signTypedData signatures sent to OpenSea were being rejected as invalid.
Implementation details:
I went with the
EthereumSignTypedHash
approach for ALL TypedData messages after consulting with @BitHighlander. It seems that the KeepKey firmware is missing theEthereumTypedDataStructRequest
type, which would be required for a fully human readable, eip-712-compatible message to be displayed on the device screen.Fortunately, the
EthereumSignTypedHash
approach allows the KeepKey to at least sign the v4 TypedData messages, which for end-users that means being able to do modern web3 interactions like buying and selling NFTs on OpenSea, for example.-The bulk of the fix is in packages/hdwallet-keepkey/src/ethereum.ts
recoverTypedSignature
check to the sandbox so you know right away if the signature that any wallet spits out is accurate.-I refactored the Ethereum sandbox tests too. That file is getting way too large and repetitive, but still is the best way to test with KeepKey.
Thanks!
*KeepKey Bridge didn't seem to be working for me in the sandbox so I used the regular webusb option instead.