Stacks Pay: A Payment Request Standard for Stacks Blockchain Payments#202
Stacks Pay: A Payment Request Standard for Stacks Blockchain Payments#202dantrevino wants to merge 8 commits intostacksgov:mainfrom
Conversation
|
Love standardization! |
|
Thanks for proposing, @dantrevino! We'll review on the Leather team and provide thoughts. |
whoabuddy
left a comment
There was a problem hiding this comment.
Overall looks good, happy to see you're putting this forward! I left a few small comments.
@human058382928 @r0zar @biwasbhandari these encoded URLs describe a Stacks transaction, might be something cool we can do there with @aibtcdev tooling!
|
How difficult is it to integrate into existing payment flows? E.g. compared to eth integration. Maybe something for the introduction. |
|
Hey Dan 👋 Awesome work on this! I wanted to share some thoughts based on my experience building Stacks Invoice Generator, where I tackled invoice generation for STX and Stacks tokens without smart contracts. One of the biggest challenges I faced was QR code functionality. Initially, I wanted users to scan a QR code and have it automatically open their wallet (Xverse/Leather) with all payment details pre-filled—similar to Bitcoin or Ethereum payment URIs (e.g., bitcoin:address?amount=0.1). However, Stacks doesn’t currently support a universal payment link format, so I had to settle for QR codes that only contain the recipient’s address, requiring users to manually enter the amount and memo. I believe adding universal payment links for STX and tokens (e.g., stackspay:stx1abc...xyz?amount=100&token=STX&memo=Invoice123) would be a game-changer for the ecosystem. It would: Would love to hear your thoughts on this! Is this something that could fit into Stacks Pay? |
QR codes are a core part of the experience i the proposal. Check out https://stackspay.org/ and the Merchant Section in the spec for details. The encoding also has the benefit of providing checksum so that users (stackpay parsers) can ensure that the QR codes have not been tampered with. |
friedger
left a comment
There was a problem hiding this comment.
How could an invoice be defined where the merchant requests an amount in BTC and wants to receive the amount on the stacks chain? Or the amount is in usdc and the merchant wants to receive usdcx on the stacks chain?
Do we make an explicit mention of chain id? Default to mainnet if omitted? recipient, token and contract MUST be on the same network (or compatible with bridged tokens, see above)
|
|
||
| | Name | Type / Format | Description | | ||
| |------|---------------|-------------| | ||
| | `recipient` | Stacks c32-address | Address that ultimately receives the payment. | |
There was a problem hiding this comment.
recipient could be also a contract (or in the future a bitcoin address #219)
| | Name | Type / Format | Description | | ||
| |------|---------------|-------------| | ||
| | `recipient` | Stacks c32-address | Address that ultimately receives the payment. | | ||
| | `token` | **STX** \| SIP-010 contract address (`SP….<contract>`) | Asset used to pay. When omitted wallets **MUST** default to **STX**. | |
There was a problem hiding this comment.
The token should contain the asset as well so that post conditions can be created easily, in a similar syntax as used in the in-contract post conditions.
|
|
||
| --- | ||
|
|
||
| ### 3.3 `mint` |
There was a problem hiding this comment.
Why mint? It could also make sense to have a generic execute operation.
This operation can also make sense for depositing tokens into a vault.
|
|
||
| ### 3.1 `support` | ||
|
|
||
| Description of support operation here |
There was a problem hiding this comment.
Is Description of support operation here a TODO or a title
| ## 7 Ratification Criteria | ||
|
|
||
| 1. SIP accepted by governance. | ||
| 2. At least one reference implementation passes test-vectors. |
There was a problem hiding this comment.
Where are the test-vectors defined?
| ## 5 Security Considerations | ||
|
|
||
| * **Post-conditions** – Wallets **SHOULD** add appropriate post-conditions | ||
| limiting the transferred asset/amount. |
There was a problem hiding this comment.
| limiting the transferred asset/amount. | |
| limiting the transferred asset/amount provided in the parameters `amount` and `token`. |
Extends NIP-57 (Lightning Zaps) to support on-chain payments using CAIP-358 (wallet_pay) alongside BOLT-11 invoices. Features: - payment_type tag (bolt11 | caip358) on kind 9734/9735 - CAIP-358 payment request/receipt in zap events - Stacks transfer types (sip10-transfer, stx-transfer) - CAIP-19 asset IDs for Stacks tokens (sBTC, STX) - Multi-chain payment options in single zap request - Full backward compatibility with NIP-57 Includes real-world example: 200 sats sBTC zap from cocoa007 to Stark Comet on Stacks mainnet with verified on-chain txids and the corresponding Nostr event published to relay.damus.io and nos.lol. References: - NIP-57: https://github.com/nostr-protocol/nips/blob/master/57.md - CAIP-358: https://standards.chainagnostic.org/CAIPs/caip-358 - SIP-029: stacksgov/sips#202 - sBTC zap spec: cocoa007/x402-nostr-relay#3
Stacks Pay is a proposed standard for wrapping transaction information in a standard way for easy sharing.