# PUSHTX Key Insights and Application to SmartLedger-BSV This document extracts the critical insights from nChain's PUSHTX whitepaper that informed our implementation and security considerations for SmartLedger-BSV's smart contract capabilities. ## Core PUSHTX Concept **Original Innovation**: Developed by Y. Chan and D. Kramer at nChain (2017) **Fundamental Principle**: Generate a signature in-script on a data element and use OP_CHECKSIG to verify it. When verification passes, it proves the message constructed by OP_CHECKSIG is identical to the data element on the stack, effectively "pushing" the current spending transaction to the stack. ## Key Technical Components ### 1. Signature Generation Building Block **ECDSA Formula**: `s = k^(-1)(z + ra) mod n` - `z`: Double SHA256 of message to be signed - `k`: Ephemeral key (must be fixed) - `r`: x-coordinate of ephemeral key point - `a`: Private key (must be fixed) - `n`: Curve order **Critical Security Requirements**: - Both private key `a` and ephemeral key `k` must be fixed in locking script - Public key must be fixed to prevent malleability - SIGHASH flag should be fixed for restrictiveness ### 2. Message Construction Building Block **Signed Message Components** (11 items total): 1. Version (4 bytes) - Optional 2. Hash of input outpoints (32 bytes) - Infeasible due to circular reference 3. Hash of input sequences (32 bytes) - Optional, recommend flexible 4. Input outpoint (36 bytes) - Infeasible due to circular reference 5. Previous locking script length - Optional 6. Previous locking script - Infeasible due to circular reference 7. Previous output value (8 bytes) - Optional 8. Sequence number (4 bytes) - Optional 9. Hash of outputs (32 bytes) - Optional if known, otherwise infeasible 10. Locktime (4 bytes) - Optional 11. SIGHASH flag (4 bytes) - Recommend fixed ## Security Analysis Insights ### Formal Security Claims **Claim 1**: Computational infeasibility to construct alternative message `m'` that validates with same signature `(r,s)`, assuming hash function is preimage and collision resistant. **Claim 2**: Public key must be fixed to prevent signature malleability. **Claim 3**: Ephemeral key `k` must be fixed to prevent transaction ID changes. **Claim 4**: SIGHASH flag should be fixed to prevent unintended transaction modifications. ## Application to SmartLedger-BSV ### Implementation Considerations 1. **Script Size Optimization**: - nChain's example shows ~1KB transaction sizes with optimizations - Endianness reversal operations add significant overhead (~500 bytes) - Alt stack usage can save ~200 bytes by storing constants 2. **Perpetually Enforcing Locking Scripts (PELS)**: - Enable conditions that persist across spending chains - Useful for covenant-style smart contracts - Critical for maintaining contract state across transactions 3. **Transaction Fee Handling**: - Can use SIGHASH_SINGLE|ANYONECANPAY for fee flexibility - Alternative: Build fee deduction into locking script logic - Diminishing output values can limit total spend iterations ### Integration with SmartContract Interface Our SmartLedger-BSV implementation leverages these PUSHTX principles in: - **Transaction validation**: Ensuring spending transactions meet contract conditions - **State preservation**: Maintaining contract state across transaction chains - **Security enforcement**: Preventing unauthorized modifications to contract logic - **Covenant implementation**: Creating self-enforcing contract conditions ## Key Takeaways for Development 1. **Security First**: Fixed keys and parameters prevent malleability attacks 2. **Optimization Matters**: Script size directly impacts transaction costs 3. **Flexibility vs Security**: Balance between enforceable constraints and spending flexibility 4. **Circular Reference Challenges**: Some transaction fields cannot be predetermined 5. **Hash Function Assumptions**: Security relies on SHA256 preimage and collision resistance ## Technical Specifications Used - **Curve**: secp256k1 - **Hash Function**: Double SHA256 - **Signature Format**: DER encoding with canonical s values (s ≤ n/2) - **Bitcoin SV Version**: Tested on v1.0.8 regtest ## Implementation Notes - All example scripts from nChain paper are for testing only - Mainnet deployment requires thorough security review - Endianness handling adds significant complexity - Alt stack optimization can reduce script size substantially --- *This document synthesizes key insights from nChain's WP1605 "PUSHTX and Its Building Blocks" that directly informed SmartLedger-BSV's smart contract implementation and security model.*