ZIP-321 定义的 Zcash Payment URIs 的 Swift 原型
引用自 ZIP-321
[...] 一种支付请求 URI 的标准格式。 识别这种格式的钱包允许用户仅通过点击网页上的链接或扫描二维码来构建交易。
Payment URIs 允许用户以 "标准化" URI 的形式表达他们的支付意图,这些 URI 可以被生态系统中的多个应用程序解析
例子 zcash:?address=tmEZhbWHTpdKMw5it8YDspUXSMGQyFwovpU&amount=123.456&address.1=ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez&amount.1=0.789&memo.1=VGhpcyBpcyBhIHVuaWNvZGUgbWVtbyDinKjwn6aE8J-PhvCfjok
1.
的 API,通过编程方式使用相同的输入生成给定的 URI。2.
来验证提供的 ZIP-321 Requestzcash_address
crate不指定除接收者地址以外的任何其他信息的付款请求。
zcash:ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez
let recipient = RecipientAddress(value: "ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez")!
ZIP321.request(recipient)
期望的 Payment URI zcash:ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez?amount=1&memo=VGhpcyBpcyBhIHNpbXBsZSBtZW1vLg&message=Thank%20you%20for%20your%20purchase
let recipient = RecipientAddress(value: "ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez")!
let payment = Payment(
recipientAddress: recipient,
amount: try Amount(value: 1),
memo: try MemoBytes(utf8String: "This is a simple memo."),
label: nil,
message: "Thank you for your purchase",
otherParams: nil
)
let paymentURI = ZIP321.request(payment, formattingOptions: .useEmptyParamIndex(omitAddressLabel: true))
期望的 Payment URI: zcash:?address=tmEZhbWHTpdKMw5it8YDspUXSMGQyFwovpU&amount=123.456&address.1=ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez&amount.1=0.789&memo.1=VGhpcyBpcyBhIHVuaWNvZGUgbWVtbyDinKjwn6aE8J-PhvCfjok
此支付请求使用带有空 paramindex
和数字索引的 paramlabel
。 此 Request String 生成 API 允许调用者指定他们选择的参数和索引格式。
let address0 = "tmEZhbWHTpdKMw5it8YDspUXSMGQyFwovpU"
let recipient0 = RecipientAddress(value: address0)!
let payment0 = Payment(
recipientAddress: recipient0,
amount: try Amount(value: 123.456),
memo: nil,
label: nil,
message: nil,
otherParams: nil
)
let address1 = "ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez"
let recipient1 = RecipientAddress(value: address1)!
let payment1 = Payment(
recipientAddress: recipient1,
amount: try Amount(value: 0.789),
memo: try MemoBytes(utf8String: "This is a unicode memo ✨🦄🏆🎉"),
label: nil,
message: nil,
otherParams: nil
)
let paymentRequest = PaymentRequest(payments: [payment0, payment1])
let paymentURIString = ZIP321.uriString(from: paymentRequest, formattingOptions: .useEmptyParamIndex(omitAddressLabel: false))
用法:
给定一个可能的 Zcash Payment URI
let possibleURI = "zcash:ztestsapling10yy2ex5dcqkclhc7z7yrnjq2z6feyjad56ptwlfgmy77dmaqqrl9gyhprdx59qgmsnyfska2kez?amount=1&memo=VGhpcyBpcyBhIHNpbXBsZSBtZW1vLg&message=Thank%20you%20for%20your%20purchase"
let paymentRequest = try ZIP321.request(from: possibleURI)
这将返回一个包含解析失败信息的错误,或者在本例中
ParserResult.request(
PaymentRequest(payments: [
Payment(
recipientAddress: recipient,
amount: try Amount(value: 1),
memo: try MemoBytes(utf8String: "This is a simple memo."),
label: nil,
message: "Thank you for your purchase",
otherParams: nil
)
]
)
)
解析器支持类似于 Bitcoin URIs 的透明 ZEC 钱包的旧版 URI。
let uri = ZIP321.request("zcash:tmEZhbWHTpdKMw5it8YDspUXSMGQyFwovpU")
返回一个
ParserResult.legacy(recipient)
其中接收者地址包含地址。
本项目遵循 MIT 许可证。 有关更多详细信息,请参阅 LICENSE.md。