actproof 0.3.3__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {actproof-0.3.3 → actproof-0.3.4}/CHANGELOG.md +32 -0
- {actproof-0.3.3 → actproof-0.3.4}/PKG-INFO +7 -3
- {actproof-0.3.3 → actproof-0.3.4}/README.md +6 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/__init__.py +5 -1
- {actproof-0.3.3 → actproof-0.3.4}/actproof/anchor.py +6 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/catalogue.py +348 -28
- {actproof-0.3.3 → actproof-0.3.4}/actproof/manifest.py +106 -8
- {actproof-0.3.3 → actproof-0.3.4}/actproof/receipt.py +109 -6
- {actproof-0.3.3 → actproof-0.3.4}/actproof/verify.py +65 -3
- {actproof-0.3.3 → actproof-0.3.4}/pyproject.toml +1 -3
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_anchor.py +17 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_catalogue.py +243 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_catalogue_v3.py +13 -1
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_manifest.py +181 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_receipt.py +90 -2
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_verify.py +114 -0
- {actproof-0.3.3 → actproof-0.3.4}/.gitignore +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/DEPLOY.md +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/LICENSE +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/SECURITY.md +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/canonical.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/cli.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/py.typed +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/signers/__init__.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/signers/google_kms.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/signers/interface.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/signers/mnemonic.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/actproof/timestamp.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/docs/ANCHOR_BACKENDS.md +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/docs/INTEGRATION.md +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/docs/STS-STANDARDS-APPLICATION.md +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/__init__.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_canonical.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_catalogue_package_provenance_bugfix.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_cli.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_signers_google_kms.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_signers_interface.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_signers_mnemonic.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_signers_v030_policy.py +0 -0
- {actproof-0.3.3 → actproof-0.3.4}/tests/test_timestamp.py +0 -0
|
@@ -16,6 +16,38 @@ release. Once 1.0.0 ships, semantic versioning will be strictly followed.
|
|
|
16
16
|
- **v1.0.0** — API frozen.
|
|
17
17
|
- **v2.0.0** — COSE_Sign1 + SCITT Transparent Statement bridge, once RFC 9943 publishes.
|
|
18
18
|
|
|
19
|
+
## [0.3.4] — 2026-05-25
|
|
20
|
+
|
|
21
|
+
**On-chain note in three encodings.** A receipt's anchor record now carries
|
|
22
|
+
the exact ARC-2 transaction note as written to the ledger, rendered in
|
|
23
|
+
UTF-8, hex, and base64. A receipt can be checked against a block explorer,
|
|
24
|
+
an indexer API, or a byte-level tool without re-deriving the note from the
|
|
25
|
+
manifest hash.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- **`OnChainNote`** — a frozen dataclass exported from the package, with
|
|
30
|
+
`utf8`, `hex`, and `base64` fields. **`on_chain_note_from_bytes`** is the
|
|
31
|
+
single builder that derives all three encodings from one note byte string.
|
|
32
|
+
Hex is lowercase without a `0x` prefix; base64 is standard-padded.
|
|
33
|
+
- **`AnchorRecord.on_chain_note`** — a new optional field. `anchor_manifest`
|
|
34
|
+
populates it from the note bytes in every anchor mode. When a receipt is
|
|
35
|
+
read without the field, `__post_init__` reconstructs it losslessly from
|
|
36
|
+
`note_payload_b64` and the ARC-2 prefix, so receipts written by earlier
|
|
37
|
+
releases continue to read and verify unchanged.
|
|
38
|
+
- Eight tests covering the three encodings, the builder, the reconstruction
|
|
39
|
+
path, and round-tripping through `receipt_to_dict` and `receipt_from_dict`.
|
|
40
|
+
|
|
41
|
+
### Notes
|
|
42
|
+
|
|
43
|
+
- Backward compatible. No breaking changes and no dependency changes.
|
|
44
|
+
Receipts written by 0.3.3 and earlier gain the reconstructed
|
|
45
|
+
`anchor.on_chain_note` block on read; receipts written by 0.3.4 carry it
|
|
46
|
+
as stored.
|
|
47
|
+
- `note_payload_b64`, the prefix-stripped payload, is retained alongside the
|
|
48
|
+
new field. A decision on its long-term status is left to the receipt
|
|
49
|
+
format specification.
|
|
50
|
+
|
|
19
51
|
## [0.3.2] — 2026-05-19
|
|
20
52
|
|
|
21
53
|
**License switch from MIT to Apache-2.0.** Forward-looking positioning of
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: actproof
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Verifiable receipts of regulated acts. Canonical JSON (RFC 8785), RFC 3161 trusted timestamps, Algorand ARC-2 anchoring, independent verification.
|
|
5
5
|
Project-URL: Homepage, https://github.com/deyan-paroushev/actproof-py
|
|
6
6
|
Project-URL: Documentation, https://github.com/deyan-paroushev/actproof-py/tree/main/docs
|
|
@@ -45,8 +45,6 @@ Requires-Dist: types-requests; extra == 'dev'
|
|
|
45
45
|
Provides-Extra: docs
|
|
46
46
|
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
|
|
47
47
|
Requires-Dist: mkdocs>=1.6; extra == 'docs'
|
|
48
|
-
Provides-Extra: events
|
|
49
|
-
Requires-Dist: actproof-events>=1.4.0rc1; extra == 'events'
|
|
50
48
|
Provides-Extra: gcp
|
|
51
49
|
Requires-Dist: google-cloud-kms<4.0,>=2.0; extra == 'gcp'
|
|
52
50
|
Requires-Dist: google-crc32c<2.0,>=1.5; extra == 'gcp'
|
|
@@ -59,6 +57,12 @@ public attestations. Canonical JSON (RFC 8785), RFC 3161 trusted timestamps,
|
|
|
59
57
|
Algorand ARC-2 anchoring, independent verification by any party with a Python
|
|
60
58
|
install.
|
|
61
59
|
|
|
60
|
+
**Project site: [actproof.org](https://actproof.org).** The site explains
|
|
61
|
+
the full ActProof stack and the reasoning behind it. ActProof Events
|
|
62
|
+
defines the act, `actproof` proves the record, and applications consume
|
|
63
|
+
both. Start there for the architecture. This README is the package
|
|
64
|
+
reference.
|
|
65
|
+
|
|
62
66
|
`actproof` produces cryptographic receipts that any third party can verify
|
|
63
67
|
without trusting the issuing platform. A receipt binds: the record or act
|
|
64
68
|
being documented (optionally classified against the `actproof-events`
|
|
@@ -5,6 +5,12 @@ public attestations. Canonical JSON (RFC 8785), RFC 3161 trusted timestamps,
|
|
|
5
5
|
Algorand ARC-2 anchoring, independent verification by any party with a Python
|
|
6
6
|
install.
|
|
7
7
|
|
|
8
|
+
**Project site: [actproof.org](https://actproof.org).** The site explains
|
|
9
|
+
the full ActProof stack and the reasoning behind it. ActProof Events
|
|
10
|
+
defines the act, `actproof` proves the record, and applications consume
|
|
11
|
+
both. Start there for the architecture. This README is the package
|
|
12
|
+
reference.
|
|
13
|
+
|
|
8
14
|
`actproof` produces cryptographic receipts that any third party can verify
|
|
9
15
|
without trusting the issuing platform. A receipt binds: the record or act
|
|
10
16
|
being documented (optionally classified against the `actproof-events`
|
|
@@ -6,7 +6,7 @@ actproof: anchor signed JSON manifests; verify anyone's anchored receipts.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
__version__ = "0.3.
|
|
9
|
+
__version__ = "0.3.4"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
# ─────────────────────────────────────────────────────────────────
|
|
@@ -80,6 +80,7 @@ from actproof.receipt import (
|
|
|
80
80
|
ARC2_NOTE_FORMAT,
|
|
81
81
|
AnchorRecord,
|
|
82
82
|
IssuerEvidence,
|
|
83
|
+
OnChainNote,
|
|
83
84
|
PlaintextRecipient,
|
|
84
85
|
Receipt,
|
|
85
86
|
ReceiptError,
|
|
@@ -88,6 +89,7 @@ from actproof.receipt import (
|
|
|
88
89
|
build_receipt,
|
|
89
90
|
issuer_evidence_from_dict,
|
|
90
91
|
issuer_evidence_to_dict,
|
|
92
|
+
on_chain_note_from_bytes,
|
|
91
93
|
read_issuer_evidence,
|
|
92
94
|
read_receipt,
|
|
93
95
|
receipt_from_dict,
|
|
@@ -179,6 +181,8 @@ __all__ = [
|
|
|
179
181
|
"read_issuer_evidence", "write_issuer_evidence",
|
|
180
182
|
"ALGORAND_MAINNET", "ALGORAND_TESTNET", "ALGORAND_BETANET",
|
|
181
183
|
"ARC2_NOTE_FORMAT", "ARC2_DAPP_NAME", "ARC2_FORMAT_VERSION_JSON",
|
|
184
|
+
# receipt.py (v0.3.4): on-chain note in three encodings
|
|
185
|
+
"OnChainNote", "on_chain_note_from_bytes",
|
|
182
186
|
# timestamp.py (v0.0.6)
|
|
183
187
|
"TimestampAuthority", "TSAAttempt", "AcquisitionResult",
|
|
184
188
|
"TimestampError", "acquire_timestamp_token",
|
|
@@ -95,6 +95,7 @@ from actproof.receipt import (
|
|
|
95
95
|
ARC2_FORMAT_VERSION_JSON,
|
|
96
96
|
ARC2_NOTE_FORMAT,
|
|
97
97
|
AnchorRecord,
|
|
98
|
+
on_chain_note_from_bytes,
|
|
98
99
|
)
|
|
99
100
|
from actproof.signers.interface import ALGORAND_MIN_FEE_MICROALGOS
|
|
100
101
|
|
|
@@ -518,6 +519,9 @@ def anchor_manifest(
|
|
|
518
519
|
# commitment, the transaction is the carrier.
|
|
519
520
|
note_bytes = build_note_bytes(manifest_hash, batching_profile)
|
|
520
521
|
note_payload_b64 = base64.b64encode(note_bytes[len(_ARC2_PREFIX):]).decode("ascii")
|
|
522
|
+
# The full on-chain note in three encodings, all from this one
|
|
523
|
+
# note_bytes value, so the three encodings cannot drift apart.
|
|
524
|
+
on_chain_note = on_chain_note_from_bytes(note_bytes)
|
|
521
525
|
|
|
522
526
|
network = _network_for_mode(mode)
|
|
523
527
|
|
|
@@ -536,6 +540,7 @@ def anchor_manifest(
|
|
|
536
540
|
note_dapp_name=ARC2_DAPP_NAME,
|
|
537
541
|
note_format_version=ARC2_FORMAT_VERSION_JSON,
|
|
538
542
|
note_payload_b64=note_payload_b64,
|
|
543
|
+
on_chain_note=on_chain_note,
|
|
539
544
|
)
|
|
540
545
|
|
|
541
546
|
# DEMO and PRODUCTION: real submission.
|
|
@@ -600,4 +605,5 @@ def anchor_manifest(
|
|
|
600
605
|
note_dapp_name=ARC2_DAPP_NAME,
|
|
601
606
|
note_format_version=ARC2_FORMAT_VERSION_JSON,
|
|
602
607
|
note_payload_b64=note_payload_b64,
|
|
608
|
+
on_chain_note=on_chain_note,
|
|
603
609
|
)
|