Skip to content

Conversation

@pedrouid
Copy link
Member

@pedrouid pedrouid commented Oct 25, 2025

This PR introduces Transfer Types which allows a payment option to be completed either through a transaction hash or a message signature for gasless standards (eg. erc2612 or erc3009)

@pedrouid pedrouid marked this pull request as ready for review October 25, 2025 19:37
@pedrouid pedrouid changed the title Update caip-358.md CAIP-358: Introducing Transfer Types Oct 25, 2025
- `types` - this field **MUST** be an array of strings defining different transfer authorization types.

The `acceptedPayments` field **MUST** be an array of `PaymentOption` objects. Each element in the array represents a payment option that the wallet can choose from to complete the payment.
The exclusive list of Transfer Types supported in `version=1` are the following:
Copy link
Contributor

Choose a reason for hiding this comment

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

We could make this non-exclusive and extensible easily with a defined "private types" approach. Right now we're effectively locking this to the types of today rather than the types of what's possible.

A good example of what this might look like is: https://datatracker.ietf.org/doc/html/rfc7519#section-4.3

Copy link
Member Author

Choose a reason for hiding this comment

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

Honestly I would say that is the best long-term solution but historically in crypto we have seen this go very bad very quickly

The lack of governance where these "identifiers" can cause a lot of issues and this is very apparent on Ethereum with capabilities which is a melting pot of functionality that barely qualifies as a capability

In this scenario we are locking a narrow scope of accepted payment types that cover 95% of use-cases if not more

That being said this PR is still in Draft status so we can still make a follow-up PR to attempt a "private types" approach

Copy link
Contributor

@kdenhartog kdenhartog Nov 14, 2025

Choose a reason for hiding this comment

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

Yeah I was thinking the same thing when considering this. Technically, someone could just build a “non compliant” version and achieve this anyways in a one off case. If they’re a large enough payment processor everyone would just accept it anyways. So it’s probably better to keep it to only declared values and then have some way to document new declared values too via an errata CAIP or something. We can cross that bridge whenever it happens though. I’m good intentionally closing this extension point off for now for higher interop.

Facebook’s first implementation of OIDC did this where they weren’t a fully compliant implementation for years and sites still intercropped with it.

Copy link
Contributor

@kdenhartog kdenhartog left a comment

Choose a reason for hiding this comment

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

few additional comments, to improve intent but this LGTM

Co-authored-by: Kyle Den Hartog <kdenhartog@users.noreply.github.com>
@pedrouid pedrouid merged commit 611e9e9 into main Nov 14, 2025
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.

7 participants