org.hypercerts.funding.receipt
Schema Diff
+37 -10
Compatibility Analysis
Breaking Changes Detected
9 breaking changes, 15 non-breaking changes.
Breaking Changes (9)
- KindChanged KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.for", old_kind: "string", new_kind: "ref" }
- KindChanged KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.from", old_kind: "ref", new_kind: "union" }
- KindChanged KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.to", old_kind: "string", new_kind: "union" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.paymentRail", sort: "maxLength", value: "50" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt#text.value", sort: "maxLength", value: "2048" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.amount", sort: "maxLength", value: "50" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.currency", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.transactionId", sort: "maxLength", value: "256" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.paymentNetwork", sort: "maxLength", value: "50" }
Non-Breaking Changes (15)
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt#text" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt#text.value" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant2" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant2" }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt#text", tgt: "org.hypercerts.funding.receipt#text.value", kind: "prop", name: Some("value") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant0", kind: "variant", name: Some("#text") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant1", kind: "variant", name: Some("app.certified.defs#did") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant0", kind: "variant", name: Some("#text") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant1", kind: "variant", name: Some("app.certified.defs#did") }
- AddedEdge AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "org.hypercerts.funding.receipt#text" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt#text.value" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant0" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant1" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.from:variant2" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant0" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant1" }AddedVertex { vertex_id: "org.hypercerts.funding.receipt:body.to:variant2" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.paymentNetwork", sort: "maxLength", value: "50" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.amount", sort: "maxLength", value: "50" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt#text.value", sort: "maxLength", value: "2048" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.currency", sort: "maxLength", value: "10" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.transactionId", sort: "maxLength", value: "256" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.funding.receipt:body.paymentRail", sort: "maxLength", value: "50" }
Additional Notes
- Breaking: KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.for", old_kind: "string", new_kind: "ref" }
- Breaking: KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.from", old_kind: "ref", new_kind: "union" }
- Breaking: KindChanged { vertex_id: "org.hypercerts.funding.receipt:body.to", old_kind: "string", new_kind: "union" }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt#text", tgt: "org.hypercerts.funding.receipt#text.value", kind: "prop", name: Some("value") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant0", kind: "variant", name: Some("#text") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant1", kind: "variant", name: Some("app.certified.defs#did") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.from", tgt: "org.hypercerts.funding.receipt:body.from:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant0", kind: "variant", name: Some("#text") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant1", kind: "variant", name: Some("app.certified.defs#did") }
- Non-breaking: AddedEdge { src: "org.hypercerts.funding.receipt:body.to", tgt: "org.hypercerts.funding.receipt:body.to:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
1
1
{
2
2
"id": "org.hypercerts.funding.receipt",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
-
"from",
11
10
"to",
12
11
"amount",
13
12
"currency",
14
13
"createdAt"
15
14
],
16
15
"properties": {
17
16
"to": {
18
-
"type": "string",
19
-
"description": "The recipient of the funds. Can be identified by DID or a clear-text name."
17
+
"refs": [
18
+
"#text",
19
+
"app.certified.defs#did",
20
+
"com.atproto.repo.strongRef"
21
+
],
22
+
"type": "union",
23
+
"description": "The recipient of the funds (a free-text string, an account DID, or a strong reference to a record)."
20
24
},
21
25
"for": {
22
-
"type": "string",
23
-
"format": "at-uri",
24
-
"description": "Optional reference to the activity, project, or organization this funding relates to."
26
+
"ref": "com.atproto.repo.strongRef",
27
+
"type": "ref",
28
+
"description": "Optional strong reference to the activity, project, or organization this funding relates to."
25
29
},
26
30
"from": {
27
-
"ref": "app.certified.defs#did",
28
-
"type": "ref",
29
-
"description": "DID of the sender who transferred the funds. Leave empty if sender wants to stay anonymous."
31
+
"refs": [
32
+
"#text",
33
+
"app.certified.defs#did",
34
+
"com.atproto.repo.strongRef"
35
+
],
36
+
"type": "union",
37
+
"description": "The sender of the funds (a free-text string, an account DID, or a strong reference to a record). Optional — omit to represent anonymity."
30
38
},
31
39
"notes": {
32
40
"type": "string",
33
41
"maxLength": 500,
34
42
"description": "Optional notes or additional context for this funding receipt."
35
43
},
36
44
"amount": {
37
45
"type": "string",
38
-
"description": "Amount of funding received."
46
+
"maxLength": 50,
47
+
"description": "Amount of funding received as a numeric string (e.g. '1000.50')."
39
48
},
40
49
"currency": {
41
50
"type": "string",
51
+
"maxLength": 10,
42
52
"description": "Currency of the payment (e.g. EUR, USD, ETH)."
43
53
},
44
54
"createdAt": {
45
55
"type": "string",
46
56
"format": "datetime",
47
57
"description": "Client-declared timestamp when this receipt record was created."
48
58
},
49
59
"occurredAt": {
50
60
"type": "string",
51
61
"format": "datetime",
52
62
"description": "Timestamp when the payment occurred."
53
63
},
54
64
"paymentRail": {
55
65
"type": "string",
66
+
"maxLength": 50,
56
67
"description": "How the funds were transferred (e.g. bank_transfer, credit_card, onchain, cash, check, payment_processor)."
57
68
},
58
69
"transactionId": {
59
70
"type": "string",
71
+
"maxLength": 256,
60
72
"description": "Identifier of the underlying payment transaction (e.g. bank reference, onchain transaction hash, or processor-specific ID). Use paymentNetwork to specify the network where applicable."
61
73
},
62
74
"paymentNetwork": {
63
75
"type": "string",
76
+
"maxLength": 50,
64
77
"description": "Optional network within the payment rail (e.g. arbitrum, ethereum, sepa, visa, paypal)."
65
78
}
66
79
}
67
80
},
68
81
"description": "Records a funding receipt for a payment from one user to another user. It may be recorded by the recipient, by the sender, or by a third party. The sender may remain anonymous."
82
+
},
83
+
"text": {
84
+
"type": "object",
85
+
"required": [
86
+
"value"
87
+
],
88
+
"properties": {
89
+
"value": {
90
+
"type": "string",
91
+
"maxLength": 2048,
92
+
"description": "The string value."
93
+
}
94
+
},
95
+
"description": "A free-text string value (e.g. a display name, wallet address, or other identifier)."
69
96
}
70
97
},
71
98
"$type": "com.atproto.lexicon.schema",
72
99
"lexicon": 1
73
100
}