Join Nostr
2026-07-15 02:47:10 UTC

mleku on Nostr: so, i am continuing with the P2SPKH (pay to schnorr public key hash) work. here are ...

so, i am continuing with the P2SPKH (pay to schnorr public key hash) work. here are the other changes that i am making to the codebase and adding to the documentation. pretty much including bip-110 policies but adding the new transaction type and flag-day activating defaults:

here's the complete list of mempool policy changes for the fork:

**op_return / data carrier:**

1. `-datacarriersize` default: 80 bytes (revert from current 83/effectively unlimited)
2. `-datacarrier` default: true (keep, but enforce the 80 byte limit)
3. restore `-maxopreturnrelay` option with default 80 bytes

**taproot-specific:**

4. `-taprootwitnesslimit` (new option): reject taproot transactions with witness stack exceeding 98 bytes per input (simple monetary tx size: 1 sig + 1 pubkey)
5. `-rejecttaproot` (new option): after flag day, reject all new taproot transactions in mempool. default: false until flag day, then true.

**mempool limits (revert to pre-taproot defaults):**

6. `-limitancestorcount`: 25 (revert from current higher values)
7. `-limitdescendantcount`: 25 (revert from current higher values)
8. `-bytespersigop`: 20 (revert from current more permissive values)
9. `-permitbaremultisig`: false (keep current default)

**restored UI options (Qt GUI):**

10. data carrier size limit in network settings
11. op_return relay toggle in network settings
12. taproot witness limit in advanced mempool settings
13. ancestor/descendant count limits in advanced mempool settings

**service bit:**

14. `NODE_P2SPKH = 1 << 12` for network discovery

**consensus (the core change):**

15. witness version 3 with HASH256(x-only-pubkey) - p2spkh address type
16. `SCRIPT_VERIFY_P2SPKH` always active on upgraded nodes
17. `spk()` descriptor with `87h` derivation path

**mempool policy (non-consensus, configurable):**

18. reject taproot transactions with witness > 98 bytes per input
19. reject op_return > 80 bytes
20. after flag day, reject all new taproot transactions (optional, configurable)

that's the complete change set. the document should present these as three categories: consensus (hard), mempool policy (soft, configurable), and UI/UX (quality of life).

---

the point of adding the new, simplified, hash-shielded address and transaction type is to provide the more compact transactions using bip-340 signatures, and all of the elements of spam-blocking that everyone on the BIP-110 side want. BIP-110 does not go far enough because it leaves taproot active (this soft fork will default reject taproot transactions altogether) and doesn't provide a credible means to defense against the potential quantum attack because taproot transactions expose the pubkey on the user when they receive payments, meaning that the clock is ticking for eventual compromise in the next 10-15 years.

#p2spkh #bitcoin