From df4328966c3ec9fd59442c7fda6bb65777e28a49 Mon Sep 17 00:00:00 2001 From: Steven Saurbier Date: Sat, 8 Feb 2025 08:56:38 -0600 Subject: [PATCH 1/3] Updated ERC draft: Programmatically Derived Addresses (PDAs) --- ERCS/erc-draft-PDA.md | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 ERCS/erc-draft-PDA.md diff --git a/ERCS/erc-draft-PDA.md b/ERCS/erc-draft-PDA.md new file mode 100644 index 00000000000..57a3ea3eecd --- /dev/null +++ b/ERCS/erc-draft-PDA.md @@ -0,0 +1,105 @@ +--- +EIP: TBD +Title: Program-Derived Addresses (PDAs) for Ethereum Smart Contracts +Author: John Crunch, https://github.com/JohnCrunch +Status: Draft +Type: Standards Track +Category: ERC +Created: 2025-2-08 +--- + +## Abstract +This Ethereum Improvement Proposal (EIP) introduces Program-Derived Addresses (PDAs) as a mechanism to generate deterministic, contract-derived addresses without private keys. Inspired by Solana’s PDA architecture, this standard enables smart contracts to create verifiable and immutable addresses using predefined seeds and cryptographic operations. PDAs provide stateless, permissionless interactions with smart contracts while ensuring security and uniqueness. + +## Motivation +Ethereum’s current address system requires explicit deployment of contracts to generate new addresses or the use of externally owned accounts (EOAs) with private keys. This introduces inefficiencies in contract-based account generation. However, Ethereum already supports deterministic contract deployment using CREATE2. PDAs provide: +- **Deterministic Contract Addresses**: Smart contracts can generate specific, predictable addresses for interactions without requiring deployment. +- **Improved UX & Statelessness**: Eliminates the need for EOAs for specific interactions, reducing gas costs and simplifying account recovery. +- **Enhanced Security**: No private key exists for PDAs, mitigating risks of key exposure and hacks. +- **Trustless Multi-Contract State Management**: Contracts can interact with off-chain and on-chain data using derived addresses without requiring intermediary registries. +sdf +## Specification +A **Program-Derived Address (PDA)** is an Ethereum address deterministically generated by a contract using a combination of: + +- A **base contract address** +- A **set of seed values** +- A **cryptographic derivation function** (Keccak256, SHA256, or other secure hashing algorithms) + +The PDA is computed as follows: +```solidity +function derivePDA(address baseContract, bytes32[] memory seeds) public pure returns (address) { + bytes32 hash = keccak256(abi.encodePacked(baseContract, seeds)); + return address(uint160(uint256(hash))); +} +``` + +## Rationale + +### Key Properties +- **No Private Key Association**: The PDA does not have a corresponding private key, making it non-custodial and non-signable. +- **Verifiable On-Chain**: Any contract can recompute a PDA and validate its authenticity. +- **Prevents Collisions**: By incorporating the contract’s address, PDAs remain unique to the originating smart contract. + +### Use Cases +#### 1. Stateless Account Abstraction +PDAs allow contracts to operate permissionlessly on derived accounts, facilitating multi-user, multi-session access without requiring new wallet generation. + +#### 2. Gasless Meta-Transactions +Users can interact with PDAs without directly owning them, enabling sponsored transactions where a relayer signs and pays gas on their behalf. + +#### 3. Trustless Escrow & Sub-Accounts +Protocols can create predictable, verifiable addresses for escrow, lending, and financial primitives without requiring independent contract deployments. + +#### 4. Off-Chain State Commitments +PDAs provide a deterministic address for off-chain data commitments, ensuring verifiability while reducing on-chain storage costs. + +#### 5. Efficient Multi-Party Control Without Gas Costs +Ethereum’s multisig wallets require explicit transactions to modify ownership structures, incurring gas fees. PDAs enable multi-party control without the need for continuous storage updates, as authority can be derived programmatically. + +#### 6. On-Chain Order Books and Marketplaces +Ethereum’s on-chain order books require storage mappings, making them expensive in gas costs. PDAs allow orders to be stored in derived addresses without bloating contract storage, similar to Solana’s Serum order book model. + +#### 7. Dynamic On-Chain Games +PDAs can facilitate player state storage in decentralized games, reducing reliance on smart contract storage while maintaining programmatic access to game states. + +#### 8. Precomputed Addresses for DeFi and Oracles +Lending protocols, AMMs, and on-chain oracles can generate deterministic PDAs for vaults, price feeds, and liquidity pools without requiring separate contract deployments, improving gas efficiency. + +## Backwards Compatibility +PDAs introduce a new derivation method but do not modify existing Ethereum accounts or contract mechanisms. They are opt-in and compatible with existing account models. + +## Security Considerations +- **Collision Resistance**: Proper seed selection and hashing prevent unintended address overlaps. +- **Replay Attacks**: Since PDAs are stateless, contracts must implement nonce-based or time-locked execution policies. +- **Access Control**: Contracts should restrict interactions with PDAs to prevent unauthorized execution. + +## Implementation Example +A sample implementation of a smart contract utilizing PDAs: +```solidity +contract PDARegistry { + mapping(address => bool) public validPDAs; + + function registerPDA(bytes32[] memory seeds, uint256 bumpSeed) external { + address pda = derivePDA(msg.sender, seeds, bumpSeed); + require(validPDAs[pda] == false, "PDA already registered"); + require(isPDA(pda, msg.sender, seeds, bumpSeed), "Invalid PDA"); + validPDAs[pda] = true; + } + + function derivePDA(address baseContract, bytes32[] memory seeds, uint256 bumpSeed) public pure returns (address) { + bytes32 hash = keccak256(abi.encodePacked(baseContract, seeds, bumpSeed)); + return address(uint160(uint256(hash))); + } + + function isPDA(address potentialPDA, address baseContract, bytes32[] memory seeds, uint256 bumpSeed) public pure returns (bool) { + return potentialPDA == derivePDA(baseContract, seeds, bumpSeed); + } +} +``` + +## Conclusion +Program-Derived Addresses (PDAs) introduce a deterministic, secure method for smart contracts to generate and interact with addresses without deploying new contracts or requiring EOAs. By integrating PDAs into Ethereum, we enable more flexible and efficient contract interactions while preserving security and decentralization. + +## References +- Solana’s PDA Documentation: https://docs.solana.com/developing/programming-model/derived-addresses + From 55529d5f24aa39a63580a3ae53e8f095086249da Mon Sep 17 00:00:00 2001 From: Steven Saurbier Date: Sat, 8 Feb 2025 09:30:27 -0600 Subject: [PATCH 2/3] Updated ERC draft: Programmatically Derived Addresses (PDAs) --- ERCS/erc-draft-PDA.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ERCS/erc-draft-PDA.md b/ERCS/erc-draft-PDA.md index 57a3ea3eecd..242325b7f4b 100644 --- a/ERCS/erc-draft-PDA.md +++ b/ERCS/erc-draft-PDA.md @@ -1,7 +1,8 @@ --- EIP: TBD -Title: Program-Derived Addresses (PDAs) for Ethereum Smart Contracts -Author: John Crunch, https://github.com/JohnCrunch +Title: Program-Derived Addresses (PDAs) +Author: John Crunch, @JohnCrunch +Discussions-to: TBD Status: Draft Type: Standards Track Category: ERC From b8b8272cabc2534087f63c46fdb8fb83b3266685 Mon Sep 17 00:00:00 2001 From: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:45:05 -0500 Subject: [PATCH 3/3] Update and rename erc-draft-PDA.md to erc-7879.md --- ERCS/{erc-draft-PDA.md => erc-7879.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename ERCS/{erc-draft-PDA.md => erc-7879.md} (99%) diff --git a/ERCS/erc-draft-PDA.md b/ERCS/erc-7879.md similarity index 99% rename from ERCS/erc-draft-PDA.md rename to ERCS/erc-7879.md index 242325b7f4b..922d3d8183f 100644 --- a/ERCS/erc-draft-PDA.md +++ b/ERCS/erc-7879.md @@ -1,5 +1,5 @@ --- -EIP: TBD +EIP: 7879 Title: Program-Derived Addresses (PDAs) Author: John Crunch, @JohnCrunch Discussions-to: TBD