-
Notifications
You must be signed in to change notification settings - Fork 334
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Extend URI scheme with single stake pool links (#61)
* added work from PR#25 to support single stake pool links as well * for brevity * for clarity * response to first round of editing by co-author * second round of co-author edits * reclassified wallet integration as Motivation rather than Rationale * 2 of 3 changes from @nicarq via PR 65 * undone most recent commit (removing PR65 suggestions) * undone most recent commit (removing PR65 suggestions)
- Loading branch information
Showing
1 changed file
with
61 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,43 @@ | ||
--- | ||
CIP: 13 | ||
Title: Cardano URI Scheme | ||
Authors: Sebastien Guillemot <[email protected]>, Vicente Almonacid <[email protected]> | ||
Authors: Sebastien Guillemot <[email protected]>, Vicente Almonacid <[email protected]>, Robert Phair <[email protected]> | ||
Comments-URI: | ||
- https://github.com/Emurgo/EmIPs/pull/2 | ||
- https://forum.cardano.org/t/cip-cardano-payment-uri-scheme/41457 | ||
- https://github.com/cardano-foundation/CIPs/pull/25 | ||
- https://github.com/cardano-foundation/CIPs/pull/61 | ||
- https://forum.cardano.org/t/cip-stake-uri-scheme-for-pools-delegation-portfolios/40594 | ||
Status: Draft | ||
Type: Informational | ||
Created: 2020-10-20 | ||
Created: 2020-09-22 | ||
License: CC-BY-4.0 | ||
--- | ||
|
||
# Abstract | ||
|
||
This proposal describes a basic URI scheme to handle ADA transfers, as well | ||
as possible approaches for a multiplatform implementation. | ||
This proposal describes a basic URI scheme to handle Ada transfers and links to stake pools. | ||
|
||
# Motivation | ||
|
||
#### For payment URIs: | ||
|
||
Users who create community content often want donations as a financial incentive. However, forcing users to open their wallet and copy-paste an address lowers the amount of people likely to send tokens (especially if they have to sync their wallet first). | ||
|
||
If donating was as simple as clicking a link that opens a light wallet with pre-populated fields, users may be more willing to send tokens. URI schemes would enable users to easily make payments by simply clicking links on webpages or scanning QR Codes. | ||
|
||
#### For stake pool URIs: | ||
|
||
Centralised sources of information have led a growing amount of stake to be disproportionately assigned to pools pushed near & beyond the saturation point. | ||
|
||
Stake pool URIs will provide an additional means for small pools to acquire delegation and maintain stability, supporting diversity and possibly fault-tolerance in the Cardano network through a more even distribution of stake. | ||
|
||
Interfaces that connect delegators with pools beyond the highly contested top choices of the in-wallet ranking algorithms are important to avoid saturation and maintain decentralization. | ||
|
||
Larger pools and collectives can also use these URIs to link to a family of pools they own to avoid any one of their pools becoming saturated. | ||
|
||
Pool links allow for interfaces to initiate delegation transactions without requiring any code modifications to the wallets themselves. | ||
|
||
# Specification | ||
|
||
The core implementation should follow the [BIP-21](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki) standard (with `bitcoin:` replaced with `web+cardano:`) | ||
|
@@ -30,9 +46,11 @@ Rationale: | |
- Use `cardano:` over `ada:` as other projects that implement this standard tend to take the project name over the currency name (this makes sense if we consider this protocol as a generic way for interacting with the blockchain through wallets - as opposed to a simple payment system) | ||
- Many wallets support multiple currencies. Following the same standard will ensure higher adoption of our protocol. | ||
|
||
Example: | ||
Examples: | ||
``` | ||
<a href="web+cardano:Ae2tdPwUPEZ76BjmWDTS7poTekAvNqBjgfthF92pSLSDVpRVnLP7meaFhVd">Donate</a> | ||
<a href="web+cardano://stake?c94e6fe1123bf111b77b57994bcd836af8ba2b3aa72cfcefbec2d3d4">Stake with us</a> | ||
<a href="web+cardano://stake?COSD">Choose our least saturated pool</a> | ||
``` | ||
|
||
## Considerations | ||
|
@@ -43,20 +61,49 @@ Example: | |
|
||
## ABNF Grammar (Proposal) | ||
|
||
This is an initial, simplified protocol definition for fast implementation; it only requires an address and an optional amount parameter. As discussed above, these rules are likely to evolve in time in order to support additional features, including unique capabilities of the Cardano blockchain. | ||
This is an initial, simplified protocol definition for fast implementation; it only requires: | ||
|
||
* for a payment URI (authority unspecified), an address and an optional amount parameter; | ||
* for a stake pool URI (authority = `stake`), a single stake pool reference. | ||
|
||
As discussed above, these rules are likely to evolve in time in order to support additional features, including multiple stake pool references (in proportions defining a "portfolio") and other unique capabilities of the Cardano blockchain. | ||
|
||
``` | ||
cardanourn = "web+cardano:" cardanoaddress [ "?" amountparam ] | ||
cardanourn = "web+cardano:" (paymentref | stakepoolref) | ||
paymentref = cardanoaddress [ "?" amountparam ] | ||
cardanoaddress = *(base58 | bech32) | ||
amountparam = "amount=" *digit [ "." *digit ] | ||
amountparam = "amount=" *digit [ "." *digit ] | ||
stakepoolref = "//stake?" stakepool | ||
stakepool = poolhexid | poolticker | ||
poolhexid = 56HEXDIG | ||
poolticker = 3*5UNICODE | ||
``` | ||
|
||
### Payment URI queries | ||
|
||
The amount parameter must follow the [same rules](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki#transfer-amountsize) described in BIP-21, namely, it must be specified in decimal ADA, without commas and using the period (.) decimal separator. | ||
|
||
### Stake pool URI queries | ||
|
||
For brevity, essential in many Internet contexts, `poolticker` must be supported here in addition to the unambiguous `poolhexid`. | ||
|
||
When there is more than one pool registered with the specified `poolTicker` (whether for pool groups which have the same ticker for all pools, or for separate pools using the same ticker), the choice to which pool to finally delegate is left to the user through the wallet UI. | ||
|
||
### Handling stake pool links | ||
|
||
The wallet UI should always confirm the exact delegation choice even when it is unambiguous from the URI. When the user has multiple wallets, the wallet UI must select which wallet(s) the user will be delegating from. | ||
|
||
These yet unsupported parameters in the URI query string should (by preference of the wallet UI designers) *either* be ignored *or* generate a warning message, to avoid leading the user to believe they are implementing a currently unsupported but perhaps popularly referenced multi-pool delegation list: | ||
|
||
* any value for the first URI query argument; | ||
* any URI query argument beyond the first. | ||
|
||
## Security Considerations | ||
|
||
1. We cannot prompt the user to send the funds right away as they may not be fully aware of the URI they clicked or were redirected to. Instead, it may be better to simply pre-populate fields in a transaction. | ||
2. We should be wary of people who disguise “donate” links as actually opening up a phishing website that LOOKS like a wallet. | ||
1. For payment links, we cannot prompt the user to send the funds right away as they may not be fully aware of the URI they clicked or were redirected to. Instead, it may be better to simply pre-populate fields in a transaction. | ||
2. For either payment or staking links, we should be wary of people who disguise links as actually opening up a phishing website that LOOKS like that corresponding part of the wallet UI. | ||
|
||
# Rationale | ||
|
||
|
@@ -75,3 +122,7 @@ https://developer.android.com/training/app-links/deep-linking#adding-filters | |
https://facebook.github.io/react-native/docs/linking.html | ||
|
||
https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app | ||
|
||
https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form | ||
|
||
https://tools.ietf.org/html/draft-seantek-unicode-in-abnf-00 |