Store provenance on IPFS instead of local files
- Add add_json() to ipfs_client for storing JSON data - Update render_effect task to store provenance on IPFS - Update execute_dag task to store DAG provenance on IPFS - Add provenance_cid field to RunStatus model - Extract provenance_cid from task results Provenance is now immutable and content-addressed, enabling: - Cross-L2 verification - Bitcoin timestamping for dispute resolution - Complete audit trail on IPFS Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -151,6 +151,7 @@ class RunStatus(BaseModel):
|
||||
effect_url: Optional[str] = None # URL to effect source code
|
||||
username: Optional[str] = None # Owner of the run (ActivityPub actor ID)
|
||||
infrastructure: Optional[dict] = None # Hardware/software used for rendering
|
||||
provenance_cid: Optional[str] = None # IPFS CID of provenance record
|
||||
|
||||
|
||||
# ============ Recipe Models ============
|
||||
@@ -616,10 +617,12 @@ async def get_run(run_id: str):
|
||||
if "output_hash" in result:
|
||||
# New DAG result format
|
||||
run.output_hash = result.get("output_hash")
|
||||
run.provenance_cid = result.get("provenance_cid")
|
||||
output_path = Path(result.get("output_path", "")) if result.get("output_path") else None
|
||||
else:
|
||||
# Legacy render_effect format
|
||||
run.output_hash = result.get("output", {}).get("content_hash")
|
||||
run.provenance_cid = result.get("provenance_cid")
|
||||
output_path = Path(result.get("output", {}).get("local_path", ""))
|
||||
|
||||
# Extract effects info from provenance (legacy only)
|
||||
|
||||
Reference in New Issue
Block a user