Skip to content

Add ERC: Permissioned Pull - #1401

Open
recurmj wants to merge 23 commits into
ethereum:masterfrom
recurmj:ppo-ercs-draft
Open

Add ERC: Permissioned Pull#1401
recurmj wants to merge 23 commits into
ethereum:masterfrom
recurmj:ppo-ercs-draft

Conversation

@recurmj

@recurmj recurmj commented Dec 11, 2025

Copy link
Copy Markdown

This PR proposes two related ERCs that together define a portable, revocable pull-permission primitive:

  1. Permissioned Authorization Object (PPO)

    • EIP-712 typed struct describing bounded, revocable consent to pull tokens.
    • Chain-agnostic, portable across executors that adopt the same type.
    • Intended as the shared “authorization primitive” layer.
  2. Permissioned Pull Execution Interface

    • Standard pull executor interface that consumes a PPO and executes transferFrom under strict rules.
    • Defines pull(), nonce & revocation views, canonical events, and normative execution behavior.

Both drafts are aligned with the architectural analysis in RIP-000 / “The One-Shot Authorization Flaw in Digital Value Systems” and the updated RIP-001 thread. Philosophical framing has been removed; these drafts focus purely on:

  • defining a neutral, reusable EIP-712 Authorization object (PPO), and
  • a minimal, composable execution interface that can be implemented by any executor.

The intention is for these to serve as the canonical ERC-A / ERC-B split that James and others suggested earlier:

  • ERC-A: Authorization object (PPO)
  • ERC-B: Pull execution interface

I’m happy to adapt naming, file layout, or minor spec details to fit current ERC process preferences.

Add ERC-A: Permissioned Authorization Object (PPO)
Add ERC-B: Permissioned Pull Execution Interface
@eip-review-bot

eip-review-bot commented Dec 11, 2025

Copy link
Copy Markdown
Collaborator

✅ All reviewers have approved.

@github-actions github-actions Bot added the w-ci label Dec 11, 2025
@eip-review-bot eip-review-bot changed the title ERC: Permissioned Authorization Object (PPO) & Permissioned Pull Execution Interface Add ERC: Permissioned Pull Execution Interface Dec 11, 2025
Comment thread ERCS/erc-permissioned-pull-executor.md Outdated
@@ -0,0 +1,216 @@
---
eip: <to be assigned>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eip: <to be assigned>
eip: 8102

Assigning next sequential EIP/ERC/RIP number.
Numbers are assigned by editors & associates.

Please also update the filename.

Comment thread ERCS/erc-permissioned-pull-executor.md Outdated
@@ -0,0 +1,216 @@
---
eip: <to be assigned>
title: Permissioned Pull Execution Interface

@abcoathup abcoathup Dec 12, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: Permissioned Pull Execution Interface
title: Permissioned Pull

Interface seems superfluous in an ERC title. Note: I am not an editor.
Given you used Permissioned Pull in the discussion topic on Eth Magicians, you may want to go with that.

Comment thread ERCS/erc-permissioned-pull-executor.md Outdated
title: Permissioned Pull Execution Interface
description: Standard interface for executing pull-based transfers using Permissioned Authorization Objects (PPOs).
author: Mats Heming Julner (@recurmj)
discussions-to: https://ethereum-magicians.org/t/draft-erc-rip-001-permissioned-pull-standard-consented-flow-layer-for-digital-value/25931

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
discussions-to: https://ethereum-magicians.org/t/draft-erc-rip-001-permissioned-pull-standard-consented-flow-layer-for-digital-value/25931
discussions-to: https://ethereum-magicians.org/t/erc-8102-permissioned-pull/25931

Updated with assigned number and title

Comment thread ERCS/erc-ppo-authorization-object.md Outdated
@@ -0,0 +1,217 @@
---
eip: <to be assigned>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eip: <to be assigned>
eip: 8103

Assigning next sequential EIP/ERC/RIP number.
Numbers are assigned by editors & associates.

Please also update the filename.

Comment thread ERCS/erc-ppo-authorization-object.md Outdated
title: Permissioned Authorization Object (PPO)
description: "A portable, revocable EIP-712 authorization struct for bounded pull-based transfers."
author: "Mats Heming Julner (@recurmj)"
discussions-to: "https://ethereum-magicians.org/t/draft-erc-rip-001-permissioned-pull-standard-consented-flow-layer-for-digital-value/25931"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Each ERC should have a separate discussions thread

@abcoathup

Copy link
Copy Markdown
Contributor

Please note, ERCs are not for promotion/marketing purposes.

@abcoathup

Copy link
Copy Markdown
Contributor

Suggest splitting each ERC into a separate PR.

@eip-review-bot eip-review-bot changed the title Add ERC: Permissioned Pull Execution Interface Add ERC: Permissioned Pull Dec 12, 2025
@github-actions github-actions Bot added w-ci and removed w-ci labels Dec 12, 2025
@recurmj

recurmj commented Dec 12, 2025

Copy link
Copy Markdown
Author

Thanks for the guidance.

I’ve split the specification into ERC-8102 (execution) and ERC-8103 (authorization), updated filenames, cross-references, titles, and discussions-to links accordingly.

Let me know if anything else is needed.

Removed the word “standard” in description
Comment thread ERCS/erc-8103.md Outdated
@@ -0,0 +1,217 @@
---
eip: <8103>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eip: <8103>
eip: 8103

Comment thread ERCS/erc-8103.md Outdated
title: Permissioned Authorization Object (PPO)
description: "A portable, revocable EIP-712 authorization struct for bounded pull-based transfers."
author: "Mats Heming Julner (@recurmj)"
discussions-to: "https://ethereum-magicians.org/t/erc-permissioned-authorization-object/27135"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
discussions-to: "https://ethereum-magicians.org/t/erc-permissioned-authorization-object/27135"
discussions-to: https://ethereum-magicians.org/t/erc-8103-permissioned-authorization-object/27135

Comment thread ERCS/erc-8103.md Outdated
---
eip: <8103>
title: Permissioned Authorization Object (PPO)
description: "A portable, revocable EIP-712 authorization struct for bounded pull-based transfers."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: "A portable, revocable EIP-712 authorization struct for bounded pull-based transfers."
description: A portable, revocable EIP-712 authorization struct for bounded pull-based transfers.

@github-actions github-actions Bot removed the w-ci label Dec 15, 2025
@github-actions github-actions Bot added the w-ci label Dec 15, 2025
@github-actions github-actions Bot removed the w-ci label Dec 15, 2025
Fix typo malleability
Added a security consideration line and fixed 8103 link to be consistent
Fixed 8103/8102 reference links for consistency
@recurmj
recurmj requested a review from abcoathup December 25, 2025 20:35
Comment thread ERCS/erc-8102.md Outdated
---
eip: 8102
title: Permissioned Pull
description: Interface for executing pull-based transfers using Permissioned Authorization Objects (PPOs).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: Interface for executing pull-based transfers using Permissioned Authorization Objects (PPOs).
description: Pull-based transfers using Permissioned Authorization Objects (PPOs).

If we cut out some obvious bits, you have more room for details. What is a PPO, for example.

Comment thread ERCS/erc-8102.md
Comment thread ERCS/erc-8102.md
Comment on lines +16 to +24
This EIP defines a standard **pull executor interface** for executing token transfers under a Permissioned Authorization Object (PPO) as specified in [ERC-8103](./eip-8103.md).

It specifies:

- the `Authorization` struct used at execution time,
- the `pull` function signature,
- required view functions for nonce and domain separation,
- canonical events and errors,
- normative execution rules (validation, revocation, transfer).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does a good job covering what your proposal is, but doesn't really include the purpose. Doesn't have to be long (that's what the motivation is for), but a sentence or two about why we need this proposal is usually good in the abstract.

Comment thread ERCS/erc-8102.md Outdated

## Specification

### 1. Interface

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't number your sections.

Comment thread ERCS/erc-8102.md Outdated

Compliant contracts MUST implement the following Solidity interface (or an ABI-compatible equivalent):

~~~

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no idea if our renderer will support this syntax. Best to stick with the traditional:

```solidity
// ...
```

Comment thread ERCS/erc-8102.md Outdated
Comment on lines +209 to +213
- Nonce marking MUST follow checks-effects-interactions; state changes MUST precede external calls.
- Implementations MUST consider token quirks (fee-on-transfer, non-standard return values) and SHOULD document behavior with such tokens.
- Time windows reduce exposure of leaked signatures; however, key security is still critical.
- Malicious grantees cannot exceed `maxPerPull` in a single call, but they MAY call `pull` multiple times if the authorization semantic allows. Systems requiring cumulative caps SHOULD implement them in higher layers or registries.
- Implementations MUST reject malleable signatures by enforcing [EIP-2](./eip-2.md) rules (low-`s` values and valid `v`), as specified in ERC-8103.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requirements necessary to make a secure implementation should be included in the specification section, but do discuss their implications here.

@recurmj

recurmj commented Feb 9, 2026

Copy link
Copy Markdown
Author

Appreciate the guidance here, thank you. Updates applied; happy to iterate further.

@github-actions github-actions Bot added the w-ci label Feb 9, 2026
Comment thread ERCS/erc-8103.md Outdated
Comment thread ERCS/erc-8103.md Outdated
Comment thread ERCS/erc-8103.md Outdated
Comment thread ERCS/erc-8102.md Outdated
Comment thread ERCS/erc-8102.md Outdated
Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com>
@eip-review-bot
eip-review-bot enabled auto-merge (squash) July 1, 2026 21:43

@eip-review-bot eip-review-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All Reviewers Have Approved; Performing Automatic Merge...

@eip-review-bot eip-review-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All Reviewers Have Approved; Performing Automatic Merge...

@eip-review-bot eip-review-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All Reviewers Have Approved; Performing Automatic Merge...

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

The commit 7867c0f (as a parent of 0583229) contains errors.
Please inspect the Run Summary for details.

@SamWilsn
SamWilsn disabled auto-merge July 1, 2026 23:09
@eip-review-bot
eip-review-bot enabled auto-merge (squash) July 2, 2026 13:19

@eip-review-bot eip-review-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All Reviewers Have Approved; Performing Automatic Merge...

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants