DogeConnect 协议是一系列 JSON 对象,使用 Dogecoin pub/priv 密钥进行签名,并使用 HTTP/REST API 来管理支付流程。
主要类型定义:
DogeConnect 信封
{"type": "dc:0.1:envelope",
"service": "My Service Name",
"service_icon": "https://example.com/icon.png",
"service_gateway": "https://example.com/payments",
"service_key": "6JWBrzyPQnvZnob7JVvq85PYcCt8wqd6ksZyfTVakMS6iYSAUuC",
"payload": "base64 encoded JSON",
"hash": "payload hash (from service_key)"
}
类型
类型:字符串
必需:真实
Type 是一个鉴别符,可用于识别 JSON 结构,它是一个以冒号分隔的字符串,由三部分组成:
“dc”表示这是一个 DogeConnect 数据结构。
“0.1”表示协议版本。
'envelope' 表示 DogeConnect 类型。
服务
类型:字符串
必填:真实
服务提供一个名称,UI 可使用该名称来识别请求付款的实体。这应该是一个简短、易于识别的字符串,用户会将其识别为他们正在交互的应用程序/商店的付款请求的发起者,即:“AMC Theatres”、“Tesla Merchansise”等
服务图标
类型:字符串
必填:假
Service_icon 是可选的 https 可访问图像,旨在用作用户代理可以与服务名称一起显示的图标/徽标。图标的长宽比应为 1:1(方形),并且可以由用户代理缓存。
服务网关
类型:字符串
必需:真实
Service_gateway 是必需的 https URL,它为 DogeConnect 网关(例如 GigaWallet)提供 BASE 路径。DogeConnect 网关至少必须提供:
POST /pay -> 200 OK 用于接受签名的付款响应
服务密钥
类型:字符串
必需:真实
Service_key 是 DogeConnect 网关持有私钥的公钥(狗狗币地址),用于签署传出支付请求信封。service_key
用户代理使用 来通过payload
信封hash
中的 进行验证。用户代理必须将此 service_key 视为该服务的不可变标识符。
预计用户代理在收到新服务的付款请求后将允许用户接受(或拒绝)新服务。该服务的任何未来支付都将使用相同的 service_key,service_key 的更改应被视为新服务并按原样呈现给用户,并带有适当的警告。
注意:这被理解为提供有限的安全性,而无需进一步的基础设施来允许服务在其他地方列出其 service_key 进行验证。我们希望将来通过超出当前协议范围的其他方式来解决这个问题。
有效负载
类型:字符串
必需:真实
有效负载是一个 base64 编码的字符串,其中包含内部 DogeConnect payment_request 的 JSON 数据。该 base64 字符串可通过作为付款信封一部分的hash
和字段进行验证。service_key
散列
类型:字符串
必需:真实
哈希验证 的内容payload
是使用 public 的私钥组件签名的service_key
。哈希函数与 libdogecoin 提供的用于签名交易的哈希函数相同。
Doge 连接有效负载
Doge Connect Envelope 提供了一种可验证的机制,用于将支付请求传输到用户代理。有效负载可以采用多种支付选项的形式:
付钱请求
{"type": "dc:0.1:payment_request",
"request_id": "8TSBrzyPQnvZnob7JVvq85PYcCt8wqd6ksZyfTVakMS6iYSAVu9",
"address": "wqd6ksZyfTVakMS6iYSAVu98TSBrzyPQnvZnob7JVvq85PYcCt8",
"total": 123.45,
"initiated": "2022-03-29T22:18:26.625Z",
"timeout_sec": 900,
"items": [
{
"type": "dc:0.1:payment_item",
"item_id": "123456",
"thumb": "https://example.com/123456/thumb.png",
"name": "Example Item",
"description": "A rather nice Example Item",
"unit_count": 1,
"unit_amount": 50.0
},
...
]
}
文件待定
捐款请求
{"type": "dc:0.1:donation_request",
"request_id": "8TSBrzyPQnvZnob7JVvq85PYcCt8wqd6ksZyfTVakMS6iYSAVu9",
"address": "wqd6ksZyfTVakMS6iYSAVu98TSBrzyPQnvZnob7JVvq85PYcCt8",
"initiated": "2022-03-29T22:18:26.625Z",
"modes": ["OPTIONS_SINGLE", "ANY", "COMMENT"],
"options": [
{
"type": "dc:0.1:donation_option",
"option_id": 123456,
"item_thumb": "https://example.com/123456/thumb.png",
"name": "High Roller",
"description": "Your donation will support Example Org for 3 months",
"amount": 5000000.0
},
{
"type": "dc:0.1:donation_option",
"option_id": 456789,
"item_thumb": "https://example.com/456789/thumb.png",
"name": "bread'n'Butter Backer",
"description": "Your donation contributes to Example Cause",
"amount": 5000.0
},
...
]
}
文件待定