Skip to content

docs(policies): document address comparison case sensitivity - #756

Draft
andrewkmin wants to merge 2 commits into
mainfrom
andrew/policy-address-casing
Draft

docs(policies): document address comparison case sensitivity#756
andrewkmin wants to merge 2 commits into
mainfrom
andrew/policy-address-casing

Conversation

@andrewkmin

Copy link
Copy Markdown
Contributor

wallet_account.address is compared exactly, including case, while eth.tx.to / eth.tx.from and several other transaction fields are compared case-insensitively. Turnkey stores EVM wallet account addresses in EIP-55 checksummed form, so a condition written with an all-lowercase EVM address silently never matches — it stops granting on an EFFECT_ALLOW policy, and stops blocking on an EFFECT_DENY policy.

Nothing in the docs said so, and the EIP-712 guidance actively pointed the other way: it told readers to make all hex-encoded strings lowercase. That advice is correct for eth.eip_712 and eth.tx fields and wrong for wallet_account.address, so it is now explicitly scoped.

Adds a Case sensitivity section covering the exhaustive list of case-insensitive fields, the stored casing of each address format, and the reason base58 and base64url addresses (Solana, Tron, Dogecoin, XRP, Bitcoin P2PKH/P2SH, TON) are compared case-sensitively — for those encodings, two strings differing only in case are two different addresses.

Also documents CaseInsensitiveString(), which had no coverage anywhere in the docs despite being available in the grammar. It is documented in the wrap-both-sides form, which behaves identically before and after the engine change in tkhq/mono, so this page does not depend on that landing.

`wallet_account.address` is compared exactly, including case, while
`eth.tx.to` / `eth.tx.from` and several other transaction fields are
compared case-insensitively. Turnkey stores EVM wallet account addresses
in EIP-55 checksummed form, so a condition written with an all-lowercase
EVM address silently never matches — it stops granting on an
EFFECT_ALLOW policy, and stops blocking on an EFFECT_DENY policy.

Nothing in the docs said so, and the EIP-712 guidance actively pointed
the other way: it told readers to make all hex-encoded strings
lowercase. That advice is correct for `eth.eip_712` and `eth.tx` fields
and wrong for `wallet_account.address`, so it is now explicitly scoped.

Adds a Case sensitivity section covering the exhaustive list of
case-insensitive fields, the stored casing of each address format, and
the reason base58 and base64url addresses (Solana, Tron, Dogecoin, XRP,
Bitcoin P2PKH/P2SH, TON) are compared case-sensitively — for those
encodings, two strings differing only in case are two different
addresses.

Also documents `CaseInsensitiveString()`, which had no coverage anywhere
in the docs despite being available in the grammar. It is documented in
the wrap-both-sides form, which behaves identically before and after the
engine change in tkhq/mono, so this page does not depend on that
landing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mintlify

mintlify Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
turnkey-docs 🟢 Ready View Preview Aug 6, 2026, 2:28 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant