From 2621b1903c746b5be59c2d47a63b032704e9c6c7 Mon Sep 17 00:00:00 2001 From: pcnorth Date: Fri, 26 Apr 2024 09:38:01 +0000 Subject: [PATCH] deploy: 4efbb7743b881d87b8b15584db35259ed38c1925 --- 404.html | 2 +- _redirects | 2 - contributors/index.html | 2 +- .../app-registrations-api/index.html | 6 +- .../api-reference/assets-api/index.html | 8 +- .../api-reference/attachments-api/index.html | 6 +- developers/api-reference/blobs-api/index.html | 6 +- developers/api-reference/caps-api/index.html | 6 +- .../api-reference/compliance-api/index.html | 6 +- .../api-reference/events-api/index.html | 6 +- .../api-reference/iam-policies-api/index.html | 6 +- .../api-reference/iam-subjects-api/index.html | 6 +- developers/api-reference/index.html | 2 +- .../api-reference/locations-api/index.html | 6 +- .../public-assets-api/index.html | 6 +- developers/api-reference/sitemap.xml | 2 +- .../api-reference/system-api/index.html | 123 -- .../api-reference/tenancies-api/index.html | 6 +- .../containers-as-assets/index.html | 6 +- .../document-profile/index.html | 6 +- .../index.html | 6 +- developers/developer-patterns/index.html | 2 +- developers/developer-patterns/index.xml | 4 +- .../developer-patterns/namespace/index.html | 6 +- .../developer-patterns/scitt-api/index.html | 6 +- developers/developer-patterns/sitemap.xml | 2 +- .../software-package-profile/index.html | 6 +- .../AuditSearch.png | Bin 112790 -> 0 bytes ...cfb6571efa9e_112790_100x0_resize_box_3.png | Bin 2209 -> 0 bytes ...cfb6571efa9e_112790_200x0_resize_box_3.png | Bin 3907 -> 0 bytes ...cfb6571efa9e_112790_500x0_resize_box_3.png | Bin 21298 -> 0 bytes ...cfb6571efa9e_112790_800x0_resize_box_3.png | Bin 44946 -> 0 bytes ...cfb6571efa9e_112790_900x0_resize_box_3.png | Bin 52017 -> 0 bytes .../SimpleHashDetails.png | Bin 54919 -> 0 bytes ...702bdc2a8800f_54919_100x0_resize_box_3.png | Bin 2121 -> 0 bytes ...702bdc2a8800f_54919_200x0_resize_box_3.png | Bin 5679 -> 0 bytes ...702bdc2a8800f_54919_500x0_resize_box_3.png | Bin 22438 -> 0 bytes ...702bdc2a8800f_54919_800x0_resize_box_3.png | Bin 45411 -> 0 bytes ...702bdc2a8800f_54919_900x0_resize_box_3.png | Bin 48301 -> 0 bytes .../verifying-with-simple-hash/index.html | 87 - developers/index.html | 2 +- developers/sitemap.xml | 2 +- developers/yaml-reference/assets/index.html | 6 +- .../yaml-reference/compliance/index.html | 6 +- .../yaml-reference/estate-info/index.html | 6 +- developers/yaml-reference/events/index.html | 6 +- developers/yaml-reference/index.html | 2 +- .../yaml-reference/locations/index.html | 6 +- .../story-runner-components/index.html | 6 +- developers/yaml-reference/subjects/index.html | 6 +- docs/api-reference/system-api/index.html | 2 - .../verifying-with-simple-hash/index.html | 2 - glossary/common-datatrails-terms/index.html | 6 +- glossary/index.html | 2 +- glossary/index.xml | 2 +- glossary/reserved-attributes/index.html | 2 +- index.html | 2 +- ...0ab4f8df24e34a47d99d52600fd60ae0b39696c.js | 1458 ++--------------- .../compliance-policies/index.html | 2 +- .../dropbox-integration/index.html | 2 +- .../grouping-assets-by-location/index.html | 2 +- .../identity-and-access-management/index.html | 2 +- platform/administration/index.html | 2 +- .../index.html | 2 +- .../index.html | 2 +- .../administration/verified-domain/index.html | 2 +- platform/index.html | 2 +- .../overview/advanced-concepts/index.html | 2 +- platform/overview/core-concepts/index.html | 7 +- .../overview/creating-an-asset/index.html | 2 +- .../index.html | 2 +- platform/overview/index.html | 2 +- platform/overview/instaproof/index.html | 6 +- platform/overview/introduction/index.html | 2 +- .../overview/public-attestation/index.html | 2 +- .../index.html | 6 +- .../index.html | 2 +- sales/contactus/index.html | 2 +- sales/index.html | 2 +- sitemap.xml | 2 +- support/contactus/index.html | 2 +- support/index.html | 2 +- .../authenticity-and-attestation/index.html | 2 +- usecases/bill-of-materials/index.html | 2 +- usecases/index.html | 2 +- usecases/state-machine/index.html | 2 +- 86 files changed, 237 insertions(+), 1694 deletions(-) delete mode 100644 developers/api-reference/system-api/index.html delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_100x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_100x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_200x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_500x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_800x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_900x0_resize_box_3.png delete mode 100644 developers/developer-patterns/verifying-with-simple-hash/index.html delete mode 100644 docs/api-reference/system-api/index.html delete mode 100644 docs/beyond-the-basics/verifying-with-simple-hash/index.html rename index.min.98521d1443290e16a61d8af6cc1dc252d3b52b9608286ae0ba41e11cd79733e1940967c466e3977102b2d324c0f5b56a3e0ba1c6f83b1a4ce43b90d6156f0a7a.js => index.min.dfb2f0bc0875a13dbad2af830294dbc836a9a4492f797f9bb61f070ed64c9a4d64cc9eac2929b14417179bea10ab4f8df24e34a47d99d52600fd60ae0b39696c.js (97%) diff --git a/404.html b/404.html index 301bd205f..e63e962eb 100644 --- a/404.html +++ b/404.html @@ -5,4 +5,4 @@
\ No newline at end of file +Sign Up
\ No newline at end of file diff --git a/_redirects b/_redirects index d634aedf3..680b025ea 100644 --- a/_redirects +++ b/_redirects @@ -15,7 +15,6 @@ /docs/developer-patterns/namespace/ /developers/developer-patterns/namespace/ ../quickstart/creating-an-event-against-an-asset /platform/overview/creating-an-event-against-an-asset/ /docs/rkvst-basics/creating-an-event-against-an-asset/ /platform/overview/creating-an-event-against-an-asset/ -/docs/beyond-the-basics/verifying-with-simple-hash/ /developers/developer-patterns/verifying-with-simple-hash/ /docs/beyond-the-basics/public-attestation/ /platform/overview/public-attestation/ /docs/overview/identity-and-access-management/ /platform/administration/identity-and-access-management/ /docs/beyond-the-basics/verified-domain/ /platform/administration/verified-domain/ @@ -42,7 +41,6 @@ /docs/developer-patterns/scitt-api/ /developers/developer-patterns/scitt-api/ /docs/api-reference/locations-api/ /developers/api-reference/locations-api/ /docs/api-reference/public-assets-api/ /developers/api-reference/public-assets-api/ -/docs/api-reference/system-api/ /developers/api-reference/system-api/ /docs/api-reference/tenancies-api/ /developers/api-reference/tenancies-api/ /docs/yaml-reference/story-runner-components/ /developers/yaml-reference/story-runner-components/ /docs/yaml-reference/assets/ /developers/yaml-reference/assets/ diff --git a/contributors/index.html b/contributors/index.html index 085d7636d..d105c3405 100644 --- a/contributors/index.html +++ b/contributors/index.html @@ -5,4 +5,4 @@

Contributors

\ No newline at end of file +Sign Up

Contributors

\ No newline at end of file diff --git a/developers/api-reference/app-registrations-api/index.html b/developers/api-reference/app-registrations-api/index.html index faba3f792..db25e712f 100644 --- a/developers/api-reference/app-registrations-api/index.html +++ b/developers/api-reference/app-registrations-api/index.html @@ -6,8 +6,8 @@

App Registrations API

App Registrations API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -201,4 +201,4 @@ "display_name": "test", "identity": "applications/ffaa0f30-a503-4de7-b085-d857ed34a7cd", "tenant_id": "tenant/fafb2d41-5237-45c7-9740-66d1635f549b" -}

Response ParameterTypeDescription
client_idstringClient ID for use in OIDC client credentials flow
credentialsarrayDescribes a single time-limited secret
custom_claimsobjectCustom claims to add to Application for use in access policies.
display_namestringHuman-readable display name for this Application.
identitystringResource name for the application
tenant_idstringIdentity of the tenant owning this application
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized.
404Returned when the Application does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Software Package Profile
Assets API →
\ No newline at end of file +}
Response ParameterTypeDescription
client_idstringClient ID for use in OIDC client credentials flow
credentialsarrayDescribes a single time-limited secret
custom_claimsobjectCustom claims to add to Application for use in access policies.
display_namestringHuman-readable display name for this Application.
identitystringResource name for the application
tenant_idstringIdentity of the tenant owning this application
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized.
404Returned when the Application does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Software Package Profile
Assets API →
\ No newline at end of file diff --git a/developers/api-reference/assets-api/index.html b/developers/api-reference/assets-api/index.html index 15f0c7831..31accb712 100644 --- a/developers/api-reference/assets-api/index.html +++ b/developers/api-reference/assets-api/index.html @@ -6,8 +6,8 @@

Assets API

Assets API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -134,7 +134,7 @@ "https://app.datatrails.ai/archivist/v2/assets?attributes.arc_display_type=Traffic%20light"

Fetch Assets by Proof Mechanism

To fetch all Assets that use a specific Proof Mechanism, GET the Assets resource and filter on proof_mechanism:

curl -g -v -X GET \
      -H "@$HOME/.datatrails/bearer-token.txt" \
-     "https://app.datatrails.ai/archivist/v2/assets?attributes.proof_mechanism=simple_hash"
+     "https://app.datatrails.ai/archivist/v2/assets?proof_mechanism=MERKLE_LOG"
 

Fetch Events Ordered for SIMPLEHASHV1 Schema

To fetch Simple Hash Events in the order needed for the SIMPLEHASHV1 schema, GET the Assets resource, specifying a specific Asset ID or using assets/-/events to fetch Events for all Assets:

curl -g -v -X GET \
      -H "@$HOME/.datatrails/bearer-token.txt" \
@@ -441,4 +441,4 @@
 }
Response ParameterTypeDescription
asset_attributesobjectkey value mapping of asset attributes
asset_identitystringidentity of a related asset resource assets/11bf5b37-e0b8-42e0-8dcf-dc8c4aefc000
behaviourstringThe behaviour used to create event. RecordEvidence
block_numberstringnumber of block event was commited on
confirmation_statusstringindicates if the event has been succesfully committed to the blockchain
event_attributesobjectkey value mapping of event attributes
fromstringwallet address for the creator of this event
identitystringidentity of a event resource
merklelog_entryobjectverifiable merkle mmr log entry details
operationstringThe operation represented by the event. Record
principal_acceptedobjectprincipal recorded by the server
principal_declaredobjectprincipal provided by the user
tenant_identitystringIdentity of the tenant the that created this event
timestamp_acceptedstringtime of event as recorded by the server
timestamp_committedstringtime of event as recorded in verifiable storage
timestamp_declaredstringtime of event as declared by the user
transaction_idstringhash of the transaction as a hex string 0x11bf5b37e0b842e08dcfdc8c4aefc000
transaction_indexstringindex of event within commited block
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
402Returned when the user’s quota of Events has been reached.
429Returned when a user exceeds their subscription’s rate limit for requests.

get  /archivist/v2/assets/archivist/v2/assets/{uuid}:publicurl

Retrieves the Asset public url

Description: Retrieves the public url for a specific Asset.

{
   "publicurl": "https://app.datatrails.ai/archivist/publicassets/add30235-1424-4fda-840a-d5ef82c4c96f"
-}
Response ParameterTypeDescription
publicurlstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view an Asset.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← App Registrations API
Attachments API →
\ No newline at end of file +}
Response ParameterTypeDescription
publicurlstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view an Asset.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← App Registrations API
Attachments API →
\ No newline at end of file diff --git a/developers/api-reference/attachments-api/index.html b/developers/api-reference/attachments-api/index.html index 0afdf48b7..8e2f2ec5b 100644 --- a/developers/api-reference/attachments-api/index.html +++ b/developers/api-reference/attachments-api/index.html @@ -6,8 +6,8 @@

Attachments API

Attachments API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -103,4 +103,4 @@ "subject": "user-xxxx@example.com", "tenantid": "tenant/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "timestamp_accepted": "2019-11-07T15:31:49Z" -}

Response ParameterTypeDescription
hashblob hash.
identitystringblob identity.
issuerstringprincipal issuer.
mime_typestringhttp mime type.
scanned_bad_reasonstringif scanned as SCANNED_BAD contains a hint of scan result.
scanned_statusstringstatus of scan.
scanned_timestampstringdate and time when the attachments has been scanned.
sizeintegersize of the blob.
subjectstringprincipal subject.
tenantidstringidentity of the tenant the blob belongs to.
timestamp_acceptedstringdate and time when the request has been received.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
404Returned when the underlying system can’t find the asset.

← Assets API
Blobs API →
\ No newline at end of file +}
Response ParameterTypeDescription
hashblob hash.
identitystringblob identity.
issuerstringprincipal issuer.
mime_typestringhttp mime type.
scanned_bad_reasonstringif scanned as SCANNED_BAD contains a hint of scan result.
scanned_statusstringstatus of scan.
scanned_timestampstringdate and time when the attachments has been scanned.
sizeintegersize of the blob.
subjectstringprincipal subject.
tenantidstringidentity of the tenant the blob belongs to.
timestamp_acceptedstringdate and time when the request has been received.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
404Returned when the underlying system can’t find the asset.

← Assets API
Blobs API →
\ No newline at end of file diff --git a/developers/api-reference/blobs-api/index.html b/developers/api-reference/blobs-api/index.html index bc273bf88..0627e94fb 100644 --- a/developers/api-reference/blobs-api/index.html +++ b/developers/api-reference/blobs-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
hashblob hash.
identitystringblob identity.
issuerstringprincipal issuer.
mime_typestringhttp mime type.
scanned_bad_reasonstringif scanned as SCANNED_BAD contains a hint of scan result.
scanned_statusstringstatus of scan.
scanned_timestampstringdate and time when the attachments has been scanned.
sizeintegersize of the blob.
subjectstringprincipal subject.
tenantidstringidentity of the tenant the blob belongs to.
timestamp_acceptedstringdate and time when the request has been received.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to get the blob metadata.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying system returns an error.

← Attachments API
Compliance API →
\ No newline at end of file +}
Response ParameterTypeDescription
hashblob hash.
identitystringblob identity.
issuerstringprincipal issuer.
mime_typestringhttp mime type.
scanned_bad_reasonstringif scanned as SCANNED_BAD contains a hint of scan result.
scanned_statusstringstatus of scan.
scanned_timestampstringdate and time when the attachments has been scanned.
sizeintegersize of the blob.
subjectstringprincipal subject.
tenantidstringidentity of the tenant the blob belongs to.
timestamp_acceptedstringdate and time when the request has been received.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to get the blob metadata.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying system returns an error.

← Attachments API
Compliance API →
\ No newline at end of file diff --git a/developers/api-reference/caps-api/index.html b/developers/api-reference/caps-api/index.html index f30ad3119..d48a33c33 100644 --- a/developers/api-reference/caps-api/index.html +++ b/developers/api-reference/caps-api/index.html @@ -6,8 +6,8 @@

Caps API

Caps API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -24,4 +24,4 @@ } ] } -

These are the available values for “?service=”:

  • access_policies
  • applications
  • assets
  • blobs
  • compliance_policies
  • locations
  • tenancies/users

Caps OpenAPI Docs

API providing caps data for DataTrails APIs

get  /archivist/v1/caps/archivist/v1/caps

Returns caps for the given resource

Description: Returns caps for the given resource

ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access the resource.
429Returned when a user exceeds their subscription’s rate limit for requests.

\ No newline at end of file +

These are the available values for “?service=”:

Caps OpenAPI Docs

API providing caps data for DataTrails APIs

get  /archivist/v1/caps/archivist/v1/caps

Returns caps for the given resource

Description: Returns caps for the given resource

ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access the resource.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Estate Information YAML Runner
\ No newline at end of file diff --git a/developers/api-reference/compliance-api/index.html b/developers/api-reference/compliance-api/index.html index ccfca855d..1917d2301 100644 --- a/developers/api-reference/compliance-api/index.html +++ b/developers/api-reference/compliance-api/index.html @@ -6,8 +6,8 @@

Compliance API

Compliance API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -193,4 +193,4 @@ "event_display_type": "Maintenance Performed", "identity": "compliance_policies/463fab3a-bae5-4349-8f76-f6454da20c9d", "time_period_seconds": 86800 -}

Response ParameterTypeDescription
asset_filterarrayFilter
closing_event_display_typestring
compliance_type
descriptionstring
display_namestring
dynamic_variabilitynumber
dynamic_windowstring
event_display_typestring
identitystring
richness_assertionsarrayFilter
time_period_secondsstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access the requested resource.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Blobs API
Events API →
\ No newline at end of file +}
Response ParameterTypeDescription
asset_filterarrayFilter
closing_event_display_typestring
compliance_type
descriptionstring
display_namestring
dynamic_variabilitynumber
dynamic_windowstring
event_display_typestring
identitystring
richness_assertionsarrayFilter
time_period_secondsstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access the requested resource.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Blobs API
Events API →
\ No newline at end of file diff --git a/developers/api-reference/events-api/index.html b/developers/api-reference/events-api/index.html index 043f9a860..ecf12559b 100644 --- a/developers/api-reference/events-api/index.html +++ b/developers/api-reference/events-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
asset_attributesobjectkey value mapping of asset attributes
asset_identitystringidentity of a related asset resource assets/11bf5b37-e0b8-42e0-8dcf-dc8c4aefc000
behaviourstringThe behaviour used to create event. RecordEvidence
block_numberstringnumber of block event was commited on
confirmation_statusstringindicates if the event has been succesfully committed to the blockchain
event_attributesobjectkey value mapping of event attributes
fromstringwallet address for the creator of this event
identitystringidentity of a event resource
merklelog_entryobjectverifiable merkle mmr log entry details
operationstringThe operation represented by the event. Record
principal_acceptedobjectprincipal recorded by the server
principal_declaredobjectprincipal provided by the user
tenant_identitystringIdentity of the tenant the that created this event
timestamp_acceptedstringtime of event as recorded by the server
timestamp_committedstringtime of event as recorded in verifiable storage
timestamp_declaredstringtime of event as declared by the user
transaction_idstringhash of the transaction as a hex string 0x11bf5b37e0b842e08dcfdc8c4aefc000
transaction_indexstringindex of event within commited block
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
402Returned when the user’s quota of Events has been reached.
429Returned when a user exceeds their subscription’s rate limit for requests.

get  /archivist/v2/assets/archivist/v2/assets/{uuid}:publicurl

Retrieves the Asset public url

Description: Retrieves the public url for a specific Asset.

{
   "publicurl": "https://app.datatrails.ai/archivist/publicassets/add30235-1424-4fda-840a-d5ef82c4c96f"
-}
Response ParameterTypeDescription
publicurlstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view an Asset.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Compliance API
IAM Policies API →
\ No newline at end of file +}
Response ParameterTypeDescription
publicurlstring
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view an Asset.
404Returned when the asset with the id does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Compliance API
IAM Policies API →
\ No newline at end of file diff --git a/developers/api-reference/iam-policies-api/index.html b/developers/api-reference/iam-policies-api/index.html index b8b4d3b2f..5c1e2c9b1 100644 --- a/developers/api-reference/iam-policies-api/index.html +++ b/developers/api-reference/iam-policies-api/index.html @@ -6,8 +6,8 @@

IAM Policies API

IAM Policies API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -636,4 +636,4 @@ } ], "page_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InN0dW50aWR" -}

Response ParameterTypeDescription
access_policiesarrayDescribes an Access Policy for OBAC
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to list the access policy.
404Returned when the identified access policy does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying storage system returns an error.

← Events API
IAM Subjects API →
\ No newline at end of file +}
Response ParameterTypeDescription
access_policiesarrayDescribes an Access Policy for OBAC
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to list the access policy.
404Returned when the identified access policy does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying storage system returns an error.

← Events API
IAM Subjects API →
\ No newline at end of file diff --git a/developers/api-reference/iam-subjects-api/index.html b/developers/api-reference/iam-subjects-api/index.html index 92b0c0731..a64920c35 100644 --- a/developers/api-reference/iam-subjects-api/index.html +++ b/developers/api-reference/iam-subjects-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
confirmation_status
display_namestringCustomer friendly name for the subject.
identitystringUnique identification for the subject, Relative Resource Name
tenantstringTenent id
tessera_pub_keyarrayOrganisation’s tessara wallet keys (BNF)
wallet_addressarrayOrganisation’s wallet addresses
wallet_pub_keyarrayOrganisation’s public wallet keys (BNF)
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to update the subject.
404Returned when the identified subject does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying storage system returns an error.

← IAM Policies API
Quickstart: SCITT Statements (Preview) →
\ No newline at end of file +}
Response ParameterTypeDescription
confirmation_status
display_namestringCustomer friendly name for the subject.
identitystringUnique identification for the subject, Relative Resource Name
tenantstringTenent id
tessera_pub_keyarrayOrganisation’s tessara wallet keys (BNF)
wallet_addressarrayOrganisation’s wallet addresses
wallet_pub_keyarrayOrganisation’s public wallet keys (BNF)
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to update the subject.
404Returned when the identified subject does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.
500Returned when the underlying storage system returns an error.

← IAM Policies API
Quickstart: SCITT Statements (Preview) →
\ No newline at end of file diff --git a/developers/api-reference/index.html b/developers/api-reference/index.html index 99ad74ac6..e804ac58c 100644 --- a/developers/api-reference/index.html +++ b/developers/api-reference/index.html @@ -5,4 +5,4 @@
\ No newline at end of file +Sign Up
\ No newline at end of file diff --git a/developers/api-reference/locations-api/index.html b/developers/api-reference/locations-api/index.html index 47ff488c2..cf1fc02aa 100644 --- a/developers/api-reference/locations-api/index.html +++ b/developers/api-reference/locations-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
location_identitystringThe location identity in the form: locations/{uuid}
permissionsSubject identities this location is shared with
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access permissions for the location.
404Returned when the identified location does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Quickstart: SCITT Statements (Preview)
Public Assets API →
\ No newline at end of file +}
Response ParameterTypeDescription
location_identitystringThe location identity in the form: locations/{uuid}
permissionsSubject identities this location is shared with
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to access permissions for the location.
404Returned when the identified location does not exist.
429Returned when a user exceeds their subscription’s rate limit for requests.

← Quickstart: SCITT Statements (Preview)
Public Assets API →
\ No newline at end of file diff --git a/developers/api-reference/public-assets-api/index.html b/developers/api-reference/public-assets-api/index.html index 98ab06973..136ee0064 100644 --- a/developers/api-reference/public-assets-api/index.html +++ b/developers/api-reference/public-assets-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
eventsarrayThis describes an Event.
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
ResponsesDescription
200A successful response.
206The number of events exceeds the servers limit. The approximate number of matching results is provided by the x-total-count header, the exact limit is available in the content-range header. The value format is ‘items 0-LIMIT/TOTAL’. Note that x-total-count is always present for 200 and 206 responses. It is the servers best available approximation. Similarly, in any result set, you may get a few more than LIMIT items.

← Locations API
System API →
\ No newline at end of file +}
Response ParameterTypeDescription
eventsarrayThis describes an Event.
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
ResponsesDescription
200A successful response.
206The number of events exceeds the servers limit. The approximate number of matching results is provided by the x-total-count header, the exact limit is available in the content-range header. The value format is ‘items 0-LIMIT/TOTAL’. Note that x-total-count is always present for 200 and 206 responses. It is the servers best available approximation. Similarly, in any result set, you may get a few more than LIMIT items.

← Locations API
Tenancies API →
\ No newline at end of file diff --git a/developers/api-reference/sitemap.xml b/developers/api-reference/sitemap.xml index 8cb8f5ece..09d1c8000 100644 --- a/developers/api-reference/sitemap.xml +++ b/developers/api-reference/sitemap.xml @@ -1 +1 @@ -/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/system-api/2021-06-09T13:49:35+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5 \ No newline at end of file +/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5 \ No newline at end of file diff --git a/developers/api-reference/system-api/index.html b/developers/api-reference/system-api/index.html deleted file mode 100644 index c5be097f2..000000000 --- a/developers/api-reference/system-api/index.html +++ /dev/null @@ -1,123 +0,0 @@ -System API - DataTrails -

System API

System API Reference

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. -If you are looking for a simple way to test our API you might prefer our -Postman collection, the -YAML runner or the -Developers section of the web UI.

Additional YAML examples can be found in the articles in the -Overview section.

System API Examples

Create the -bearer_token and store in a file in a secure local directory with 0600 permissions.

Querying Blockchain Status

The archivistnode endpoint reports on the status of the blockchain.

Query the endpoint:

curl -v -X GET \
-    -H "@$HOME/.datatrails/bearer-token.txt" \
-    https://app.datatrails.ai/archivist/v1/archivistnode
-

The response is:

{
-    "identity": "quorum",
-    "blockchain_nodes": [
-        {
-            "validator_pubkey": {
-                "kty": "EC",
-                "crv": "P-256K",
-                "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
-                "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE=",
-                "d": ""
-            },
-            "block_height": "38773",
-            "connection_status": "REACHABLE"
-            "genesis_hash":"0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
-            "state_root":"0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
-            "timestamp_committed": "2019-01-02T01:03:07Z",
-            "timestamp_created": "2019-01-01T12:00:27Z",
-            "syncing": null,
-            "peers": [
-                {
-                    "validator_pubkey": {
-                        "kty": "EC",
-                        "crv": "P-256K",
-                        "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
-                        "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU=",
-                        "d": ""
-                    },
-                    "connection_status": "REACHABLE"
-                },
-                {
-                    "validator_pubkey": {
-                        "kty": "EC",
-                        "crv": "P-256K",
-                        "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
-                        "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI=",
-                        "d": ""
-                    },
-                    "connection_status": "REACHABLE"
-                }
-            ]
-        }
-    ]
-}
-

System OpenAPI Docs

API to manage an archivist node.

get  /archivist/v1/archivistnode/archivist/v1/archivistnode

Get information about an archivist node

Description: Returns the identified archivist node

{
-  "blockchain_nodes": [
-    {
-      "block_height": "38773",
-      "connection_status": "REACHABLE",
-      "genesis_hash": "0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
-      "peers": [
-        {
-          "connection_status": "REACHABLE",
-          "validator_pubkey": {
-            "crv": "P-256K",
-            "d": "",
-            "kty": "EC",
-            "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
-            "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU="
-          }
-        },
-        {
-          "connection_status": "REACHABLE",
-          "validator_pubkey": {
-            "crv": "P-256K",
-            "d": "",
-            "kty": "EC",
-            "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
-            "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI="
-          }
-        }
-      ],
-      "state_root": "0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
-      "syncing": null,
-      "timestamp_committed": "2019-01-01T12:00:27Z",
-      "timestamp_created": "2019-01-01T12:00:27Z",
-      "validator_pubkey": {
-        "crv": "P-256K",
-        "d": "",
-        "kty": "EC",
-        "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
-        "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE="
-      }
-    }
-  ],
-  "identity": "quorum-0"
-}
Response ParameterTypeDescription
blockchain_nodesarray
identitystringThe identity of the archivistnode blockchain
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to read the archivist node’s information
404Returned when the identified archivist node does not exist
429Returned when a user exceeds their subscription’s rate limit for requests.

get  /archivist/v1/archivistnode/archivist/v1/archivistnode/block

Get a block given a block hash or block number.

Description: Get a block given a block hash or block number

{
-  "difficulty": "0x20000",
-  "extraData": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4RDW4QfD3cYx...",
-  "gasLimit": "0xb2d05e00",
-  "gasUsed": "0xf426",
-  "hash": "0x5c6726d7570046c6c4b20e97de1486877f293ba1e4d3b64c13b671354c2f8266",
-  "logsBloom": "3078303030303030303030303030303030303030303030303030303030303030303...",
-  "miner": "0x0000000000000000000000000000000000000000",
-  "nonce": "307830303030303030303030303030303030",
-  "number": "0x1a95f",
-  "parentHash": "0x5fb3e35418f67379dbb2093d4886409ff8e530116628aee7c960e18f2fa9f40c",
-  "receiptsRoot": "0x8bde93a8260d39fa79b76b8c5c7fe687669ba17c63928c4d8e55bc8fcfad04ee",
-  "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
-  "stateRoot": "0xb1bf30baaed044489b769f4bc557594f74e917b297b79ebe88102a856490cfc4",
-  "timestamp": "0xf426",
-  "transactionRoot": "0x5d912ec4fd96825fc58e75401d9834e94bf2fd8f01e50d6946831a60ec1c2040"
-}
Response ParameterTypeDescription
difficultystringinteger of the difficulty for this block encoded as a hexadecimal
extraDatastringthe “extra data” field of this block
gasLimitstringthe maximum gas allowed in this block encoded as a hexadecimal
gasUsedstringthe total used gas by all transactions in this block encoded as a hexadecimal
hashstringthe block hash
logsBloomstringthe bloom filter for the logs of the block
minerstringthe address of the beneficiary to whom the mining rewards were given
noncestringhash of the generated proof of work
numberstringthe block number in hexidecimal
parentHashstringhash of the parent block
privateStateRootstringthe root of the final, node specific, private state trie of the block
receiptsRootstringthe root of the receipts trie of the block
sha3Unclesstringsha3 hash of the uncles data in the block
stateRootstringthe root of the final state trie of the block
timestampstringthe unix timestamp for when the block was collated
transactionRootstringthe root of the transaction trie of the block
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view the block.
404Returned when the asset with the id does not exist. or the event with the id does not exist
429Returned when a user exceeds their subscription’s rate limit for requests.

\ No newline at end of file diff --git a/developers/api-reference/tenancies-api/index.html b/developers/api-reference/tenancies-api/index.html index 93fe6bbcf..a0d74b702 100644 --- a/developers/api-reference/tenancies-api/index.html +++ b/developers/api-reference/tenancies-api/index.html @@ -6,8 +6,8 @@
Response ParameterTypeDescription
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
tenantsarrayTenant information for a user.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to read the user.
404Returned when the identified user don’t exist.
500Returned when the underlying storage system returns an error.

← System API
YAML Runner Components →
\ No newline at end of file +}
Response ParameterTypeDescription
next_page_tokenstringToken to retrieve the next page of results or empty if there are none.
tenantsarrayTenant information for a user.
ResponsesDescription
200A successful response.
400Returned when the request is badly formed.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to read the user.
404Returned when the identified user don’t exist.
500Returned when the underlying storage system returns an error.

← Public Assets API
YAML Runner Components →
\ No newline at end of file diff --git a/developers/developer-patterns/containers-as-assets/index.html b/developers/developer-patterns/containers-as-assets/index.html index fb3a2c686..0a80a91bd 100644 --- a/developers/developer-patterns/containers-as-assets/index.html +++ b/developers/developer-patterns/containers-as-assets/index.html @@ -6,8 +6,8 @@

Containers as Assets

Using DataTrails to Represent Containers

Represent Containers Using DataTrails

DataTrails Assets can be used to track the status, contents, location, and other key attributes of containers over time. This can also be done for containers within containers. For example, you may wish to track bags inside boxes that are inside a shipping container being transported on a train.

Create a Container Asset

A Container Asset is not a special type of asset, it is a label that is given to an Asset that has been created to represent a container. For more detail on the Asset creation process, please see our DataTrails Overview guide.
For this example, we will create a simple asset that we will call Shipping Container. Note that with DataTrails, we could also record more complex attributes such as size of the container, weight, location, or any other important details. For now, we will create a minimal Asset that includes the name and type.

Create the Shipping Container
curl -g -X GET \
      -H "$HOME/.datatrails/bearer-token.txt" \
      "https://app.datatrails.ai/archivist/v2/assets?attributes.within_container=Shipping%20Container" | jq
-

\ No newline at end of file +

← Creating Access Tokens Using a Custom Integration
Namespace →
\ No newline at end of file diff --git a/developers/developer-patterns/document-profile/index.html b/developers/developer-patterns/document-profile/index.html index c64a41ec8..0800c60eb 100644 --- a/developers/developer-patterns/document-profile/index.html +++ b/developers/developer-patterns/document-profile/index.html @@ -6,8 +6,8 @@

Document Profile

Tracing the Lifecycle of a Document with DataTrails

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

Profile Attribute Namespace

The document_ prefix is used to designate attributes that are part of the profile. Some of these are interpreted by DataTrails and others are guidelines.

Document Profile Asset Attributes

Asset AttributesMeaningRequirement
arc_profileDesignates that the Asset follows the document profileRequired, set as Document
document_hash_valueHash of the most recently published version of the documentRequired
document_hash_algAlgorithm used to compute document_hash_value (currently, only SHA-256 is supported)Required
document_documentAttachment containing the most recently uploaded version of the document being traced.Optional
document_versionSpecific version string for the most recent version of the documentOptional, but encouraged
document_statusLabel for filtering and accommodating critical document lifecycle events (Published, Withdrawn)Optional, enforced when using lifecycle events
document_portable_nameFormal name or identifier for document that persists across boundaries and throughout versionsOptional, not interpreted by DataTrails

Publish Event

Publish a new version of the document using special attributes interpreted by DataTrails for this event type.

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must be set to Publish
document_version_authorsList of authors on this version of the documentOptional, see format below
Document Version Authors

You must express document_version_authors as a list of objects that have display_name as a property.

[
   {
     "display_name": "Alice", 
@@ -16,4 +16,4 @@
   }
 ]
 
Asset AttributesMeaningRequirement
document_hash_valueHash of this version of the documentRequired
document_hash_algAlgorithm used for hashing. We only officially support SHA-256.Required
document_statusLabel for filtering and accommodating critical document lifecycle eventsRequired, must be Published
document_documentAttachment containing this version of the documentOptional
document_versionVersion string for the this version of the documentOptional

Withdraw Event

If a document is no longer required, or if for any reason it is decided that it should no longer be used, then a document can be withdrawn. -Withdrawal is optional and it is usually the final event in the document lifecycle. It can be reversed in DataTrails by publishing a new version.

Withdraw an entire document (mark that it is no longer considered current.)

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must be set to Withdraw
document_withdrawal_reasonReason why document has been withdrawnOptional, but encouraged
Asset AttributesMeaningRequirement
document_statusLabel for filtering and accommodating critical document lifecycle eventsRequired, must be Withdrawn

\ No newline at end of file +Withdrawal is optional and it is usually the final event in the document lifecycle. It can be reversed in DataTrails by publishing a new version.

Withdraw an entire document (mark that it is no longer considered current.)

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must be set to Withdraw
document_withdrawal_reasonReason why document has been withdrawnOptional, but encouraged
Asset AttributesMeaningRequirement
document_statusLabel for filtering and accommodating critical document lifecycle eventsRequired, must be Withdrawn

← Namespace
Software Package Profile →
\ No newline at end of file diff --git a/developers/developer-patterns/getting-access-tokens-using-app-registrations/index.html b/developers/developer-patterns/getting-access-tokens-using-app-registrations/index.html index 54f2ae53a..8435929eb 100644 --- a/developers/developer-patterns/getting-access-tokens-using-app-registrations/index.html +++ b/developers/developer-patterns/getting-access-tokens-using-app-registrations/index.html @@ -6,8 +6,8 @@

Creating Access Tokens Using a Custom Integration

Creating Access Tokens for DataTrails

Non-interactive access to the DataTrails platform is managed by creating Integrations with either a Custom Integration or one of the built-in Integrations. This is done using either the Settings or Integrations menus in the DataTrails UI or by using the App Registrations API directly.

Note: App Registration is the old name for a Custom Integration.

Custom Integrations have a CLIENT_ID and a SECRET, these are used to authenticate with DataTrails IAM endpoints using JSON Web Tokens (JWT).

DataTrails authentication uses the industry-standard OIDC Client Credentials Flow.

The high level steps are:

  1. Create an Integration in the UI
  2. Define access permissions for the Integration in the UI
  3. Request an Access Token using the API
  4. Use the Access Token to make a REST API call to your tenancy.

Creating a Custom Integration

If you have already saved a CLIENT_ID and a SECRET, with the correct permissions applied, skip to @@ -87,4 +87,4 @@ "iss": "https://app.datatrails.ai/appidpv1", "aud": "https://app.datatrails.ai/archivist" } -

\ No newline at end of file +

Containers as Assets →
\ No newline at end of file diff --git a/developers/developer-patterns/index.html b/developers/developer-patterns/index.html index 3e911f37a..a25d10627 100644 --- a/developers/developer-patterns/index.html +++ b/developers/developer-patterns/index.html @@ -5,4 +5,4 @@

Developer Patterns

This sub-section of the Developers subject area contains more detailed information on topics that cannot be covered by the API or YAML Runner references.

You will find articles on common developer tasks and concept guides that are relevant to developers.

Check out the articles below for more information!


Getting Access Tokens using App Registrations →
Containers as Assets →
Namespace →
Verifying Assets and Events with Simple Hash →
Document Profile →
Software Package Profile →

\ No newline at end of file +Sign Up

Developer Patterns

This sub-section of the Developers subject area contains more detailed information on topics that cannot be covered by the API or YAML Runner references.

You will find articles on common developer tasks and concept guides that are relevant to developers.

Check out the articles below for more information!


Getting Access Tokens using App Registrations →
Containers as Assets →
Namespace →
Verifying Assets and Events with Simple Hash →
Document Profile →
Software Package Profile →

\ No newline at end of file diff --git a/developers/developer-patterns/index.xml b/developers/developer-patterns/index.xml index 8c6df6f23..b63c97447 100644 --- a/developers/developer-patterns/index.xml +++ b/developers/developer-patterns/index.xml @@ -1,8 +1,6 @@ Developer Patterns onhttps://docs.datatrails.ai/developers/developer-patterns/Recent content in Developer Patterns onHugo 0.125.2en-GBWed, 27 Sep 2023 11:12:25 +0100Creating Access Tokens Using a Custom Integrationhttps://docs.datatrails.ai/developers/developer-patterns/getting-access-tokens-using-app-registrations/Wed, 16 Jun 2021 11:12:25 +0100https://docs.datatrails.ai/developers/developer-patterns/getting-access-tokens-using-app-registrations/Non-interactive access to the DataTrails platform is managed by creating Integrations with either a Custom Integration or one of the built-in Integrations. This is done using either the Settings or Integrations menus in the DataTrails UI or by using the App Registrations API directly. Note: App Registration is the old name for a Custom Integration. Custom Integrations have a CLIENT_ID and a SECRET, these are used to authenticate with DataTrails IAM endpoints using JSON Web Tokens (JWT).Containers as Assetshttps://docs.datatrails.ai/developers/developer-patterns/containers-as-assets/Mon, 31 May 2021 15:18:01 +0100https://docs.datatrails.ai/developers/developer-patterns/containers-as-assets/Represent Containers Using DataTrails DataTrails Assets can be used to track the status, contents, location, and other key attributes of containers over time. This can also be done for containers within containers. For example, you may wish to track bags inside boxes that are inside a shipping container being transported on a train. Create a Container Asset A Container Asset is not a special type of asset, it is a label that is given to an Asset that has been created to represent a container.Namespacehttps://docs.datatrails.ai/developers/developer-patterns/namespace/Mon, 31 May 2021 15:18:01 +0100https://docs.datatrails.ai/developers/developer-patterns/namespace/Namespace is a tool that can be used to prevent unwanted interactions when multiple users are performing testing in the same Tenancy. Using two separate namespaces prevents collisions that may cause undesirable results by allowing multiple users to interact with the same Assets and Events without interrupting each other. -Namespace can be added as an attribute within the files you are testing, or as a variable in your Bash environment.Archived: Verifying Assets and Events with Simple Hashhttps://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/Tue, 18 May 2021 14:52:25 +0100https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/Verifying your Simple Hash events provides an additional layer of assurance to your data, so you can ensure that the information you have in your hand at a given time has not changed. -This allows you to check for yourself, and prove to others, that any attestations that you made have not been changed since they were recorded in DataTrails. -To verify your data, you may use the DataTrails Simple Hash tool, available on GitHub.Document Profilehttps://docs.datatrails.ai/developers/developer-patterns/document-profile/Mon, 31 May 2021 15:18:01 +0100https://docs.datatrails.ai/developers/developer-patterns/document-profile/The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document. +Namespace can be added as an attribute within the files you are testing, or as a variable in your Bash environment.Document Profilehttps://docs.datatrails.ai/developers/developer-patterns/document-profile/Mon, 31 May 2021 15:18:01 +0100https://docs.datatrails.ai/developers/developer-patterns/document-profile/The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document. Profile Attribute Namespace The document_ prefix is used to designate attributes that are part of the profile. Some of these are interpreted by DataTrails and others are guidelines. Document Profile Asset Attributes Asset Attributes Meaning Requirement arc_profile Designates that the Asset follows the document profile Required, set as Document document_hash_value Hash of the most recently published version of the document Required document_hash_alg Algorithm used to compute document_hash_value (currently, only SHA-256 is supported) Required document_document Attachment containing the most recently uploaded version of the document being traced.Software Package Profilehttps://docs.datatrails.ai/developers/developer-patterns/software-package-profile/Mon, 26 Jun 2023 11:56:01 +0100https://docs.datatrails.ai/developers/developer-patterns/software-package-profile/Overview The DataTrails Software Package profile is a set of suggested Asset and Event attributes that enable the recording of an immutable and verifiable Software Bill of Materials (SBOM). The NTIA describes a SBOM as “a formal record containing the details and supply chain relationships of various components used in building software.” diff --git a/developers/developer-patterns/namespace/index.html b/developers/developer-patterns/namespace/index.html index da09b9a2c..72f21c89a 100644 --- a/developers/developer-patterns/namespace/index.html +++ b/developers/developer-patterns/namespace/index.html @@ -6,8 +6,8 @@

Namespace

Using Namespace in an DataTrails Tenancy

Namespace is a tool that can be used to prevent unwanted interactions when multiple users are performing testing in the same Tenancy. Using two separate namespaces prevents collisions that may cause undesirable results by allowing multiple users to interact with the same Assets and Events without interrupting each other.

Namespace can be added as an attribute within the files you are testing, or as a variable in your Bash environment.

To add namespace as an attribute to your files, use the arc_namespace key. For example:

{
     "behaviours": ["RecordEvidence"],
     "attributes": {
@@ -22,4 +22,4 @@
 }
 

To use namespace as a variable, such as the date, add the argument to your Bash environment:

 export TEST_NAMESPACE=date
 

See -TEST_NAMESPACE in our GitHub repository for more information. TEST_NAMESPACE can also be added to your Bash profile to be automatically picked up when testing.

\ No newline at end of file +TEST_NAMESPACE in our GitHub repository for more information. TEST_NAMESPACE can also be added to your Bash profile to be automatically picked up when testing.

\ No newline at end of file diff --git a/developers/developer-patterns/scitt-api/index.html b/developers/developer-patterns/scitt-api/index.html index c0fbe7b55..76781e9a5 100644 --- a/developers/developer-patterns/scitt-api/index.html +++ b/developers/developer-patterns/scitt-api/index.html @@ -6,8 +6,8 @@

Quickstart: SCITT Statements (Preview)

How to push a collection of Statements using SCITT APIs

The SCITT API is currently in preview and subject to change

The Supply Chain Integrity, Transparency and Trust (SCITT) initiative is a set of IETF standards for managing the compliance and auditability of goods and services across end-to-end supply chains. SCITT supports the ongoing verification of goods and services where the authenticity of entities, evidence, policy, and artifacts can be assured and the actions of entities can be guaranteed to be authorized, non-repudiable, immutable, and auditable.

To assure insights to supply chain artifacts are current, the SCITT APIs provide a correlation of statements, allowing verifiers to view a full history of statements. @@ -63,4 +63,4 @@

Coming soon: Filter on specific content types, such as what SBOMs have been registered, or which issuers have made statements.

Summary

The quickstart created a collection of statements for a given artifact. Over time, as new information is available, authors can publish new statements which verifiers and consumers can benefit from. There are no limits to the types of additional statements that may be registered, which may include new vulnerability information, notifications of new versions, end of life (EOL) notifications, or more. -By using the content-type parameter, verifiers can filter to specific types, and/or filter statements by the issuer.

For more information:

\ No newline at end of file +By using the content-type parameter, verifiers can filter to specific types, and/or filter statements by the issuer.

For more information:

\ No newline at end of file diff --git a/developers/developer-patterns/sitemap.xml b/developers/developer-patterns/sitemap.xml index b8975c06e..336b76801 100644 --- a/developers/developer-patterns/sitemap.xml +++ b/developers/developer-patterns/sitemap.xml @@ -1 +1 @@ -/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/verifying-with-simple-hash/2021-05-18T14:52:25+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5 \ No newline at end of file +/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5 \ No newline at end of file diff --git a/developers/developer-patterns/software-package-profile/index.html b/developers/developer-patterns/software-package-profile/index.html index 2d1948c42..591b2c3c7 100644 --- a/developers/developer-patterns/software-package-profile/index.html +++ b/developers/developer-patterns/software-package-profile/index.html @@ -6,8 +6,8 @@

Software Package Profile

Sharing and Distributing a Software Bill of Materials with DataTrails

Overview

The DataTrails Software Package profile is a set of suggested Asset and Event attributes that enable the recording of an immutable and verifiable Software Bill of Materials (SBOM).

The NTIA describes a SBOM as “a formal record containing the details and supply chain relationships of various components used in building software.

Software Package Profile Asset Attributes

NTIA AttributeAsset AttributesMeaningRequirement
Author Namesbom_authorThe name of the Package AuthorRequired
Supplier Namesbom_supplierThe name of the Package SupplierRequired
Component Namesbom_component,(arc_display_name if appropriate)The name of the Software PackageRequired
Version Stringsbom_versionThe version of the Software PackageRequired
Unique Identifiersbom_uuidA unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_repoLink to the Git Repo of the ComponentOptional
N/Asbom_release_notesLink to the release notes of the package versionOptional
N/Asbom_licenseThe licensing used by the component (if specified)Optional

Note: Software Package Profile Attribute Namespace

The sbom_ prefix is used to designate attributes that are part of the profile. Some of these are interpreted by DataTrails and others are guidelines.

Public SBOM

In the API, you must express public as an asset attribute and have true as a property to make an SBOM public. The default is ‘false’. In the UI this is done by setting Attest Publicly to On.

Select Assets & Documents from the sidebar and then Add Custom Asset. Fill in the desired details. @@ -43,4 +43,4 @@ "public": true }

Software Package Profile Event Types and Attributes

Release Event

A Release is the event used by a Supplier to provide an SBOM for their Software Package in DataTrails.

The Release attributes tracked in DataTrails should minimally represent the base information required by the NTIA standard and be recorded in two, separate, lists of attributes; Asset Attributes would track details about the latest release of the SBOM at the time of the event creation, the Event Attributes then track details about the release of the SBOM that is being submitted.

Release Event Attribute Namespace

The sbom_ prefix is used to designate attributes that are part of the event and asset. Some of these are interpreted by DataTrails and others are guidelines

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to Release
Author Namesbom_authorThe name of the Package AuthorRequired
Supplier Namesbom_supplierThe name of the Package AuthorRequired
Component Namesbom_componentThe name of the PackageRequired
Version Stringsbom_versionThe version of the PackageRequired
Unique Identifiersbom_uuidA unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_repoLink to the Git Repo of the ComponentOptional
N/Asbom_release_notesLink to the release notes of the releaseOptional
N/Asbom_licenseThe licensing used by the component (if specified)Optional
N/Asbom_exceptionIf included value is always trueOptional
N/Asbom_vuln_referenceIf this release resolves a specific vulnerability you can highlight a shared Vulnerability reference number(s)Optional
NTIA AttributeAsset AttributesMeaningRequirement
Author Namesbom_authorThe name of the Package AuthorRequired
Supplier Namesbom_supplierThe name of the Package SupplierRequired
Component Namesbom_component,(arc_display_name if appropriate)The name of the Software PackageRequired
Version Stringsbom_versionThe version of the Software PackageRequired
Unique Identifiersbom_uuidA unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_repoLink to the Git Repo of the ComponentOptional
N/Asbom_release_notesLink to the release notes of the package versionOptional
N/Asbom_licenseThe licensing used by the component (if specified)Optional
Exception

When used in tandem with Release Plan and Accepted events the exception is a useful record of when an emergency has caused a release to be pushed without needing an initial approval or plan.

Release Plan and Release Accepted

Release events can be optionally enhanced by using ‘Release Plan’ and ‘Release Accepted’ events alongside them.

Release Plan events demonstrate an intent to introduce a new release, it should describe which version you want to release and who wants to release it. For example, it could include draft release notes explaining what is being updated and why it should be updated.

Release Accepted events demonstrate an approval on a Release Plan to go forward, it may be that the plan details a need to introduce a fix for a specific vulnerability and the security team is needed to sign off the release going forward.

These events are not essential to the process so can be omitted in a standard or minimal deployment but they are actively encouraged. As they should not affect the information about the latest Software Package Release there should be no Asset Attributes included, other NTIA attributes may also not be necessary or not available until release (e.g. Component Hash).

The Key Attribute that should be recorded is the version of the release that is being planned and accepted.

Release Plan

Release Plan Event Attribute Namespace

The sbom_planned_ prefix is used to designate attributes that are part of the event. Some of these are interpreted by DataTrails and others are guidelines.

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to Release Plan
Component Namesbom_planned_componentThe planned name of the PackageRequired
Version Stringsbom_planned_versionThe planned version of the PackageRequired
N/Asbom_planned_referenceA reference number for the plan (such as internal change request number)Required
N/Asbom_planned_dateThe planned release dateRequired
N/Asbom_planned_captainThe planned Release Captain (a common term for someone who is responsible for performing a Release; someone like an Owner in Agile serves a different purpose but may also be used if appropriate). This is mandatory as it describes who should be responsible for the releaseRequired
Author Namesbom_planned_authorThe planned name of the Package AuthorOptional
Supplier Namesbom_planned_supplierThe planned name of the Package SupplierOptional
Component Hashsbom_planned_hashThe planned hash of the component files/installation (per version)Optional
Unique Identifiersbom_planned_uuidThe planned unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadOptional
N/Asbom_planned_licenseIf there is an intended change to the license this may be neededOptional
N/Asbom_planned_vuln_referenceIf this release intends to resolve a specific vulnerability you can highlight a shared Vulnerability reference number(s)Optional

Release Accepted Event

Release Accepted Event Attribute Namespace

The sbom_accepted_ prefix is used to designate attributes that are part of the event. Some of these are interpreted by DataTrails and others are guidelines.

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to Release Accepted
Component Namesbom_accepted_componentThe accepted name of the PackageRequired
Version Stringsbom_accepted_versionThe accepted version of the PackageRequired
N/Asbom_accepted_referenceThe reference number of the associated planRequired
N/Asbom_accepted_dateThe accepted release dateRequired
N/Asbom_accepted_captainThe accepted Release Captain (a common term for someone who is responsible for performing a Release; someone like an Owner in Agile serves a different purpose but may also be used if appropriate). This is mandatory as it describes who should be responsible for the releaseRequired
N/Asbom_accepted_approverDescribes who has accepted the planRequired
Author Namesbom_accepted_authorThe accepted name of the Package AuthorOptional
Supplier Namesbom_accepted_supplierThe accepted name of the Package SupplierOptional
Component Hashsbom_accepted_hashThe accepted hash of the component files/installation (per version)Optional
Unique Identifiersbom_accepted_uuidThe accepted unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadOptional
N/Asbom_accepted_vuln_referenceIf this release intends to resolve a specific vulnerability you can highlight a shared Vulnerability reference number(s)Optional

Patch Event

Patches are often supplied to customer in an Out-Of-Band procedure to address critical bugs or vulnerabilities, usually with a short-term turnaround that can be outside the normal release cadence.

It is typically expected a Patch should contain its own SBOM separate to the Primary SBOM.

Patch Event Attribute Namespace

The sbom_patch_ prefix is used to designate attributes that are part of the event. Some of these are interpreted by DataTrails and others are guidelines.

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to Patch
Component Namesbom_patch_target_componentThe component the Patch targetsRequired
Version Stringsbom_patch_versionThe version string of the PatchRequired
Author Namesbom_patch_authorThe name of the Patch AuthorRequired
Supplier Namesbom_patch_supplierThe name of the Patch SupplierRequired
Component Hashsbom_patch_hashThe hash of the Patch files/installation (per version)Required
Unique Identifiersbom_patch_uuidThe accepted unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_patch_target_versionThe version of the component the patch is targeted/built fromRequired
N/Asbom_patch_repoLink to the Git Repo/Fork/Branch of the Component (if different to the latest release repo)Optional
N/Asbom_patch_licenseThe licensing used by the component (if specified and different to the latest release license)Optional
N/Asbom_patch_vuln_referenceIf this patch resolves a specific vulnerability you can highlight a shared Vulnerability reference numberOptional

Vulnerability Disclosure and Update

These Event types are used for vulnerability management. -The first is to disclose knowledge of a vulnerability and the second is to update the status of the vulnerability after investigation is complete.

Vulnerability Disclosure Event Attribute Namespace

The vuln_ prefix is used to designate attributes that are part of the event. All of these are interpreted by DataTrails.

Vulnerability Disclosure

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must set to Vulnerability Disclosure
vuln_nameFriendly Name for the VulnerabilityRequired
vuln_referenceReference Number (e.g. internal tracking number), useful when there may be multiple updates to a vulnerability during an investigation and for referencing when a particular release is expected to solve a vulnerabilityRequired
vuln_idSpecific ID of Vulnerability (e.g CVE-2018-0171)Required
vuln_categoryType of Vulnerability (e.g. CVE)Required
vuln_severitySeverity of Vulnerability (e.g. HIGH)Required
vuln_statusWhether the Vulnerability actually affects your component or is being investigated (e.g Known_not_affected)Required
vuln_authorAuthor of Vulnerability DisclosureRequired
vuln_target_componentAffected ComponentRequired
vuln_target_versionAffected Version(s)Required

Vulnerability Update

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must set to Vulnerability Update
vuln_nameFriendly Name for the VulnerabilityRequired
vuln_referenceReference Number (e.g. internal tracking number), useful when there may be multiple updates to a vulnerability during an investigation and for referencing when a particular release is expected to solve a vulnerabilityRequired
vuln_idSpecific ID of Vulnerability (e.g CVE-2018-0171)Required
vuln_categoryType of Vulnerability (e.g. CVE)Required
vuln_severitySeverity of Vulnerability (e.g. HIGH)Required
vuln_statusWhether the Vulnerability actually affects your component or is being investigated (e.g Known_not_affected)Required
vuln_authorAuthor of Vulnerability DisclosureRequired
vuln_target_componentAffected ComponentRequired
vuln_target_versionAffected Version(s)Required

EOL Event

EOL Event Attribute Namespace

The sbom_eol_ prefix is used to designate attributes that are part of the event. All of these are interpreted by DataTrails.

An event to mark the Package as End of Life.

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to EOL
Component Namesbom_eol_target_componentThe component the EOL targetsRequired
Version Stringsbom_eol_target_versionThe version string affected by the EOLRequired
Author Namesbom_eol_authorThe name of the EOL AuthorRequired
Unique Identifiersbom_eol_uuidThe accepted unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_eol_target_dateThe date on which the EOL will be activeRequired

\ No newline at end of file +The first is to disclose knowledge of a vulnerability and the second is to update the status of the vulnerability after investigation is complete.

Vulnerability Disclosure Event Attribute Namespace

The vuln_ prefix is used to designate attributes that are part of the event. All of these are interpreted by DataTrails.

Vulnerability Disclosure

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must set to Vulnerability Disclosure
vuln_nameFriendly Name for the VulnerabilityRequired
vuln_referenceReference Number (e.g. internal tracking number), useful when there may be multiple updates to a vulnerability during an investigation and for referencing when a particular release is expected to solve a vulnerabilityRequired
vuln_idSpecific ID of Vulnerability (e.g CVE-2018-0171)Required
vuln_categoryType of Vulnerability (e.g. CVE)Required
vuln_severitySeverity of Vulnerability (e.g. HIGH)Required
vuln_statusWhether the Vulnerability actually affects your component or is being investigated (e.g Known_not_affected)Required
vuln_authorAuthor of Vulnerability DisclosureRequired
vuln_target_componentAffected ComponentRequired
vuln_target_versionAffected Version(s)Required

Vulnerability Update

Event AttributesMeaningRequirement
arc_display_typeTells DataTrails how to interpret EventRequired, must set to Vulnerability Update
vuln_nameFriendly Name for the VulnerabilityRequired
vuln_referenceReference Number (e.g. internal tracking number), useful when there may be multiple updates to a vulnerability during an investigation and for referencing when a particular release is expected to solve a vulnerabilityRequired
vuln_idSpecific ID of Vulnerability (e.g CVE-2018-0171)Required
vuln_categoryType of Vulnerability (e.g. CVE)Required
vuln_severitySeverity of Vulnerability (e.g. HIGH)Required
vuln_statusWhether the Vulnerability actually affects your component or is being investigated (e.g Known_not_affected)Required
vuln_authorAuthor of Vulnerability DisclosureRequired
vuln_target_componentAffected ComponentRequired
vuln_target_versionAffected Version(s)Required

EOL Event

EOL Event Attribute Namespace

The sbom_eol_ prefix is used to designate attributes that are part of the event. All of these are interpreted by DataTrails.

An event to mark the Package as End of Life.

NTIA AttributeEvent AttributesMeaningRequirement
N/Aarc_display_typeTells DataTrails how to interpret EventRequired, must set to EOL
Component Namesbom_eol_target_componentThe component the EOL targetsRequired
Version Stringsbom_eol_target_versionThe version string affected by the EOLRequired
Author Namesbom_eol_authorThe name of the EOL AuthorRequired
Unique Identifiersbom_eol_uuidThe accepted unique identifier for the Package, DataTrails provides a Unique ID per asset but it may be preferred to include an existing internal reference insteadRequired
N/Asbom_eol_target_dateThe date on which the EOL will be activeRequired

\ No newline at end of file diff --git a/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png b/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png deleted file mode 100644 index 4528470f288e650469edcd4e01a6fdbe8c1fed96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112790 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�!lw%-?2P_dwbARwS3iu4wc5@oKFaMmXVD_M1B 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 z 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 diff --git a/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png deleted file mode 100644 index 2e7da18f3da5e62d7c837da240372503ba4ed582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3907 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 R`m+E4002ovPDHLkV1gZxe>eaD diff --git a/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png deleted file mode 100644 index c292af1882620a3dc95a7bdefefd8f5b9e7cce3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21298 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 diff --git a/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png deleted file mode 100644 index 0687c9aef4266b05873c527beb6f02abeb5adee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44946 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

T^P;h%+Y8lBo-rATL1ZO40~-*4S99LoK+EnZ&h z^Ok9Bq`QC=RqCb&7OCXSTw0i=Cr$KZ^T!S+j{o14c`V`rqW}QCjD(1w^8c$!FXvse zt`8+Fk~1zK(tYH)U?HD~jREA(cM%M47H1X^Z(i8*dGZIw&kTPr>ByoH#&*uvZ2#ju z&Sm8!MMwRf;6je;$=xr`pI%CVmw1t`>IIz)j@1;O)@Jv!(f75_A5_n+L)#rYy$qNI zrmbmMkzZxB+R0O*Mdx}cq*Nqm&M#-1zu`+f#PdbOc4RC@96_5XaZ6JO&Pc9FOBd;n zV`hhUTm62mh<`3=#sdIzEQIL&X7>t0VRXU%CUh~08L1>ZPjkCb7f*rJCH+I|rUZ48+4>{c| zJT5%gADukkm>k$nlp#adq;b7=&0iv*!SLZD$O48 zRnYcxHocdD0b%ZxwOqznTuYo@5*~CINEf_)Mz3!-c_w3#Sn%H(6->))Q+oQiwvN=X z@nEQx+2y<{ilYgbMi~&eE51K;qm}#%;&ENguG#cuG#8dvJ){<;rI-g;=@V#k2M|B} z@ZTrSmvHoLUv*Uh9NoJaLNVHWRj!PZTm^?f@*!9yVDvU(CTue8iAaSN*jxBDUj3VXuU zP#kk@&SgzSF~YNLu^Ka@bb;E9Yob41m4@k{8iKXezFz#(WHaM)69d%= zt0|mz4o>1wFpbY?W0Rj|NCcXf&ey5Cbu`e2CS$b*{)?{K{be7$1FPNthy*D={*_{@!CIG`t|tbA4(3kTAi5hoy-}isN}#9 zQ*4&Gj9E4Y92#W0I3xY!vl-4gj!IWehOFWVCtzSr_&$ zd~0&TOfaSDN-6P2CT1j2R}LKePJyYC6*JQnas)9RQhw9$%MsGaL*L7~pV>(9FMAk_ z*(|7$mjB?{6W}4^f%>qaYS>*UT3WmdJyH8i!Fdu5`6GQs28 zImng`TfMPl#sDIQfzi_Zv~jOrOdtlXoMrY(xR!aLCPa2aJQAEa41f)X{09c}PsO?x z3x=8&LoCuWa?y(VR}3IQ5?BCktf2k~=AOgO9bLq5fIM8;?_)Y7KZ-Q_z4k-PCmAZ) zl%&oy(IeA3y3>AcF(O1XqUd2%!~a#+Sq8-sbp3vDC&;3~oyFZD5Zv7@xCM6>PeO2K zkpRJiI|O%k4Fq?0S)5Cr=dD}s{cx-1!&KMl?sK|prfTMQ`hT{CXqV^1Z8pc^uZ4`d zh84%_*cwK#+V*3f^95k3Cnb{{t_FPmAGV7vcg89CZqaP0rA(vhuP};+T}D(Z58PUT z#G8{7N7~}bX-dn^r5&#jxR|W%jHah={A0TmJWiO(CeEvq=T+(u1>cny1~OFYq06p9zP;T& zi)~GLI4dy#BdA=Nl96#pPP<=#iT94~0qG>*?Q|lu4(JDu@qT9O>*{69yk}H4e$Bhv zyZiPbBDGom!w7I;Cssx>kPyHww1ask@uq3e)vO4v=>e88#vAkMMr;pjeg(h^&c4UmqK8XRY#M1lF`_ENXz93LO{OU>iLb6n#{jW8@)i%%zghGp;NvD)#ZKrl6-4@XrI>I zM;X5{Ef3HST;z=K>^8#hV{|q6ogLTLs3za9$m-`l8W)~qwyOY4lnbzd#Myla3b}D7ptSKyRp1+)7A1~ySI0aJ%07C zuI+0@X8u1Nvi!51dsiwGZ0PWVo9abW!n|bPV@K)a$DXc`ghX!-GG&Z~Zw5RgC~buC z@svCfzRjoT8L~zWoRA!gh>4s8=B>bOOVbgsAR@FGvQaa%070X(DU5l0bOhFjLRj_p z-!PAACP$MzPj*x6prl@Ba?lP@eqsDUxssFK>X?hJ7*A7Hweaw%xct#5Q(uMR8Pi#i zT9&aQduc|-IGHGkA$se>FcD&lCeq?EFR%z?v};!6SXC-QS+A=5@?8x*d;lkRv5A{& z$4HkjX4r680Y%qPSJp_B(PIf}@$3fpx#MZ6?D)$)P081%TFJ*IZe?KG#R~GV^3K^C6)?~vN<$el<;6|sZH|Z-wae7+vsNEk z##kvbDDQ3hx(vfsD;N71a?K~b5SxOfr@ZXYzsX#)^hJk}g9KTO@Dq8(;F^i$2)W46 zqy&x>XzXqh>}Z;mOgtqI7yq-5R2!U(nyF_NjPCZ`3_l2my1p_M7C>@gxkuFmgMY(t z9wtnaxapN7_aXhc<;5@rn;)H0YNMqn(T-{EC%hnD(**UR4MlsSmQM#M6V;SppFx&T z??^G#q(9kESc=TB;O0mcGW(H-_nPiu8vC6c4~ln=1Zq~6Iol{_?Z}bQclNJI$5pD2 z!U@`37t1sv1fLM6sp4?8f!zBS(xk=~RNIlGHX)HUW@+Jsmpc-+r%uZKO8AE|_1ns% zc4|M#Ski`_MIxgJe&R^{i=nj+d@2c>alr&afK|2eM#)=`=HS9(`<3 z$l{;>#9nf+^T_ox?|G{$9!2bwp)JAZnC>&B&diXao=3QpHOT9Ii_in)X@+Y7BWm9?l4)#V-bMTHSguDqW1-U^|{bww(mwGyI7fYFC05?}QKK2(K0 z`aGet0VtKg`ipUs?nWRWtsiwBEe4;G~|XBY#EJTc&rb4;B%Xam+OPWpFNyFi&k z`kJ}9{{FZd4VeZ7*VAU|$nYupUXBfnvR}qn5GBTz{yLya871F<&#Llj`lYP$ICT`1 ziqqf4`}%DJX})c6jD0jdBMd`YZm;bdf13I|a-!bgW|LFXFm2(II<@c4jz2Cpue0Qm zHeIHsZsTc2X=GwIFHnXV>S|+FoIChy-u}I|4;|9CXMwp}3@v`xV@$LdiXhDek2Cgl zFRFOfa)v)cE+KKmTDj$A(!-LhtP$kRc};c8ZQL##OpOjDHJas@isb5z9-l;BTE9N^Mvpln|W~$zr7l88D3uN3va`WB2FsI4V3}4#h?s{^bml zOUa1HgK(~Tq`CJ>#wEZ1)y50v?U%vM=Nd)w*@i2?;T#g}ps8DwMPRD|<=Qsw)ho(b zBpT{qKHEi0vi7}~z0k!07t80SY?U%zr1`Xu%Q|pxkfJfu_t@>&)MGMj`-{Yo7~qKN z(ATQ2cfy<3%aS?c1oZ+*0%>T#O~!?=o2H1~ToN*=(0ydQ6qD#)H5?gLVEODPtEXxFZX-ME+vv;BY&FT>v|HzQ=>Tqb@JL)b7Fj}+N}P5 z*CeQyvz4SDEH|?}M6+NhoX4&S=Dm+p|H^sSzF3eMQE$Y6683nS?+Dt2u%e!ip{ zT*3~YSEYqIN()1ee=k-ENkhq>iy+T5&-kHPOk&{Fn{`!Vgp+~V8R-YSSK46M)ZEarqQbL^?d?_3lui0m8vnvzn9Kev-zt-N{l@ON&oe`< zGQW;4GGds3uN?i4L77KEA)0w){Ty%kYDt{zh7$Ky~sn> z>Zkg}(+0wN-PsA*k`kS?IN4Xt>yPArOQ_iJkivR6Ih?!R6TCkf0V$k>eyj!6_Bl)f z50U&WGgBg?n4O^k&Y|!le{4NV!49KNZfP8GY&W3tF0<*wsE7WySFKzg_ri&G`J12> zzsRjFs==Bn4W+ZZEmoR?hlh*P-VKh!d>YRPO2ff6LqXkptrOCZNpnVy+VVG`Xhr+U zVG%7Spe`!4A*RR&tZ?;{21c_D3nit3kmiGSc{*%Z3YPEZmYE+LzlTrE%swf`;_S zbzgKFTX%Th2l&Rc4d%tp%Hj}ZQCI1PP+Rarc64E9aL!&LS9H8wWrF%&D)``ykWR9j zIawldDUi{7Z0h;0RY;IpM?ijgXyVj5I{iP73Ml3X?~ZzN#EvSnYOJ{yM4^8-;*%_haLjL($RR%s&=Gat zTHdZkLiDPC-H}5aIS5V5`C;_EU9w;R!qb@nLtf^2YajlZ)g^QS>@Cw|FF#lIpLr%k zl27?hQ{Qhm-!iQnK!w!)GtvslTX*KzTdQ_W+O{RRVds49NYaH8;catY>gC5w*8k1{ z`zB8~>EDNF)<}0T z9kk|bs-XPU|8eoz+DHVS(xFS=C7?<=pfM2){?fiAbqiL7%VYZIUh_$(s4i2yLHxUt zQ?_qTh?H-Q`wj30|7(H%If(_oVs?(V@i_{+^8)J+*+$`X2oO$*7+i$nHS%c^{XcPV z5t^=4?AmT*{h1Nrco}9BLqZP@BA=D(P?hMKNRW6NW%3dEElgTzz#mB+8bD=v@*DK+8VO#52v@m+yv%`2{@Hk~^L{o~0_uK~L@QH(#=!9#XZXsOFnvohnD!sJEM! zgp5VW?~f+d60cQ+ZzL*}F?&bcq7RTC@Z05`CGrmS=wHGF_USjZN}z&MUMVbbwuaPAdo!L3pUn$KkwvxF_KNCViG^nc*P` z;sC+8d$7?<6rEX9z05(yJNqO^;y}UT#5GsPGQ}R}vX|hD0MEs9zx~AX>yffFZEqfr z6W6UCf5M}7pmy)%Sv_dNP_e$~O6-AfyBOp0V`wp?yW5%=sC2kPZ~ZOsS`(xY?4i8a zzNz4I#7F9)Qts=`FVGvIKyoWt+G@^!v-Dk+|GjmXMn}wdnh0S{CMKD$^xtedqMlwr zhjT-t#lHaX8_tCHS|Tqa2<_}E^)k(8O*ADEBZ}KzcB~kCH_7G~XAU|h0>%``Yy6oJ z)!ogYzM^A3-vOex#YXFi(&(d?JfS~Zqid;Gf^lyhf!MS1tPIwKM;bln*47WZ?m)te z1(K)i)Z2G-6B5OIXfMA$raRf{J2}1Whci73eY{h-j*$q}P-ARgKQ=tldhJbwZd?E( zgN534Q3hT_>3kb|^2;gr>!6*F1EUuM1K6^>TW(k9#|Nxvpr2Xhu}~##B9M46INM1J zKVq_!0H?EL_)dc!2UY@0Oy7@D<<^f2CaqTtLbP|qhf8ew&aRIh3_FC(!gGnle5OSK z4_CG{t?AqJH6p=YT1YCx+Nk;jhT#5L+&2rilKET)j#*H>+SgpEc!U1+iJ2umRwd5F z#~Yf~QxxJ3@4+iFYsfj{;p!`DQ)0WK?RYBWdft7UP&>}fU0+x4W5my{wJ{5g-htv^ z4pb=aq4g}bf5Z4(EUUQdY#REO&~RUI+e`{|WQ4r#n!HlCx2a=%_{2JumYwnGO$In1 z8#7w;#fiSBbbGb$#}YG7lHQl#G;k-okgKQM)UMa5Z)eLIu)|_K5>WL}xg6bs30m3&!$u-#;Vzit(*FD& zG#^;XOsz>u*n&s)kr5i$`jT4u*^$iq1m2e0GLOS+=0U#pi8OX{z2a$5WDGDVc2^|k zjuQ>4ZBtM8o7HW`sBoN`p5)`p{}zk^!M2( z>TR4qPRE1tjBht?4r^p@)7W)NX|jLO`E#WO>aNRsgc!x}wG2kjD_r1aV{?$+$D8FU z$1>GMsVn){r#~%kNY?z=C(A4H$!ANi9Q?`*jqN%1z0oqF(tGiH7KkN5_y8`WHrhx^ zwO~N%w1^XctZQ&D=&(dj6ovA)PX(btOgP~4j?rLZKJ~2>OoxUpR({rW%Q;TuI);=2 z$>B|1;zhH%=&h%b689bXY^m5zD!jfmcw3mb;>JP?=*RAwT!>}k##8rUB*MQw)P;hN zy&bseVQKFtl6x-~<3e`wUMx*Ygod~Bf6GNbb3@it|hBMT->jb)jy;oqV@pmeMK@hF_PZ!k6#e>F=qKjH%(${`N&LR0Cw|bkEV${ z+^(mJYsU{%o9?f|l)Dl3??V;Cz8#uPo}Kn*qrwqjM=(k8LPT3}{5hPj{| zxms(D`W&BgcRrHgSYFO;PDT%sU6{^L-hc#bZT8-_pCR zv|dd&=Yp!@*Nu_S`M)jibqDeec`Meu)hT#K-F-`?9T9m0(8!&Y>JiAS$VwCthO?LB}%!4;!mzliwiVyV;HS6pd_@brQ= z0&_Zc-1W>T2*Cts zL65u1dd#$L(+XBj{9DpUI*ZGvel4K3tllTqX5ppd%SpHA4&U9l;u>uy7vA|~yU|o5nm zl0hNEfUjZ#gN)qh`!Fe9Mx%rLO=kKaOyWv)!DkT>XJ0B&sDqz{*OHwQuQz30@f`i@ z+15l&jO(H+Ar8to8(mZ1ecI;m1Mz#Fs_!}k2g^Hn>Dzb0vST7pFw|1$ImA zZU0uw2R=Q`Mw94UI3BK-76rbJir?)3&#>ZmvV~xoiBtxN}`zi@s7J?N>Nu! zGLhITem#8ELSMYuc{BvADCKvgn&?nao8#sH>CnWxod&{-G3Cp};MqT{oaEKGcC_tX z(z*h-ZYOEotnjdHYcV?No7D7)8~Le&1bmV)Fmyw2sp8qi39~HkI?oeNuUCDWUP|(Wifh~MX zZK~?bu?nk&aeFFf2JO2fg%$Wz{n7jF-nZdUC6MJWBxxS|R*#jTEw(v4f};oCn+|)r zIX1_yD;J$#$!2w1Ydz)?#A^7(aC2ZXzq8T_yhc^JE6r3`8Kf3Ae6A4ouXD2fT@*X- zXsfrCkr@HMS1>=_&~RhEV#L}aXYa)-qXP&kW5YrKC@PP^bt)mceP)R+aj>A;SXv`m zTWM%+8b$$Re7F(P*M5)S6id$Lni@$upNRC1$o>yrgpc1uZ^MawV;Sq$S0nf6i=5m%1llZN9GKNc6kfm4uNfi|)<18A=;886QD?qMhf5*PS* zHH*rWpB!Oi?2%ut_Ba9G{X}r+>7Kys7(nmZ!GL<|ImXQrZa>3bGG>UQVY}2e;VQ(m zB~Kz9oBU|_xIE$HH;x3#(-v2^CvL;4IO%&i{}=FS%qFy|gA={VQNaUZQ1oIR>`{DS zgt-}a7QG)K5f9qA(WjznztHHJigjQ{bVV6*8Nn-zn@9y;@~M!ofG09hH3zF}M4-p_ z+bNqmE&cTL_<)>_aYT(PWB;8J`+%fj+U3iBH}uze-!MzJnBi|K0T1Gy>xxe-ZrH%$ z^2#|q!vYJsYfnFPrFXY(1>_}MCiGfPiOPa3iQD#C=soHeKlC%Qwe1sex!y zMqts$RG73Vn&P@OL4Y7dWeZzV4}t+mLUM&YxjF~>$0@!Dob2JK*l6L$*t!v%kL}NprUm} zyXkuOnF%<|8O?`$iyz-Pk{t>@9uWw+!FH;lx1{-(J7c1Bqfm@QA_E9vZ~2Qc=yJt8 z3Jh`?;y-1Z9+OXH^m%w0Cr3V(0~XypPZ2w}T}k7wkzcZwan z^zWW+b`4gF>BBTs;QMaxm*W9mf}m93ofTYrTdJZ}?}w!4miEyu=YWrdu=8ny?*xWk zfRCCchXyMLi`>w_=9yRQQAnW?PlS5}l*??#H8mS~FV{{!)<{sjG^MP+?|CN8$)gA% z<9dYm+LruGJ5ODLA%3^kW`l};W|@!eGO$G&HAuF$d#9EXKgPEbMnG`F$W42x$n}O6 zVyqW~u-IMqfeM-&_ueoc1I`vPHDzskgF)6U_v@%iBT%7JVqA^pv5_<)bnn2+g=Y~M zt;QT0A~6+5u_!6XLMiv*fOl4Ct<`~&+?+oI01p!qCqEURHf5bH)cxsRMqJqB;rz(@ zN@5WrUu`JNq*j_Tq5DGc+IQ6d77{ff&d(HQeFgq_3` zA+7@*P9uC9J0yc!Ht@Icy+Ek5Lp&dwwG+4Eke~+1v5`Q)LKzYF1B;nmmcfjj=n0X`ZW%sss zJm)gwG08mhJNsopsTd(pGm2fM-O-@HgEWGuv5aNnkTI!%Yqp7d+=J?3pVBFQ2x5xa zp2swoD1ot#*U7Jqg450RtkpLa((ZyYjcQ6ji!xzQ6`#>F;#+GfI0^%)+*0u+8vIYwU4K|8~<@eHN{4dTW_Ry>T z2Tpp4{$DtG{aBnJ524}~B>VnuqF><+PEKUr57IY~`ku~`FEM`md7%qTCDm^8oY)o2 zGuGSn#Bhfysyx;@F(*e(d%I<3Y<=BPO)x^mvpO6BZnz~za)pw9Kiq{Kc&c!bpi5ST zZ(p_;48wTjeg-W|OxU%8Fa ziL9DY-l|Mn6D$_;t)@o4PNtDXyRmt&qJ5*xeBG;_tDaayypSFR; zMYvZ_ceu}cPcSkh$oSBue(=^IyEut_rQps?V9}~`zIX_P@(KT(< z4KQHtwMT0r*iEIwyDygRGq>M1R}07v1F^wx6Z(b`8JNY1j6}P2@5XI{}SXpC?yYka)s(@~%$nLys89>9T2eADGW zjFeNOZ7GDs&Pv}PcQ*E=;cptmE6nR!&i0xP73XE9xIuh+hkI@Kg-ABC4|F`}z?!s6 zCXzllIB6P{VQkTtaV*=%smRR_EhX?RVJa=haW1w=U6#tqJt!tRQ+@1c6aF<1ZZrs;ih8AR#E+nABQK{fs+r z(Vd+=+`v|oaeY_DSNk(1oocZf_yR#16K9au#jeeNWS$L0x$$)^m47k{diDsk z+jfm+LXEwzuYfQv**=i!w@0-Q4@_)#3g22 z8P!%fL|#zW6kw@V^Y{E_M@((DXCfe|LnN6Wdsmu(znB<0@Ed^E57z`hlTfpwWLhoh z83>Z}C~ZJ6I$4SZUmS`_scrihgZwj$OPxG8#>vk)*UFyrR$}UDaw+3`A`SK7SM$#$ z;)IAd(7c}QXm5}8n_xSXgOYD2Wb!r&4i*u9f>+n;mI`zXcsBRl47 zd8H)9a790~g@n$}R?o`HeF3uIv4{Ud?#pJ`(9iKoGzQ2=m6B`ePX|vH?t7UAb&`&v zaU4XNI=lVm7dBKvA}#D9Ex+6Zch0V1Nns=y2n`j($$#6oxZI1&6maQ9%4^nDI#De* zxRoXu>noxLcd8$akMSaeS2gv0_~m1ep_KEhv?l9})Khc*_n?F3u3a&s))l3?6Wd#r zZR^=#m+~npS^%v^5XN;$<)vIwMIp%gN#n>ZqN!IAnG=8rm^^tM@&CeNv)TmPIYsECK8tEq&+*}TKfva zax!@=pPDYDZ27}U{f0cA8uK|E>;nPqy*?i0Br)D@ToB}WSwyP_BmiskV(qpZil@#K z>`=2|y}O_W^Xy)1QG^jVH1fcH91kjyj8qVKu_3va4z0tYVc7niwejxDm#{-iDPT!g zFC67XrCos?jy(@W82(ofi&|-q90{!p@MFCEifao>h~a%-L8rchBqSC?;XJm9mX+}V ziM(-D!VYf%gi93bhJtXhIKsvT0`8x+IV1Mx_K;9c( z$@rSe-I?5QZtal4?(L=uz`yD;%Bd}Y6c;)e>h#|*NP8T%bEMVqr(EcL7qYHk6xR#FI!g&n(kF(leQ8ku;;0AJ_llpt_StGcjn5fB{58}*;N343DO_z=tDm#=0{&Tw zzseI=u}m{AWt~sV(e*v)_ZZx~?$pe$X{Z@CClwJJEK#J@PSj)lVxw7^u=?=B|2^jc zGV>4%)`BR~6dBHGX_?ZmrR>qR%_ zksn{lC(8)Wtv8hDRwfZMx9^-uF^OZga+$K^aCabZOBE}sPAzBQ9n)!s5)-#!m|~8i z=$9$Vd-i3EUmQyfD1`+NlWzZ>?59D{G*C($i}2f&-5g)dDGb}ydYZ*y@KIYb z9N-6ro60!n33dQzOo81Z8ga>-?xiS0(}=A(WL0{B?*u7@__4eax6k3&`|&$++~qe! z$gK*6uiimT>)oYRi{y0+5h^6`U&6x8zi>6o8NYodoN^bC_=L&Ckp^sE&b%$WCogLXK2!XMP_XLEI`PYr zccxZHAtm`R2FYPyMW^k*E?xieM}No^ZT`Q^N!(>e1tDg6D<5-$MnUz? z#q%Ha@gXJGm_jr&qiC9+ORM_H1nJ8SX| z+w=XVu;22;s*Ysa#L#~uwfc`Eky1!U`t9Dd$iD0i(p(?F{2bHK}jDM>%8QAtp d4gkEq1`2N)IOp*azEv9p$Vn+nR!EqJ{2#RO6vqGn diff --git a/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png deleted file mode 100644 index c27a88573157be3d5504ca73295d7cc4acc6a6d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52017 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

mS8pb45FleB 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 diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails.png deleted file mode 100644 index e7e7976168ff72d4fb471aacae31ceb292c28c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54919 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 diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_100x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_100x0_resize_box_3.png deleted file mode 100644 index 869c18ce5fd050839840199fef1db2320f87a031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2121 zcmV-P2)6f$P)_-l6JNNiC_QRuAvl&;8mFhK++@P4F97v*A~;B!VR?miz{W1q&7|hyWrS zEQrQ{?KZOA-ELW}p@uu=oWxa?B^!*b4&2Ce>)Yrm?KXK07h5%B7_hr z#)vU`*`E9tz*_er()9fw{OJC>A6(oXWAu|B|1gpAMI`Ipy@zkz-+QW$Xl>5P`svSp zvAMMooKLfCT2@<|lf}v7uEklAwr%tEyRZD}_kX%Q88M7zwPFJP|CPHpcDA0)UY>F7ix1eD6_2K}vaiG+SDt(-ycQ>-BHEzI^zr(r!dA`2y09qjgwpl7A%ut!B8)}vh2SVgZQZCCEaoM`*jYPT8#~iO2tgUI$}-QBMcE=0 z8Dkg)Wjp{3GFewmnrAU0?~IV?Ke+v+!&kn_-YXNa*vh~fcy>jc5MrB#P`PaQ- zG-}F{Cc85et`t~=UX@Z=S^(_C(bAoeGy3CF%{3|Rc!WCJM_76B9%o9L8 zYl5?4m@i*7P3wF(`}IY}#|l11V_ftQVqgTfZFk0wbC&YtGJX8YU`3X5evl^GM}`T; zcztbrW>FNy<+=CO!m8aC!$GGMU}Rl5UAQV?pMh03yejaY4*-1L4XtzHR6v9f+D>Iz zdUhV@oO3?lUdJNNs1E@MiQaeG5P)7N;?uUun0MCs06?U8KDEe-the6Yi!l(!*T#iz z7PBsr=x*P-IWDrQuJ;d4v{HnLn_I<)ht;kBy?+1gz3q*m)~IrR_uBBi2OkY3lm;Zj z+uM`pm8?}7YHebSgb)lE#TX-sF;L0?urby--;a_Q62Y7ggp%NW2oV5I4f`Rc54X@S zB8;Wrm%XnqALk1Gs%CvYK2@`hr!&F0b~jb$xO&CG`0$SXa{FqWDxAUR@nt1S_)c{pJ2}kRk6~ z2$-!I%6!OFdF7Z(@HQrtJLk?&FQSv#xh1n#o+jO zW{gV*S#X9@-d5$-&d&7ca4=q*%@@TWuj?jw#|0;Z;pkgs*4IXhvL*z)a|rkHZJ5i$ zX_Zh^YtJZTQbdGr?oKX|tW_E=7FE-!agi^o24gIx^vM1;~rXl*Ir&NxQFhd9hLO37t0b)mz*>1=*{QmU@8k-T>IrMKU?FJuNd zHcd5~HNfS~8TogLQt{y7Lqt+e zLX1&qD;RDaq^!@O5Q1`n5h6Lgv9oz_bkel4s#?OR?mCF^)mLAB^PL9>#nB-3-bo=T z!S63ho);{X2#91b7!98s&3tgT21)@%V;!Z$ST6-@nwBvZQJ*yk zgEmHT7JLMPmnwx4AOIMMbJqL5dk_F2x$1P5r)|?wMy;^{A=2wPj4_TeI`8u=<(KhI zmaB2+qWF}~Iy#v}XEOHP;LPTjP_VwgOSgQJit28`3JV~?ETI)mKL_VuhzUVkl!>VZykEcusL7}SP zimcDXRe`?{t_JC+26fJP@8VTpT>yU%00960oqehweLjs`00000NkvXXu0mjfAyXgF diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_200x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_200x0_resize_box_3.png deleted file mode 100644 index faef9487f0fb5aac2e06c8a6404eb1227dc87c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5679 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 VuYfm8y+{B6002ovPDHLkV1nEk0d@cY diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_500x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_500x0_resize_box_3.png deleted file mode 100644 index 6eb318ef8c0d45f8940bfb487bc9a0bb480526f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22438 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 diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_800x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_800x0_resize_box_3.png deleted file mode 100644 index 530ac037532ab415c485512eb42e1b4bf504b9b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45411 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 E0akB6EC2ui diff --git a/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_900x0_resize_box_3.png b/developers/developer-patterns/verifying-with-simple-hash/SimpleHashDetails_hu57fadfec7755f009e69702bdc2a8800f_54919_900x0_resize_box_3.png deleted file mode 100644 index 7be01b5f779287327e6748b3c7c6387679e2447b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48301 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

In the next section we look at a specific type of Asset, the Document Profile Asset.

-`},{id:8,href:"https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/",title:"Archived: Verifying Assets and Events with Simple Hash",description:"Ensure Asset and Event Data Has Not Changed",content:`

Verifying your Simple Hash events provides an additional layer of assurance to your data, so you can ensure that the information you have in your hand at a given time has not changed.

-

This allows you to check for yourself, and prove to others, that any attestations that you made have not been changed since they were recorded in DataTrails.

-

To verify your data, you may use the -DataTrails Simple Hash tool, available on GitHub.

-

Please note that with Simple Hash, Events are committed to the DataTrails blockchain as a batch. Events with the blue tick have been committed to the blockchain as part of a batch, and will have a Transaction ID. With the free tier of DataTrails, Simple Hash batched commits happen every 30 days by default. For Public Assets, batched commits happen each day. If the tick mark is grey, your event has been confirmed in the system but not yet committed to the blockchain. Your event(s) must have a blue tick for transaction details to be available for data verification.

-

Step-by-Step Guide for Using the Simple Hash Tool

-
    -
  1. -

    Retrieve your transaction information. This will give you the inputs you need in later steps to check the hash for that batch of Events.

    -
    -
    For Public Assets, retrieve the transaction information from the public view of the Asset and Events, or from the -Public Assets Endpoint.
    -
    - -
    -

    Select Audit/Filters from the sidebar and select a Transaction from the Events Overview List.

    -
    -
     <input type="image" data-bs-toggle="modal" data-bs-target="#AuditSearch" img class="img-fluid responsive" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" data-sizes="auto" data-srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" alt="Rectangle">
    - <noscript><img class="img-fluid" sizes="100vw" srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" alt="Rectangle"></noscript>
    - <figcaption class="figure-caption"><em>Audit/Search</em></figcaption>
    -
    -
    - - -
  2. -
  3. -

    Use the -DataTrails Simple Hash tool to generate the hash of your Events.

    - -
    -

    Use Python pip utility to install the datatrails-simplehash package. This package is supported for Python versions 3.7, 3.8, 3.9, and 3.10.

    -
    python3 -m pip install datatrails-simplehash
    -

    You may then use the code to recreate the hash, using your -BEARER_TOKEN_FILE as the auth_token and the start_date and end_date copied in the last step:

    -
    from datatrails_simplehash.v1 import (
    -    anchor_events,
    -    SimpleHashError,
    -)
    -
    -with open("credentials/token", mode="r", encoding="utf-8") as tokenfile:
    -    auth_token = tokenfile.read().strip()
    -
    -try:
    -    simplehash = anchor_events(
    -        "2022-10-07T07:01:34Z",
    -        "2022-10-16T13:14:56Z",
    -        "app.datatrails.ai",
    -        auth_token,
    -    )
    -except SimpleHashError as ex:
    -    print("Error", ex)
    -
    -else:
    -    print("simplehash=", simplehash)
    -

    Run your Python file to return the hash value.

    -
    -
    Note: SimpleHashClientAuthError is raised if the auth token is invalid or expired.
    -
    -
    -
    -

    Enter the query information you copied in the last step and run the command. See instructions for -creating your BEARER_TOKEN_FILE here.

    -

    Commands can be executed anywhere using a virtual environment and published wheel. Credentials are stored in files within the credentials directory.

    -

    Using an -auth token directly:

    -
    python3 -m venv simplehash-venv
    -source simplehash-venv/bin/activate
    -python3 -m pip install -q datatrails_simplehash
    -
    -datatrails_simplehashv1 \\
    -    --auth-token-file "credentials/token" \\
    -    --start-time "2022-11-16T00:00:00Z" \\
    -    --end-time "2022-11-17T00:00:00Z"
    -
    -deactivate
    -rm -rf simplehash-venv
    -

    Using a Client ID and Client Secret:

    -
    python3 -m venv simplehash-venv
    -source simplehash-venv/bin/activate
    -python3 -m pip install -q datatrails_simplehash
    -
    -CLIENT_ID=$(cat credentials/client_id)
    -datatrails_simplehashv1 \\
    -    --client-id "\${CLIENT_ID}" \\
    -    --client-secret-file "credentials/client_secret" \\
    -    --start-time "2022-11-16T00:00:00Z" \\
    -    --end-time "2022-11-17T00:00:00Z"
    -
    -deactivate
    -rm -rf simplehash-venv
    -
    -
    Note: If you are using an environment other than app.datatrails.ai, add the URL with the --fqdn option. For example, --fqdn "app.datatrails-poc.ai".
    -
    -
    - -
  4. -
  5. -

    Compare the hash from your Transaction Details to the hash generated by the tool. If they match, your Event history has not changed.

    -
  6. -
-`},{id:9,href:"https://docs.datatrails.ai/platform/overview/registering-a-document-profile-asset/",title:"Registering a Document Profile Asset",description:"Register document profile asset",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

+`},{id:8,href:"https://docs.datatrails.ai/platform/overview/registering-a-document-profile-asset/",title:"Registering a Document Profile Asset",description:"Register document profile asset",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

As it builds on the standard DataTrails asset the same processes are used for Permissioned Sharing and Public Attestation.

@@ -2202,10 +2051,10 @@ The Trust data:

The Advanced Options tab is where you enter the Asset Attributes that are required for all asset types and also the optional document profile asset attributes.

  • Document Type - This is the class of the object; while it is arbitrary, it is best to have consistency amongst the type of Documents you use i.e. if it is a purchase order, the type could be Purchase Order, which will then be pre-populated for future Documents to use as their own types.
  • -
  • Proof Mechanism - The method used to commit the blockchain transaction.
  • +
  • Proof Mechanism - The method used to record the transaction to the DataTrails distributed ledger.

Please see our -Advanced Concepts section for more information on the Proof Mechanism for your Document +Core Concepts section for more information on the Proof Mechanism for your Document

-`},{id:31,href:"https://docs.datatrails.ai/developers/api-reference/locations-api/",title:"Locations API",description:"Locations API Reference",content:`

+`},{id:30,href:"https://docs.datatrails.ai/developers/api-reference/locations-api/",title:"Locations API",description:"Locations API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -18623,7 +18472,7 @@ If you are looking for a simple way to test our API you might prefer our

-`},{id:32,href:"https://docs.datatrails.ai/developers/api-reference/public-assets-api/",title:"Public Assets API",description:"Public Assets API Reference",content:`
+`},{id:31,href:"https://docs.datatrails.ai/developers/api-reference/public-assets-api/",title:"Public Assets API",description:"Public Assets API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -19459,473 +19308,7 @@ If you are looking for a simple way to test our API you might prefer our

-`},{id:33,href:"https://docs.datatrails.ai/developers/api-reference/system-api/",title:"System API",description:"System API Reference",content:`
-

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. -If you are looking for a simple way to test our API you might prefer our -Postman collection, the -YAML runner or the -Developers section of the web UI.

-

Additional YAML examples can be found in the articles in the -Overview section.

-
-
-

System API Examples

-

Create the -bearer_token and store in a file in a secure local directory with 0600 permissions.

-

Querying Blockchain Status

-

The archivistnode endpoint reports on the status of the blockchain.

-

Query the endpoint:

-
curl -v -X GET \\
-    -H "@$HOME/.datatrails/bearer-token.txt" \\
-    https://app.datatrails.ai/archivist/v1/archivistnode
-

The response is:

-
{
-    "identity": "quorum",
-    "blockchain_nodes": [
-        {
-            "validator_pubkey": {
-                "kty": "EC",
-                "crv": "P-256K",
-                "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
-                "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE=",
-                "d": ""
-            },
-            "block_height": "38773",
-            "connection_status": "REACHABLE"
-            "genesis_hash":"0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
-            "state_root":"0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
-            "timestamp_committed": "2019-01-02T01:03:07Z",
-            "timestamp_created": "2019-01-01T12:00:27Z",
-            "syncing": null,
-            "peers": [
-                {
-                    "validator_pubkey": {
-                        "kty": "EC",
-                        "crv": "P-256K",
-                        "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
-                        "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU=",
-                        "d": ""
-                    },
-                    "connection_status": "REACHABLE"
-                },
-                {
-                    "validator_pubkey": {
-                        "kty": "EC",
-                        "crv": "P-256K",
-                        "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
-                        "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI=",
-                        "d": ""
-                    },
-                    "connection_status": "REACHABLE"
-                }
-            ]
-        }
-    ]
-}
-

System OpenAPI Docs

- - - - - -
-
-

API to manage an archivist node.

-
-
- - - - -
-

- -

-
-
-
-
-

get  /archivist/v1/archivistnode/archivist/v1/archivistnode

-
-
Get information about an archivist node
-

-

Description: Returns the identified archivist node

- - - - - - - - - -
-

- -

-
-
-
-
{
-  "blockchain_nodes": [
-    {
-      "block_height": "38773",
-      "connection_status": "REACHABLE",
-      "genesis_hash": "0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
-      "peers": [
-        {
-          "connection_status": "REACHABLE",
-          "validator_pubkey": {
-            "crv": "P-256K",
-            "d": "",
-            "kty": "EC",
-            "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
-            "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU="
-          }
-        },
-        {
-          "connection_status": "REACHABLE",
-          "validator_pubkey": {
-            "crv": "P-256K",
-            "d": "",
-            "kty": "EC",
-            "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
-            "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI="
-          }
-        }
-      ],
-      "state_root": "0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
-      "syncing": null,
-      "timestamp_committed": "2019-01-01T12:00:27Z",
-      "timestamp_created": "2019-01-01T12:00:27Z",
-      "validator_pubkey": {
-        "crv": "P-256K",
-        "d": "",
-        "kty": "EC",
-        "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
-        "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE="
-      }
-    }
-  ],
-  "identity": "quorum-0"
-}
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Response ParameterTypeDescription
blockchain_nodesarray
identitystringThe identity of the archivistnode blockchain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to read the archivist node’s information
404Returned when the identified archivist node does not exist
429Returned when a user exceeds their subscription’s rate limit for requests.
- -
-
-
-
- - - - - - -
-

- -

-
-
-
-
-

get  /archivist/v1/archivistnode/archivist/v1/archivistnode/block

-
-
Get a block given a block hash or block number.
-

-

Description: Get a block given a block hash or block number

- - - - - - - - - - - - - - - -
-

- -

-
-
-
-
{
-  "difficulty": "0x20000",
-  "extraData": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4RDW4QfD3cYx...",
-  "gasLimit": "0xb2d05e00",
-  "gasUsed": "0xf426",
-  "hash": "0x5c6726d7570046c6c4b20e97de1486877f293ba1e4d3b64c13b671354c2f8266",
-  "logsBloom": "3078303030303030303030303030303030303030303030303030303030303030303...",
-  "miner": "0x0000000000000000000000000000000000000000",
-  "nonce": "307830303030303030303030303030303030",
-  "number": "0x1a95f",
-  "parentHash": "0x5fb3e35418f67379dbb2093d4886409ff8e530116628aee7c960e18f2fa9f40c",
-  "receiptsRoot": "0x8bde93a8260d39fa79b76b8c5c7fe687669ba17c63928c4d8e55bc8fcfad04ee",
-  "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
-  "stateRoot": "0xb1bf30baaed044489b769f4bc557594f74e917b297b79ebe88102a856490cfc4",
-  "timestamp": "0xf426",
-  "transactionRoot": "0x5d912ec4fd96825fc58e75401d9834e94bf2fd8f01e50d6946831a60ec1c2040"
-}
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Response ParameterTypeDescription
difficultystringinteger of the difficulty for this block encoded as a hexadecimal
extraDatastringthe “extra data” field of this block
gasLimitstringthe maximum gas allowed in this block encoded as a hexadecimal
gasUsedstringthe total used gas by all transactions in this block encoded as a hexadecimal
hashstringthe block hash
logsBloomstringthe bloom filter for the logs of the block
minerstringthe address of the beneficiary to whom the mining rewards were given
noncestringhash of the generated proof of work
numberstringthe block number in hexidecimal
parentHashstringhash of the parent block
privateStateRootstringthe root of the final, node specific, private state trie of the block
receiptsRootstringthe root of the receipts trie of the block
sha3Unclesstringsha3 hash of the uncles data in the block
stateRootstringthe root of the final state trie of the block
timestampstringthe unix timestamp for when the block was collated
transactionRootstringthe root of the transaction trie of the block
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ResponsesDescription
200A successful response.
401Returned when the user is not authenticated to the system.
403Returned when the user is not authorized to view the block.
404Returned when the asset with the id does not exist. or the event with the id does not exist
429Returned when a user exceeds their subscription’s rate limit for requests.
- -
-
-
-
- - - - - - -
- - -`},{id:34,href:"https://docs.datatrails.ai/developers/api-reference/tenancies-api/",title:"Tenancies API",description:"Tenancies API Reference",content:`
+`},{id:32,href:"https://docs.datatrails.ai/developers/api-reference/tenancies-api/",title:"Tenancies API",description:"Tenancies API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -21044,7 +20427,7 @@ If you are looking for a simple way to test our API you might prefer our

-`},{id:35,href:"https://docs.datatrails.ai/developers/yaml-reference/story-runner-components/",title:"YAML Runner Components",description:"Common Keys Used for the Yaml Runner",content:`
+`},{id:33,href:"https://docs.datatrails.ai/developers/yaml-reference/story-runner-components/",title:"YAML Runner Components",description:"Common Keys Used for the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21106,7 +20489,7 @@ If you are looking for a simple way to test our API you might prefer our --client-id <your-client-id> \\ --client-secret <your-client-secret> \\ <path-to-yaml-file> -
`},{id:36,href:"https://docs.datatrails.ai/developers/yaml-reference/assets/",title:"Assets YAML Runner",description:"Asset Actions Used with the Yaml Runner",content:`
+`},{id:34,href:"https://docs.datatrails.ai/developers/yaml-reference/assets/",title:"Assets YAML Runner",description:"Asset Actions Used with the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21226,7 +20609,7 @@ If you are looking for a simple way to test our API you might prefer our description: Wait for all Assets in the wipp namespace to be confirmed attrs: arc_namespace: wipp -
`},{id:37,href:"https://docs.datatrails.ai/developers/yaml-reference/events/",title:"Events YAML Runner",description:"Event Actions Used with the Yaml Runner",content:`
+`},{id:35,href:"https://docs.datatrails.ai/developers/yaml-reference/events/",title:"Events YAML Runner",description:"Event Actions Used with the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21326,7 +20709,7 @@ If you are looking for a simple way to test our API you might prefer our arc_display_type: open asset_attrs: arc_display_type: door -
`},{id:38,href:"https://docs.datatrails.ai/developers/yaml-reference/locations/",title:"Locations YAML Runner",description:"Location Actions Used with the Yaml Runner",content:`
+`},{id:36,href:"https://docs.datatrails.ai/developers/yaml-reference/locations/",title:"Locations YAML Runner",description:"Location Actions Used with the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21375,7 +20758,7 @@ If you are looking for a simple way to test our API you might prefer our print_response: true attrs: director: John Smith -
`},{id:39,href:"https://docs.datatrails.ai/developers/yaml-reference/subjects/",title:"Subjects YAML Runner",description:"Subject Actions Used with the Yaml Runner",content:`
+`},{id:37,href:"https://docs.datatrails.ai/developers/yaml-reference/subjects/",title:"Subjects YAML Runner",description:"Subject Actions Used with the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21485,7 +20868,7 @@ If you are looking for a simple way to test our API you might prefer our print_response: true subject_label: A subject \`\` -
`},{id:40,href:"https://docs.datatrails.ai/developers/yaml-reference/compliance/",title:"Compliance Policies YAML Runner",description:"Compliance Policy Actions Used with the Yaml Runner",content:`
+`},{id:38,href:"https://docs.datatrails.ai/developers/yaml-reference/compliance/",title:"Compliance Policies YAML Runner",description:"Compliance Policy Actions Used with the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21519,7 +20902,7 @@ If you are looking for a simple way to test our API you might prefer our description: Check Compliance of EV pump 1. report: true asset_label: ev pump 1 -
`},{id:41,href:"https://docs.datatrails.ai/developers/yaml-reference/estate-info/",title:"Estate Information YAML Runner",description:"Retrieve Estate Info Using the Yaml Runner",content:`
+`},{id:39,href:"https://docs.datatrails.ai/developers/yaml-reference/estate-info/",title:"Estate Information YAML Runner",description:"Retrieve Estate Info Using the Yaml Runner",content:`

Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

Click here for installation instructions.

@@ -21532,7 +20915,7 @@ If you are looking for a simple way to test our API you might prefer our - step: action: COMPOSITE_ESTATE_INFO description: Estate Info Report -
`},{id:42,href:"https://docs.datatrails.ai/developers/developer-patterns/",title:"Developer Patterns",description:"",content:`
+
`},{id:40,href:"https://docs.datatrails.ai/developers/developer-patterns/",title:"Developer Patterns",description:"",content:`

Developer Patterns

This sub-section of the Developers subject area contains more detailed information on topics that cannot be covered by the API or YAML Runner references.

@@ -21546,7 +20929,7 @@ If you are looking for a simple way to test our API you might prefer our Software Package Profile →

-`},{id:43,href:"https://docs.datatrails.ai/developers/api-reference/caps-api/",title:"Caps API",description:"Caps API Reference",content:`
+`},{id:41,href:"https://docs.datatrails.ai/developers/api-reference/caps-api/",title:"Caps API",description:"Caps API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -21664,7 +21047,7 @@ If you are looking for a simple way to test our API you might prefer our

-`},{id:44,href:"https://docs.datatrails.ai/platform/administration/",title:"Administration",description:"",content:`
+`},{id:42,href:"https://docs.datatrails.ai/platform/administration/",title:"Administration",description:"",content:`

Administration

This section is for Tenancy Administrators who need to know how to manage their Users and configure access to Assets.

@@ -21678,7 +21061,7 @@ If you are looking for a simple way to test our API you might prefer our Grouping Assets by Location →

-`},{id:45,href:"https://docs.datatrails.ai/developers/yaml-reference/",title:"YAML Reference",description:"",content:`
+`},{id:43,href:"https://docs.datatrails.ai/developers/yaml-reference/",title:"YAML Reference",description:"",content:`

YAML Runner Reference

This sub-section of the Developers subject area contains articles that describe and define the functionality of the DataTrails YAML Runner.

@@ -21692,7 +21075,7 @@ If you are looking for a simple way to test our API you might prefer our Estate Information YAML Runner →

-`},{id:46,href:"https://docs.datatrails.ai/developers/api-reference/",title:"API Reference",description:"",content:`
+`},{id:44,href:"https://docs.datatrails.ai/developers/api-reference/",title:"API Reference",description:"",content:`

API Reference

This sub-section of the Developers subject area contains articles that describe and define the DataTrails REST API endpoints.

@@ -21701,19 +21084,17 @@ If you are looking for a simple way to test our API you might prefer our Assets API →
Attachments API →
Blobs API →
- Blockchain API (v1alpha2) →
Compliance API →
Events API →
IAM Policies API →
IAM Subjects API →
Locations API →
Public Assets API →
- System API →
Tenancies API →
Tenancy Caps API →

-`},{id:47,href:"https://docs.datatrails.ai/platform/overview/",title:"Overview",description:"",content:`
+`},{id:45,href:"https://docs.datatrails.ai/platform/overview/",title:"Overview",description:"",content:`

Overview

Begin your DataTrails journey here.

@@ -21729,7 +21110,7 @@ If you are looking for a simple way to test our API you might prefer our Public Attestation →

-`},{id:48,href:"https://docs.datatrails.ai/developers/",title:"Developers",description:"DataTrails developer documentation",content:`
+`},{id:46,href:"https://docs.datatrails.ai/developers/",title:"Developers",description:"DataTrails developer documentation",content:`

Developers

If you are a developer who is looking to easily add provenance to their data, this section is for you.
@@ -21757,7 +21138,7 @@ If you are looking for a simple way to test our API you might prefer our

-`},{id:49,href:"https://docs.datatrails.ai/platform/",title:"Platform",description:"DataTrails Platform and configuration documentation",content:`
+`},{id:47,href:"https://docs.datatrails.ai/platform/",title:"Platform",description:"DataTrails Platform and configuration documentation",content:`

Platform

If you are new to DataTrails, this is the place to start.

@@ -22176,11 +21557,12 @@ These are examples of completely different things that

Events are things that happen during an Asset’s lifecycle. Each Event Record contributes to the ‘Golden Thread’ of the audit trail by enriching the Asset’s history. Events can be used to add or update Asset information if they change the Asset’s state, but they also have their own attributes to add process detail and rich evidence.

Events can never be deleted or modified. Events provide details on Asset attributes, such as updating the weight of a shipment, and/or details about the event itself, such as a recording a new document version.

-

Proof Mechanisms

-

Assets and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to being able to use them.

-

When -creating an Asset, DataTrails uses a proof mechanism for that Asset and its Events. This determines how your data is recorded on the DataTrails blockchain.

+

Proving Provenance

+

Artifacts and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to knowing the information is secure and trustworthy.

DataTrails attestations are committed to immutable storage that is underpinned by cryptographically verifiable Merkle Mountain Range data structures for long term verifiability, even when offline.

+

Four Increasing Trust Levels

+

At DataTrails we believe in holding ourselves to the same levels of accountability as our customers, and the Merkle Log proof mechanism provides the robustness, integrity and availability guarantees needed to ensure data authenticity in any digital or data supply chain. And you don’t have to just take our word for it: you can check.

+

Here’s how it works:

@@ -22204,12 +21586,11 @@ These are examples of completely different things that
-

Four Increasing Trust Levels

-

In the customer’s environment, data can be tampered, shredded, backdated…

-

Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However there could be a suspicion that DataTrails (or a hacker in our systems, or Microsoft under subpœna) could tamper with the data, or make it unavailable or something.

-

Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable (as long people check). Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. If this checking is weak, and/or copies are not made, then in principle Data Trails could create forks.

-

By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on to root holds DataTrails to account and prevents forks, and also prevents a kind of sybil attack that could otherwise be mounted by 3rd party verifiers. Even so, a tiny chance of tampering remains: DataTrails could possibly sign multiple MMRs and maintain multiple split histories, then present whichever version of the history is most advantageous.

-

To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast to single, well known location outside of DataTrails control (such as a smart contract address on Ethereum, or an official X account).

+

Without an Immutable Audit Trail, there is always the risk - or at least the suspicion - that data can be shredded, backdated or otherwise tampered with.

+

Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However while the security and integrity of our customers’ data is our top priority, there could still be a suspicion that DataTrails (or a hacker in our systems, or our cloud service provider under subpœna) could tamper with the data, or make it unavailable.

+

Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable. Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. These copies are great for availability and holding DataTrails accountable, but there is a risk that a kind of Sybil attack could be mounted where the community creates forks and then tries to accuse the DataTrails version of being wrong.

+

By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on the root at once holds DataTrails to account and prevents forks and the Sybil attack mentioned above. Even so, a tiny chance of tampering remains: in principle, multiple MMRs could be signed, creating multiple versions of history.

+

To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast so that it is clear that there is one, and only one, version of history to underpin your data authenticity.

Access Policies

Sharing the right amount of information with the consumers of your data is critical to creating a trustworthy shared history for any Asset. It is important that every participant be able to see and contribute to the management of those Assets without compromising security and private information. To ensure stakeholders can access only the Assets and attributes relevant to them, transactions are private by default, unless the Asset was created as a Public Asset. An Administrator defines how many of the Asset’s attributes the Access Policy permits a user to see so that they only see what they need to complete a task.

@@ -23677,158 +23058,7 @@ Please see the

In the next section we look at a specific type of Asset, the Document Profile Asset.

-`}).add({id:8,href:"https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/",title:"Archived: Verifying Assets and Events with Simple Hash",description:"Ensure Asset and Event Data Has Not Changed",content:`

Verifying your Simple Hash events provides an additional layer of assurance to your data, so you can ensure that the information you have in your hand at a given time has not changed.

-

This allows you to check for yourself, and prove to others, that any attestations that you made have not been changed since they were recorded in DataTrails.

-

To verify your data, you may use the -DataTrails Simple Hash tool, available on GitHub.

-

Please note that with Simple Hash, Events are committed to the DataTrails blockchain as a batch. Events with the blue tick have been committed to the blockchain as part of a batch, and will have a Transaction ID. With the free tier of DataTrails, Simple Hash batched commits happen every 30 days by default. For Public Assets, batched commits happen each day. If the tick mark is grey, your event has been confirmed in the system but not yet committed to the blockchain. Your event(s) must have a blue tick for transaction details to be available for data verification.

-

Step-by-Step Guide for Using the Simple Hash Tool

-
    -
  1. -

    Retrieve your transaction information. This will give you the inputs you need in later steps to check the hash for that batch of Events.

    -
    -
    For Public Assets, retrieve the transaction information from the public view of the Asset and Events, or from the -Public Assets Endpoint.
    -
    - -
    -

    Select Audit/Filters from the sidebar and select a Transaction from the Events Overview List.

    -
    -
     <input type="image" data-bs-toggle="modal" data-bs-target="#AuditSearch" img class="img-fluid responsive" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" data-sizes="auto" data-srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" alt="Rectangle">
    - <noscript><img class="img-fluid" sizes="100vw" srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" alt="Rectangle"></noscript>
    - <figcaption class="figure-caption"><em>Audit/Search</em></figcaption>
    -
    -
    - - -
  2. -
  3. -

    Use the -DataTrails Simple Hash tool to generate the hash of your Events.

    - -
    -

    Use Python pip utility to install the datatrails-simplehash package. This package is supported for Python versions 3.7, 3.8, 3.9, and 3.10.

    -
    python3 -m pip install datatrails-simplehash
    -

    You may then use the code to recreate the hash, using your -BEARER_TOKEN_FILE as the auth_token and the start_date and end_date copied in the last step:

    -
    from datatrails_simplehash.v1 import (
    -    anchor_events,
    -    SimpleHashError,
    -)
    -
    -with open("credentials/token", mode="r", encoding="utf-8") as tokenfile:
    -    auth_token = tokenfile.read().strip()
    -
    -try:
    -    simplehash = anchor_events(
    -        "2022-10-07T07:01:34Z",
    -        "2022-10-16T13:14:56Z",
    -        "app.datatrails.ai",
    -        auth_token,
    -    )
    -except SimpleHashError as ex:
    -    print("Error", ex)
    -
    -else:
    -    print("simplehash=", simplehash)
    -

    Run your Python file to return the hash value.

    -
    -
    Note: SimpleHashClientAuthError is raised if the auth token is invalid or expired.
    -
    -
    -
    -

    Enter the query information you copied in the last step and run the command. See instructions for -creating your BEARER_TOKEN_FILE here.

    -

    Commands can be executed anywhere using a virtual environment and published wheel. Credentials are stored in files within the credentials directory.

    -

    Using an -auth token directly:

    -
    python3 -m venv simplehash-venv
    -source simplehash-venv/bin/activate
    -python3 -m pip install -q datatrails_simplehash
    -
    -datatrails_simplehashv1 \\
    -    --auth-token-file "credentials/token" \\
    -    --start-time "2022-11-16T00:00:00Z" \\
    -    --end-time "2022-11-17T00:00:00Z"
    -
    -deactivate
    -rm -rf simplehash-venv
    -

    Using a Client ID and Client Secret:

    -
    python3 -m venv simplehash-venv
    -source simplehash-venv/bin/activate
    -python3 -m pip install -q datatrails_simplehash
    -
    -CLIENT_ID=$(cat credentials/client_id)
    -datatrails_simplehashv1 \\
    -    --client-id "\${CLIENT_ID}" \\
    -    --client-secret-file "credentials/client_secret" \\
    -    --start-time "2022-11-16T00:00:00Z" \\
    -    --end-time "2022-11-17T00:00:00Z"
    -
    -deactivate
    -rm -rf simplehash-venv
    -
    -
    Note: If you are using an environment other than app.datatrails.ai, add the URL with the --fqdn option. For example, --fqdn "app.datatrails-poc.ai".
    -
    -
    - -
  4. -
  5. -

    Compare the hash from your Transaction Details to the hash generated by the tool. If they match, your Event history has not changed.

    -
  6. -
-`}).add({id:9,href:"https://docs.datatrails.ai/platform/overview/registering-a-document-profile-asset/",title:"Registering a Document Profile Asset",description:"Register document profile asset",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

+`}).add({id:8,href:"https://docs.datatrails.ai/platform/overview/registering-a-document-profile-asset/",title:"Registering a Document Profile Asset",description:"Register document profile asset",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

As it builds on the standard DataTrails asset the same processes are used for Permissioned Sharing and Public Attestation.

@@ -23979,10 +23209,10 @@ The Trust data:

The Advanced Options tab is where you enter the Asset Attributes that are required for all asset types and also the optional document profile asset attributes.

  • Document Type - This is the class of the object; while it is arbitrary, it is best to have consistency amongst the type of Documents you use i.e. if it is a purchase order, the type could be Purchase Order, which will then be pre-populated for future Documents to use as their own types.
  • -
  • Proof Mechanism - The method used to commit the blockchain transaction.
  • +
  • Proof Mechanism - The method used to record the transaction to the DataTrails distributed ledger.

Please see our -Advanced Concepts section for more information on the Proof Mechanism for your Document +Core Concepts section for more information on the Proof Mechanism for your Document

The first Event in the Event History will always be the Document Registration. In the next section, we will cover how to create your own Events for your Document.

-`}).add({id:10,href:"https://docs.datatrails.ai/developers/developer-patterns/document-profile/",title:"Document Profile",description:"Tracing the Lifecycle of a Document with DataTrails",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

+`}).add({id:9,href:"https://docs.datatrails.ai/developers/developer-patterns/document-profile/",title:"Document Profile",description:"Tracing the Lifecycle of a Document with DataTrails",content:`

The DataTrails document profile is a set of suggested Asset and Event attributes that allow you to trace the lifecycle of a document.

Profile Attribute Namespace

The document_ prefix is used to designate attributes that are part of the profile. Some of these are interpreted by DataTrails and others are guidelines.

@@ -24452,7 +23682,7 @@ Withdrawal is optional and it is usually the final event in the document lifecyc -`}).add({id:11,href:"https://docs.datatrails.ai/platform/overview/registering-an-event-against-a-document-profile-asset/",title:"Registering an Event Against a Document Profile Asset",description:"",content:`

It is rare for a document to remain unchanged during it’s lifetime. Some documents are expected to go though many versions (e.g product documentation) while others (e.g. an employment contract) change much less frequently.

+`}).add({id:10,href:"https://docs.datatrails.ai/platform/overview/registering-an-event-against-a-document-profile-asset/",title:"Registering an Event Against a Document Profile Asset",description:"",content:`

It is rare for a document to remain unchanged during it’s lifetime. Some documents are expected to go though many versions (e.g product documentation) while others (e.g. an employment contract) change much less frequently.

If you need to update your registered Document Profile Asset you can record this as an Event. The Document Profile defines two types of Event; Publish and Withdraw.

Document Registration is the first Event with each new version being recorded as a Publish Event.

@@ -24879,7 +24109,7 @@ The Overview tab shows the details of the Event including the version and docume

-`}).add({id:12,href:"https://docs.datatrails.ai/developers/developer-patterns/software-package-profile/",title:"Software Package Profile",description:"Sharing and Distributing a Software Bill of Materials with DataTrails",content:`

Overview

+`}).add({id:11,href:"https://docs.datatrails.ai/developers/developer-patterns/software-package-profile/",title:"Software Package Profile",description:"Sharing and Distributing a Software Bill of Materials with DataTrails",content:`

Overview

The DataTrails Software Package profile is a set of suggested Asset and Event attributes that enable the recording of an immutable and verifiable Software Bill of Materials (SBOM).

The NTIA describes a SBOM as “a formal record containing the details and supply chain relationships of various components used in building software.

@@ -25617,7 +24847,7 @@ The first is to disclose knowledge of a vulnerability and the second is to updat -`}).add({id:13,href:"https://docs.datatrails.ai/platform/overview/instaproof/",title:"Instaproof",description:"A Guide to Instaproof",content:`

Instaproof allows anonymous access to the Audit Trail of a file. providing data provenance and authenticity with a simple drag-and-drop.

+`}).add({id:12,href:"https://docs.datatrails.ai/platform/overview/instaproof/",title:"Instaproof",description:"A Guide to Instaproof",content:`

Instaproof allows anonymous access to the Audit Trail of a file. providing data provenance and authenticity with a simple drag-and-drop.

Instaproof will search amongst the Publicly Attested assets that have been registered with the Document Profile and return a list of all assets that have a matching hash value.

The initial version of a document is registered as a document profile asset. New versions of the document are published as events against that asset. See @@ -25726,7 +24956,7 @@ If the document has been registered with DataTrails, you will see a green respon verified domain associated with their DataTrails account. This helps to confirm the identity of the document source and is likely the thing to look for if you want ‘official’ provenance records. A Verified Domain can be used to link an identity (such as a company or a brand name) to a DataTrails Tenancy.

The Other Results results are those from from unverified DataTrails accounts - other members of the DataTrails community who have made claims or observations about the document you’re interested in.

While they may seem less ‘official’ than verified account results, they may still be useful to you. The identity of all users making attestations in DataTrails is checked, recorded, and immutable, even if they are not (yet) associated with a verified domain name.

-

What Do the Instaproof Results Mean

+

What Do the Instaproof Results Mean?

Immutable Audit Trail

Click on a result to see details of the document history. You will see the Event details of the version that matches your document on the right with a partial view of the Asset details for the latest version on the left. Close the Event details to see the full Asset details view.

@@ -25813,7 +25043,7 @@ Includes the current version, the organization, and Verified Domain badge, if ap

The Overview information about the Event

Event Identity - The Event ID will always be of the format ‘publicassets/<asset_id>/events/<event_id>’ for public assets or ‘assets/<asset_id>/events/<event_id>’ for private assets.

Asset Identity - the ID of the parent Asset for this Event.

-

Transaction - This link contains the details of the blockchain transaction. +

Transaction - This link contains the details of the Event transaction.

@@ -25840,7 +25070,7 @@ Includes the current version, the organization, and Verified Domain badge, if ap

Type - For Document Profile Events this will always be ‘Publish’

Document changes - The version and document hash for new version Events. There is no data here for custom Events.

The Event attributes and Asset attributes tabs contain information about any custom attributes that were added or modified as part this Event.

-`}).add({id:14,href:"https://docs.datatrails.ai/platform/overview/public-attestation/",title:"Public Attestation",description:"Public Assets vs Permissioned Assets",content:`

Transparency through Public Attestation

+`}).add({id:13,href:"https://docs.datatrails.ai/platform/overview/public-attestation/",title:"Public Attestation",description:"Public Assets vs Permissioned Assets",content:`

Transparency through Public Attestation

Not everything needs to be kept secret.

Using the example of an image in a news report, the publisher needs everyone to be able to see the image but at the same time the viewers of the image want to know that it is genuine while the owner of the image will want to be credited. There needs to be a way for consumers of data to anonymously verify the data that they are consuming is genuine and also where it came from.

Public attestation allows you to @@ -26094,7 +25324,7 @@ Set the toggle next to Attest Publicly to ON.

-`}).add({id:15,href:"https://docs.datatrails.ai/platform/administration/identity-and-access-management/",title:"Identity and Access Management",description:"DataTrails IAM Concepts",content:`

Tenancies and Accounts

+`}).add({id:14,href:"https://docs.datatrails.ai/platform/administration/identity-and-access-management/",title:"Identity and Access Management",description:"DataTrails IAM Concepts",content:`

Tenancies and Accounts

Each DataTrails Tenancy represents an organization, and each DataTrails account represents an individual user. There may be multiple accounts within a Tenancy if there are several members within an organization. Additionally, an individual user can be part of multiple Tenancies.

@@ -26325,7 +25555,7 @@ Enter your SSO configuration, then select SAVE ENTERPRISE SSO CONFIG -`}).add({id:16,href:"https://docs.datatrails.ai/platform/administration/verified-domain/",title:"Verified Domain",description:"Domain Verification and Why It's Important",content:`

What is domain verification?

+`}).add({id:15,href:"https://docs.datatrails.ai/platform/administration/verified-domain/",title:"Verified Domain",description:"Domain Verification and Why It's Important",content:`

What is domain verification?

Domain verification assures that actors claiming to be part of an organization are authorized to share information on their behalf. If an organization’s Tenancy has been verified by the DataTrails team, a badge indicating that they have been verified will appear next to their domain name. @@ -26411,7 +25641,7 @@ You will be sent to the identity provider you configured earlier to log-in, then

curl -v -X GET \\
      -H "@$HOME/.datatrails/bearer-token.txt" \\
      https://app.datatrails.ai/archivist/v1/tenancies/{uuid}:publicinfo
-
`}).add({id:17,href:"https://docs.datatrails.ai/platform/administration/sharing-access-inside-your-tenant/",title:"Managing Internal Access to Your Tenant",description:"Sharing Access to Audit Trails within your Tenant",content:`
+`}).add({id:16,href:"https://docs.datatrails.ai/platform/administration/sharing-access-inside-your-tenant/",title:"Managing Internal Access to Your Tenant",description:"Sharing Access to Audit Trails within your Tenant",content:`
Caution: You will only have access to the Access Policies screen if you are an Administrator in your organization.

Attribute-Based Access Control (ABAC) policies can be used to control access to Assets, their attributes, and Events within a single organization.

@@ -26788,7 +26018,7 @@ Use the curl command to run your JSON file! See instructions for

We can see that Mandy can only view the Attributes specified in the policy.

Our Administrator, Jill, can see every detail associated with the Asset.

-`}).add({id:18,href:"https://docs.datatrails.ai/platform/administration/sharing-access-outside-your-tenant/",title:"Managing External Access to Your Tenant",description:"Sharing Assets With Organization-Based Access Control (OBAC)",content:`

Organization-Based Access Control (OBAC) policies allow you, as a tenant administrator, to share access to audit trails from your tenancy with an administrator of another tenant. This permissioned sharing allows you to grant access, whether read/write or read-only, to people outside of your organization.

+`}).add({id:17,href:"https://docs.datatrails.ai/platform/administration/sharing-access-outside-your-tenant/",title:"Managing External Access to Your Tenant",description:"Sharing Assets With Organization-Based Access Control (OBAC)",content:`

Organization-Based Access Control (OBAC) policies allow you, as a tenant administrator, to share access to audit trails from your tenancy with an administrator of another tenant. This permissioned sharing allows you to grant access, whether read/write or read-only, to people outside of your organization.

OBAC policies have a lot in common with Attribute-Based Access Control (ABAC) policies; they apply the same controls with two different classes of actor. Where they differ is that OBAC only allows sharing between Tenant Administrators. The external Administrator must then apply an ABAC policy within their tenancy to give their own organization’s Non-Administrators access to your Audit Trails, where appropriate.

Note: To enable sharing of assets with those outside your tenancy, you must be an Administrator in your organization AND have completed an exchange of subject identifiers, as outlined below.
@@ -27290,7 +26520,7 @@ By comparison, our Administrator, Jill, can see the full details of the Asset: IAM Policies API Reference.

-`}).add({id:19,href:"https://docs.datatrails.ai/platform/administration/dropbox-integration/",title:"Dropbox Integration",description:"Integrating with Dropbox",content:`

The Dropbox Integration

+`}).add({id:18,href:"https://docs.datatrails.ai/platform/administration/dropbox-integration/",title:"Dropbox Integration",description:"Integrating with Dropbox",content:`

The Dropbox Integration

Connecting your DataTrails tenancy to your Dropbox account will allow you to automatically record and maintain the provenance metadata of your files in an immutable Audit Trail.

DataTrails uses transparent and auditable distributed ledger technology to maintain an immutable trail of provenance metadata independent of, but in concert with, the original file in Dropbox. The original data never enters the DataTrails system and remains on Dropbox. @@ -27645,7 +26875,7 @@ You would disconnect in Dropbox if you no longer wish to use DataTrails for prov

This is how to connect and disconnect DataTrails and Dropbox, it is that simple! Please see our FAQ for more information.

-`}).add({id:20,href:"https://docs.datatrails.ai/platform/administration/compliance-policies/",title:"Compliance Policies",description:"Creating and Managing Compliance Policies",content:`

Creating a Compliance Policy

+`}).add({id:19,href:"https://docs.datatrails.ai/platform/administration/compliance-policies/",title:"Compliance Policies",description:"Creating and Managing Compliance Policies",content:`

Creating a Compliance Policy

Compliance Policies are user-defined rule sets that Assets can be tested against. Compliance Policies only need to be created once; all applicable Assets will be tested against that policy thereafter.

For example, a policy might assert that “Maintenance Alarm Events must be addressed by a Maintenance Report Event, recorded within 72 hours of the alarm”. This creates a Compliance Policy in the system which any Asset can be tested against as needed.

As compliance is ensured by a regular series of Events, an Audit Trail builds up over time that allows compliance to be checked for the entire lifetime of the Asset.

@@ -28002,7 +27232,7 @@ An example response for a non-compliant Asset

"next_page_token": "", "compliant_at": "2024-01-17T10:16:12Z" } -`}).add({id:21,href:"https://docs.datatrails.ai/platform/administration/grouping-assets-by-location/",title:"Grouping Assets by Location",description:"Adding a Location",content:`

Locations associate an Asset with a ‘home’ that can help when governing sharing policies with OBAC and ABAC. Locations do not need pinpoint precision and can be named by site, building, or other logical grouping.

+`}).add({id:20,href:"https://docs.datatrails.ai/platform/administration/grouping-assets-by-location/",title:"Grouping Assets by Location",description:"Adding a Location",content:`

Locations associate an Asset with a ‘home’ that can help when governing sharing policies with OBAC and ABAC. Locations do not need pinpoint precision and can be named by site, building, or other logical grouping.

It may be useful to indicate an Asset’s origin. For example, if tracking traveling consultant’s laptops, you may wish to associate them with a ‘home’ office.

Caution: It is important to recognize that the location does not necessarily denote the Asset’s current position in space; it simply determines which facility the Asset belongs to. For things that move around, use GIS coordinates on Events instead. See @@ -28568,7 +27798,7 @@ For more information on creating Events, please visit

-`}).add({id:22,href:"https://docs.datatrails.ai/developers/api-reference/app-registrations-api/",title:"App Registrations API",description:"App Registrations API Reference",content:`
+`}).add({id:21,href:"https://docs.datatrails.ai/developers/api-reference/app-registrations-api/",title:"App Registrations API",description:"App Registrations API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -29624,7 +28854,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:23,href:"https://docs.datatrails.ai/developers/api-reference/assets-api/",title:"Assets API",description:"Assets API Reference",content:`

+`}).add({id:22,href:"https://docs.datatrails.ai/developers/api-reference/assets-api/",title:"Assets API",description:"Assets API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -29803,7 +29033,7 @@ If you are looking for a simple way to test our API you might prefer our

To fetch all Assets that use a specific Proof Mechanism, GET the Assets resource and filter on proof_mechanism:

curl -g -v -X GET \\
      -H "@$HOME/.datatrails/bearer-token.txt" \\
-     "https://app.datatrails.ai/archivist/v2/assets?attributes.proof_mechanism=simple_hash"
+     "https://app.datatrails.ai/archivist/v2/assets?proof_mechanism=MERKLE_LOG"
 

Fetch Events Ordered for SIMPLEHASHV1 Schema

To fetch Simple Hash Events in the order needed for the SIMPLEHASHV1 schema, GET the Assets resource, specifying a specific Asset ID or using assets/-/events to fetch Events for all Assets:

@@ -31546,7 +30776,7 @@ If you are looking for a simple way to test our API you might prefer our
-`}).add({id:24,href:"https://docs.datatrails.ai/developers/api-reference/attachments-api/",title:"Attachments API",description:"Attachments API Reference",content:`
+`}).add({id:23,href:"https://docs.datatrails.ai/developers/api-reference/attachments-api/",title:"Attachments API",description:"Attachments API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -32667,7 +31897,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:25,href:"https://docs.datatrails.ai/developers/api-reference/blobs-api/",title:"Blobs API",description:"Blobs API Reference",content:`
+`}).add({id:24,href:"https://docs.datatrails.ai/developers/api-reference/blobs-api/",title:"Blobs API",description:"Blobs API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -33214,7 +32444,7 @@ For information on Attachments and how to implement them, please refer to

-`}).add({id:26,href:"https://docs.datatrails.ai/developers/api-reference/compliance-api/",title:"Compliance API",description:"Compliance API Reference",content:`
+`}).add({id:25,href:"https://docs.datatrails.ai/developers/api-reference/compliance-api/",title:"Compliance API",description:"Compliance API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -34526,7 +33756,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:27,href:"https://docs.datatrails.ai/developers/api-reference/events-api/",title:"Events API",description:"Events API Reference",content:`
+`}).add({id:26,href:"https://docs.datatrails.ai/developers/api-reference/events-api/",title:"Events API",description:"Events API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -36515,7 +35745,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:28,href:"https://docs.datatrails.ai/developers/api-reference/iam-policies-api/",title:"IAM Policies API",description:"IAM Policies API Reference",content:`
+`}).add({id:27,href:"https://docs.datatrails.ai/developers/api-reference/iam-policies-api/",title:"IAM Policies API",description:"IAM Policies API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -38208,7 +37438,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:29,href:"https://docs.datatrails.ai/developers/api-reference/iam-subjects-api/",title:"IAM Subjects API",description:"IAM Subjects API Reference",content:`
+`}).add({id:28,href:"https://docs.datatrails.ai/developers/api-reference/iam-subjects-api/",title:"IAM Subjects API",description:"IAM Subjects API Reference",content:`

Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -39125,7 +38355,7 @@ If you are looking for a simple way to test our API you might prefer our

-`}).add({id:30,href:"https://docs.datatrails.ai/developers/developer-patterns/scitt-api/",title:"Quickstart: SCITT Statements (Preview)",description:"Getting Started with SCITT: creating a collection of statements (Preview)",content:`
+`}).add({id:29,href:"https://docs.datatrails.ai/developers/developer-patterns/scitt-api/",title:"Quickstart: SCITT Statements (Preview)",description:"Getting Started with SCITT: creating a collection of statements (Preview)",content:`
The SCITT API is currently in preview and subject to change

The Supply Chain Integrity, Transparency and Trust (SCITT) initiative is a set of @@ -39255,7 +38485,7 @@ By using the content-type parameter, verifiers can filter to specific types, and

  • SCITT.io
  • -`}).add({id:31,href:"https://docs.datatrails.ai/developers/api-reference/locations-api/",title:"Locations API",description:"Locations API Reference",content:`

    +`}).add({id:30,href:"https://docs.datatrails.ai/developers/api-reference/locations-api/",title:"Locations API",description:"Locations API Reference",content:`

    Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -40400,7 +39630,7 @@ If you are looking for a simple way to test our API you might prefer our

    -`}).add({id:32,href:"https://docs.datatrails.ai/developers/api-reference/public-assets-api/",title:"Public Assets API",description:"Public Assets API Reference",content:`
    +`}).add({id:31,href:"https://docs.datatrails.ai/developers/api-reference/public-assets-api/",title:"Public Assets API",description:"Public Assets API Reference",content:`

    Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -41236,473 +40466,7 @@ If you are looking for a simple way to test our API you might prefer our

    -`}).add({id:33,href:"https://docs.datatrails.ai/developers/api-reference/system-api/",title:"System API",description:"System API Reference",content:`
    -

    Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. -If you are looking for a simple way to test our API you might prefer our -Postman collection, the -YAML runner or the -Developers section of the web UI.

    -

    Additional YAML examples can be found in the articles in the -Overview section.

    -
    -
    -

    System API Examples

    -

    Create the -bearer_token and store in a file in a secure local directory with 0600 permissions.

    -

    Querying Blockchain Status

    -

    The archivistnode endpoint reports on the status of the blockchain.

    -

    Query the endpoint:

    -
    curl -v -X GET \\
    -    -H "@$HOME/.datatrails/bearer-token.txt" \\
    -    https://app.datatrails.ai/archivist/v1/archivistnode
    -

    The response is:

    -
    {
    -    "identity": "quorum",
    -    "blockchain_nodes": [
    -        {
    -            "validator_pubkey": {
    -                "kty": "EC",
    -                "crv": "P-256K",
    -                "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
    -                "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE=",
    -                "d": ""
    -            },
    -            "block_height": "38773",
    -            "connection_status": "REACHABLE"
    -            "genesis_hash":"0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
    -            "state_root":"0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
    -            "timestamp_committed": "2019-01-02T01:03:07Z",
    -            "timestamp_created": "2019-01-01T12:00:27Z",
    -            "syncing": null,
    -            "peers": [
    -                {
    -                    "validator_pubkey": {
    -                        "kty": "EC",
    -                        "crv": "P-256K",
    -                        "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
    -                        "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU=",
    -                        "d": ""
    -                    },
    -                    "connection_status": "REACHABLE"
    -                },
    -                {
    -                    "validator_pubkey": {
    -                        "kty": "EC",
    -                        "crv": "P-256K",
    -                        "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
    -                        "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI=",
    -                        "d": ""
    -                    },
    -                    "connection_status": "REACHABLE"
    -                }
    -            ]
    -        }
    -    ]
    -}
    -

    System OpenAPI Docs

    - - - - - -
    -
    -

    API to manage an archivist node.

    -
    -
    - - - - -
    -

    - -

    -
    -
    -
    -
    -

    get  /archivist/v1/archivistnode/archivist/v1/archivistnode

    -
    -
    Get information about an archivist node
    -

    -

    Description: Returns the identified archivist node

    - - - - - - - - - -
    -

    - -

    -
    -
    -
    -
    {
    -  "blockchain_nodes": [
    -    {
    -      "block_height": "38773",
    -      "connection_status": "REACHABLE",
    -      "genesis_hash": "0x1b526bd9c7f9bf7c43ba91ad07e5530eb7ceedf390396f9fbfeb68722e097e95",
    -      "peers": [
    -        {
    -          "connection_status": "REACHABLE",
    -          "validator_pubkey": {
    -            "crv": "P-256K",
    -            "d": "",
    -            "kty": "EC",
    -            "x": "o0uZ8ix5DE42srPCw1o22wYibkHGkvyCuLVqwcVAxb0=",
    -            "y": "W43sUjWg-ociR2x3CcAlWeOqc6oDkYui1JLup1q-ojU="
    -          }
    -        },
    -        {
    -          "connection_status": "REACHABLE",
    -          "validator_pubkey": {
    -            "crv": "P-256K",
    -            "d": "",
    -            "kty": "EC",
    -            "x": "5HcU1PJgTe0LGyGxKFrIPFZWdTbxPySfi6bKxdQeO8A=",
    -            "y": "dEpMURyTwEGzpgIgLdm4Csl1BgF6H39tb1Kf8wLLhVI="
    -          }
    -        }
    -      ],
    -      "state_root": "0x9606fc44a382938703678ac90581ab1260c9efd20ea8c7f90c87852bc982f3a7",
    -      "syncing": null,
    -      "timestamp_committed": "2019-01-01T12:00:27Z",
    -      "timestamp_created": "2019-01-01T12:00:27Z",
    -      "validator_pubkey": {
    -        "crv": "P-256K",
    -        "d": "",
    -        "kty": "EC",
    -        "x": "VBKHictTWJC-3sqknXCb8MI4IxTc3c_My7lnem2C74E=",
    -        "y": "ItNeb5d-6vEHkvtUOcDYrEADxsZXeOCJm18pQWntenE="
    -      }
    -    }
    -  ],
    -  "identity": "quorum-0"
    -}
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Response ParameterTypeDescription
    blockchain_nodesarray
    identitystringThe identity of the archivistnode blockchain
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ResponsesDescription
    200A successful response.
    401Returned when the user is not authenticated to the system.
    403Returned when the user is not authorized to read the archivist node’s information
    404Returned when the identified archivist node does not exist
    429Returned when a user exceeds their subscription’s rate limit for requests.
    - -
    -
    -
    -
    - - - - - - -
    -

    - -

    -
    -
    -
    -
    -

    get  /archivist/v1/archivistnode/archivist/v1/archivistnode/block

    -
    -
    Get a block given a block hash or block number.
    -

    -

    Description: Get a block given a block hash or block number

    - - - - - - - - - - - - - - - -
    -

    - -

    -
    -
    -
    -
    {
    -  "difficulty": "0x20000",
    -  "extraData": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4RDW4QfD3cYx...",
    -  "gasLimit": "0xb2d05e00",
    -  "gasUsed": "0xf426",
    -  "hash": "0x5c6726d7570046c6c4b20e97de1486877f293ba1e4d3b64c13b671354c2f8266",
    -  "logsBloom": "3078303030303030303030303030303030303030303030303030303030303030303...",
    -  "miner": "0x0000000000000000000000000000000000000000",
    -  "nonce": "307830303030303030303030303030303030",
    -  "number": "0x1a95f",
    -  "parentHash": "0x5fb3e35418f67379dbb2093d4886409ff8e530116628aee7c960e18f2fa9f40c",
    -  "receiptsRoot": "0x8bde93a8260d39fa79b76b8c5c7fe687669ba17c63928c4d8e55bc8fcfad04ee",
    -  "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    -  "stateRoot": "0xb1bf30baaed044489b769f4bc557594f74e917b297b79ebe88102a856490cfc4",
    -  "timestamp": "0xf426",
    -  "transactionRoot": "0x5d912ec4fd96825fc58e75401d9834e94bf2fd8f01e50d6946831a60ec1c2040"
    -}
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Response ParameterTypeDescription
    difficultystringinteger of the difficulty for this block encoded as a hexadecimal
    extraDatastringthe “extra data” field of this block
    gasLimitstringthe maximum gas allowed in this block encoded as a hexadecimal
    gasUsedstringthe total used gas by all transactions in this block encoded as a hexadecimal
    hashstringthe block hash
    logsBloomstringthe bloom filter for the logs of the block
    minerstringthe address of the beneficiary to whom the mining rewards were given
    noncestringhash of the generated proof of work
    numberstringthe block number in hexidecimal
    parentHashstringhash of the parent block
    privateStateRootstringthe root of the final, node specific, private state trie of the block
    receiptsRootstringthe root of the receipts trie of the block
    sha3Unclesstringsha3 hash of the uncles data in the block
    stateRootstringthe root of the final state trie of the block
    timestampstringthe unix timestamp for when the block was collated
    transactionRootstringthe root of the transaction trie of the block
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ResponsesDescription
    200A successful response.
    401Returned when the user is not authenticated to the system.
    403Returned when the user is not authorized to view the block.
    404Returned when the asset with the id does not exist. or the event with the id does not exist
    429Returned when a user exceeds their subscription’s rate limit for requests.
    - -
    -
    -
    -
    - - - - - - -
    - - -`}).add({id:34,href:"https://docs.datatrails.ai/developers/api-reference/tenancies-api/",title:"Tenancies API",description:"Tenancies API Reference",content:`
    +`}).add({id:32,href:"https://docs.datatrails.ai/developers/api-reference/tenancies-api/",title:"Tenancies API",description:"Tenancies API Reference",content:`

    Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -42821,7 +41585,7 @@ If you are looking for a simple way to test our API you might prefer our

    -`}).add({id:35,href:"https://docs.datatrails.ai/developers/yaml-reference/story-runner-components/",title:"YAML Runner Components",description:"Common Keys Used for the Yaml Runner",content:`
    +`}).add({id:33,href:"https://docs.datatrails.ai/developers/yaml-reference/story-runner-components/",title:"YAML Runner Components",description:"Common Keys Used for the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -42883,7 +41647,7 @@ If you are looking for a simple way to test our API you might prefer our --client-id <your-client-id> \\ --client-secret <your-client-secret> \\ <path-to-yaml-file> -
    `}).add({id:36,href:"https://docs.datatrails.ai/developers/yaml-reference/assets/",title:"Assets YAML Runner",description:"Asset Actions Used with the Yaml Runner",content:`
    +`}).add({id:34,href:"https://docs.datatrails.ai/developers/yaml-reference/assets/",title:"Assets YAML Runner",description:"Asset Actions Used with the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43003,7 +41767,7 @@ If you are looking for a simple way to test our API you might prefer our description: Wait for all Assets in the wipp namespace to be confirmed attrs: arc_namespace: wipp -
    `}).add({id:37,href:"https://docs.datatrails.ai/developers/yaml-reference/events/",title:"Events YAML Runner",description:"Event Actions Used with the Yaml Runner",content:`
    +`}).add({id:35,href:"https://docs.datatrails.ai/developers/yaml-reference/events/",title:"Events YAML Runner",description:"Event Actions Used with the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43103,7 +41867,7 @@ If you are looking for a simple way to test our API you might prefer our arc_display_type: open asset_attrs: arc_display_type: door -
    `}).add({id:38,href:"https://docs.datatrails.ai/developers/yaml-reference/locations/",title:"Locations YAML Runner",description:"Location Actions Used with the Yaml Runner",content:`
    +`}).add({id:36,href:"https://docs.datatrails.ai/developers/yaml-reference/locations/",title:"Locations YAML Runner",description:"Location Actions Used with the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43152,7 +41916,7 @@ If you are looking for a simple way to test our API you might prefer our print_response: true attrs: director: John Smith -
    `}).add({id:39,href:"https://docs.datatrails.ai/developers/yaml-reference/subjects/",title:"Subjects YAML Runner",description:"Subject Actions Used with the Yaml Runner",content:`
    +`}).add({id:37,href:"https://docs.datatrails.ai/developers/yaml-reference/subjects/",title:"Subjects YAML Runner",description:"Subject Actions Used with the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43262,7 +42026,7 @@ If you are looking for a simple way to test our API you might prefer our print_response: true subject_label: A subject \`\` -
    `}).add({id:40,href:"https://docs.datatrails.ai/developers/yaml-reference/compliance/",title:"Compliance Policies YAML Runner",description:"Compliance Policy Actions Used with the Yaml Runner",content:`
    +`}).add({id:38,href:"https://docs.datatrails.ai/developers/yaml-reference/compliance/",title:"Compliance Policies YAML Runner",description:"Compliance Policy Actions Used with the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43296,7 +42060,7 @@ If you are looking for a simple way to test our API you might prefer our description: Check Compliance of EV pump 1. report: true asset_label: ev pump 1 -
    `}).add({id:41,href:"https://docs.datatrails.ai/developers/yaml-reference/estate-info/",title:"Estate Information YAML Runner",description:"Retrieve Estate Info Using the Yaml Runner",content:`
    +`}).add({id:39,href:"https://docs.datatrails.ai/developers/yaml-reference/estate-info/",title:"Estate Information YAML Runner",description:"Retrieve Estate Info Using the Yaml Runner",content:`

    Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

    Click here for installation instructions.

    @@ -43309,7 +42073,7 @@ If you are looking for a simple way to test our API you might prefer our - step: action: COMPOSITE_ESTATE_INFO description: Estate Info Report -
    `}).add({id:42,href:"https://docs.datatrails.ai/developers/developer-patterns/",title:"Developer Patterns",description:"",content:`
    +
    `}).add({id:40,href:"https://docs.datatrails.ai/developers/developer-patterns/",title:"Developer Patterns",description:"",content:`

    Developer Patterns

    This sub-section of the Developers subject area contains more detailed information on topics that cannot be covered by the API or YAML Runner references.

    @@ -43323,7 +42087,7 @@ If you are looking for a simple way to test our API you might prefer our Software Package Profile →

    -`}).add({id:43,href:"https://docs.datatrails.ai/developers/api-reference/caps-api/",title:"Caps API",description:"Caps API Reference",content:`
    +`}).add({id:41,href:"https://docs.datatrails.ai/developers/api-reference/caps-api/",title:"Caps API",description:"Caps API Reference",content:`

    Note: This page is primarily intended for developers who will be writing applications that will use DataTrails for provenance. If you are looking for a simple way to test our API you might prefer our Postman collection, the @@ -43441,7 +42205,7 @@ If you are looking for a simple way to test our API you might prefer our

    -`}).add({id:44,href:"https://docs.datatrails.ai/platform/administration/",title:"Administration",description:"",content:`
    +`}).add({id:42,href:"https://docs.datatrails.ai/platform/administration/",title:"Administration",description:"",content:`

    Administration

    This section is for Tenancy Administrators who need to know how to manage their Users and configure access to Assets.

    @@ -43455,7 +42219,7 @@ If you are looking for a simple way to test our API you might prefer our Grouping Assets by Location →

    -`}).add({id:45,href:"https://docs.datatrails.ai/developers/yaml-reference/",title:"YAML Reference",description:"",content:`
    +`}).add({id:43,href:"https://docs.datatrails.ai/developers/yaml-reference/",title:"YAML Reference",description:"",content:`

    YAML Runner Reference

    This sub-section of the Developers subject area contains articles that describe and define the functionality of the DataTrails YAML Runner.

    @@ -43469,7 +42233,7 @@ If you are looking for a simple way to test our API you might prefer our Estate Information YAML Runner →

    -`}).add({id:46,href:"https://docs.datatrails.ai/developers/api-reference/",title:"API Reference",description:"",content:`
    +`}).add({id:44,href:"https://docs.datatrails.ai/developers/api-reference/",title:"API Reference",description:"",content:`

    API Reference

    This sub-section of the Developers subject area contains articles that describe and define the DataTrails REST API endpoints.

    @@ -43478,19 +42242,17 @@ If you are looking for a simple way to test our API you might prefer our Assets API →
    Attachments API →
    Blobs API →
    - Blockchain API (v1alpha2) →
    Compliance API →
    Events API →
    IAM Policies API →
    IAM Subjects API →
    Locations API →
    Public Assets API →
    - System API →
    Tenancies API →
    Tenancy Caps API →

    -`}).add({id:47,href:"https://docs.datatrails.ai/platform/overview/",title:"Overview",description:"",content:`
    +`}).add({id:45,href:"https://docs.datatrails.ai/platform/overview/",title:"Overview",description:"",content:`

    Overview

    Begin your DataTrails journey here.

    @@ -43506,7 +42268,7 @@ If you are looking for a simple way to test our API you might prefer our Public Attestation →

    -`}).add({id:48,href:"https://docs.datatrails.ai/developers/",title:"Developers",description:"DataTrails developer documentation",content:`
    +`}).add({id:46,href:"https://docs.datatrails.ai/developers/",title:"Developers",description:"DataTrails developer documentation",content:`

    Developers

    If you are a developer who is looking to easily add provenance to their data, this section is for you.
    @@ -43534,7 +42296,7 @@ If you are looking for a simple way to test our API you might prefer our

    -`}).add({id:49,href:"https://docs.datatrails.ai/platform/",title:"Platform",description:"DataTrails Platform and configuration documentation",content:`
    +`}).add({id:47,href:"https://docs.datatrails.ai/platform/",title:"Platform",description:"DataTrails Platform and configuration documentation",content:`

    Platform

    If you are new to DataTrails, this is the place to start.

    diff --git a/platform/administration/compliance-policies/index.html b/platform/administration/compliance-policies/index.html index 25a3e72ef..d2f401aa8 100644 --- a/platform/administration/compliance-policies/index.html +++ b/platform/administration/compliance-policies/index.html @@ -234,4 +234,4 @@ "next_page_token": "", "compliant_at": "2024-01-17T10:16:12Z" } -

    \ No newline at end of file +

    \ No newline at end of file diff --git a/platform/administration/dropbox-integration/index.html b/platform/administration/dropbox-integration/index.html index d708a48a8..29772665a 100644 --- a/platform/administration/dropbox-integration/index.html +++ b/platform/administration/dropbox-integration/index.html @@ -15,4 +15,4 @@ Publish Event in the provenance metadata record for that file.
    The result is that the auditable provenance record for your files begins at the moment that you link a folder and that an immutable audit trail for each file automatically grows as the files are modified.

    You are free, at any time, to link and unlink a folder at all levels of your folder tree using the instructions at Editing the list of Linked folders

    Please also see our FAQ for more information.

    Note: During configuration, when you link a folder in the UI we will automatically link any subfolders too. Similarly, if you unlink a folder in the UI we will automatically unlink any subfolders.

    If you create a subfolder in Dropbox after the integration has been set up it will be automatically added to the linked folder list. If you delete a subfolder or move it to an unlinked location it will be automatically removed from the linked folder list.

    If a folder is unlinked for any reason, such by as direct configuration or by being moved, the Audit Trail will stop. Relinking the folder will restart the Audit Trail but we cannot recover any Events that happened while the folder was unlinked.

    Note: DataTrails masks the file path and replaces the filename with the Asset ID in the public Asset view that is returned by Instaproof. This is intentional so that private information cannot be accidentally released via the Instaproof search results.
    Knowledge of the filename is not needed to prove provenance because Instaproof will attest and verify the content of a file even if the filename has been changed.
    The permissioned view that is seen by an administrator who is logged into a tenancy will show the file name and the file path.

    Connecting DataTrails to Dropbox

    1. Select Settings or Integrations from the side bar and then the Integrations tab
      Settings
    2. Select Dropbox and then Proceed.
      Proceed
      If you are already logged into Dropbox on the device that you are using to set up the integration then you will proceed directly to step 3.
      If you are not logged in then Dropbox will ask you to authenticate.
      Log in to Dropbox
    3. DataTrails now asks for permission to see metadata for your files and folders. Click Allow to give DataTrails permission to access your Dropbox Folders.
      Select Allow
    4. Select the Dropbox folder that you wish to link to DataTrails and then click Confirm. The contents of this folder and all its subfolders will be added to DataTrails as public Document Profile Assets.
      Select folder and Confirm
    5. You will see a success message. Dropbox will be connected and the selected folders will be linked.
      Success!
      Click on an icon on the right to edit the connection or to disconnect.
      Configuration icons on the right
    6. Check the Asset Overview to see your Dropbox files.
      Assets
      Remember: The filenames of the Dropbox files are masked using the format xxx…

    Editing the list of Linked folders

    1. Select the File icon in DataTrails
      File icon on the right
    2. You will see the list of available folders. Select a folder to link or deselect a folder to unlink and then click Confirm
      Reconfigure folders and Confirm

    Disconnecting DataTrails from Dropbox

    To disconnect DataTrails and Dropbox you have the option to disconnect using both applications.

    1. Select the Disconnect icon in DataTrails
      Disconnect Dropbox
      You will see a warning message.
      Disconnect Warning
      This means that this specific tenancy will no longer be used for provenance. You would do this if you no longer want to use a connected tenancy while continuing to use other connected tenancies.
    2. If you also want to disconnect in Dropbox, log in to Dropbox, select your account and then Settings followed by the Apps tab. Select DataTrails and then Disconnect
      Disconnect DataTrails
      You would disconnect in Dropbox if you no longer wish to use DataTrails for provenance. This will remove access permissions for all your tenancies and should be done after you have disconnected all your individual tenancies in DataTrails.

    This is how to connect and disconnect DataTrails and Dropbox, it is that simple! Please see our -FAQ for more information.

    \ No newline at end of file +FAQ for more information.

    \ No newline at end of file diff --git a/platform/administration/grouping-assets-by-location/index.html b/platform/administration/grouping-assets-by-location/index.html index 714cd7d8f..f0bb6683f 100644 --- a/platform/administration/grouping-assets-by-location/index.html +++ b/platform/administration/grouping-assets-by-location/index.html @@ -211,4 +211,4 @@ } }
    Note - The Event must be recorded against the appropriate assets/<asset-id> when the curl command is executed. -See Step 4 here for more details.
    Note - You need to include the full locations/<location-id> reference as using only the UUID will not be recognized.

  • In the following screenshot, note the location of our Asset has been updated

    Completed update of Asset Location

  • \ No newline at end of file +See Step 4 here for more details.
    Note - You need to include the full locations/<location-id> reference as using only the UUID will not be recognized.

  • In the following screenshot, note the location of our Asset has been updated

    Completed update of Asset Location

  • \ No newline at end of file diff --git a/platform/administration/identity-and-access-management/index.html b/platform/administration/identity-and-access-management/index.html index 455c1301e..ea4d8902a 100644 --- a/platform/administration/identity-and-access-management/index.html +++ b/platform/administration/identity-and-access-management/index.html @@ -33,4 +33,4 @@ Verified Domain.

    1. Navigate to Settings on the sidebar and select Tenancy.
      Enter your SSO configuration, then select SAVE ENTERPRISE SSO CONFIG. Saving your configuration may take a moment.

      Configure SSO

      NOTE: To retrieve the necessary data for the configuration form, your IDP must be configured to be compatible with DataTrails. Enter the information below.

      Login URI:

      https://app.datatrails.ai/login
       

      Callback URL:

      https://b2carchivistprod3.b2clogin.com/b2carchivistprod3.onmicrosoft.com/oauth2/authresp
       

    2. Now that your details are saved, return to the DataTrails sign-in screen. Select the Single Sign-On option

      Single Sign-On

    3. Enter your -Verified Domain Name

      Verified Domain
      You will be sent to the identity provider you configured earlier to log-in, then redirected back to DataTrails.

    \ No newline at end of file +Verified Domain Name
    Verified Domain
    You will be sent to the identity provider you configured earlier to log-in, then redirected back to DataTrails.

    \ No newline at end of file diff --git a/platform/administration/index.html b/platform/administration/index.html index a998098f7..bc7f6abbb 100644 --- a/platform/administration/index.html +++ b/platform/administration/index.html @@ -5,4 +5,4 @@
    \ No newline at end of file +Sign Up
    \ No newline at end of file diff --git a/platform/administration/sharing-access-inside-your-tenant/index.html b/platform/administration/sharing-access-inside-your-tenant/index.html index 844fc38a0..2ecb868a9 100644 --- a/platform/administration/sharing-access-inside-your-tenant/index.html +++ b/platform/administration/sharing-access-inside-your-tenant/index.html @@ -113,4 +113,4 @@ -H "Content-type: application/json" \ -d "@/path/to/jsonfile" \ https://app.datatrails.ai/archivist/iam/v1/access_policies -

  • Check the Asset is appropriately shared

    Mandy should only be allowed to see the Asset’s name, type, image, length, and weight attributes.

    Mandy's view as a Non-Administrator

    For comparison with our Administrator, Jill who can see everything:

    Jill's view as a Administrator

  • We can see that Mandy can only view the Attributes specified in the policy.

    Our Administrator, Jill, can see every detail associated with the Asset.

    \ No newline at end of file +

  • Check the Asset is appropriately shared

    Mandy should only be allowed to see the Asset’s name, type, image, length, and weight attributes.

    Mandy's view as a Non-Administrator

    For comparison with our Administrator, Jill who can see everything:

    Jill's view as a Administrator

  • We can see that Mandy can only view the Attributes specified in the policy.

    Our Administrator, Jill, can see every detail associated with the Asset.

    \ No newline at end of file diff --git a/platform/administration/sharing-access-outside-your-tenant/index.html b/platform/administration/sharing-access-outside-your-tenant/index.html index a28fbde02..8f244b75c 100644 --- a/platform/administration/sharing-access-outside-your-tenant/index.html +++ b/platform/administration/sharing-access-outside-your-tenant/index.html @@ -121,4 +121,4 @@ -d "@/path/to/jsonfile" \ https://app.datatrails.ai/archivist/iam/v1/access_policies

  • Once complete, check the Asset is shared appropriately; Mandy should only be able to see the Name, Type and an Image of the container as well as the Asset’s custom weight and length attributes.

    Mandy's view as an Administrator of the External Organization
    By comparison, our Administrator, Jill, can see the full details of the Asset:
    Jill's view as an Administrator

  • If Mandy wishes to share what she can to Non-Administrators within her organization, it is her responsibility to create an ABAC Policy as she would any other Asset she has access to.

    There are many possible fine-grained controls and as such ABAC and OBAC Policy Creation is an extensive topic. To find out more, head over to the -IAM Policies API Reference.

  • \ No newline at end of file +IAM Policies API Reference.

    \ No newline at end of file diff --git a/platform/administration/verified-domain/index.html b/platform/administration/verified-domain/index.html index 33797b248..219a42d63 100644 --- a/platform/administration/verified-domain/index.html +++ b/platform/administration/verified-domain/index.html @@ -11,4 +11,4 @@ Tenant Display Name. Tenant display names are internal, appearing only within your own Tenancy, and are not visible to anyone you share with. A verified domain name must be set by the DataTrails team, and will be visible to actors outside your Tenancy.

    Why is it important to verify my organization’s domain?

    Getting your organization’s domain verified indicates that you are who you say you are. This helps close the trust gap inherent to information sharing between organizations or with the public.

    Without domain verification, the Organization is noted as the publisher’s Tenant ID. Verifying your domain not only shows that this information comes from a legitimate actor on behalf of the organization, but also replaces the Tenant ID with your domain name so consumers can more easily identify the publishing organization. For example, someone attesting information on behalf of DataTrails would have datatrails.ai.

    Organization without Verified Domain
    Organization with Verified Domain

    How can I get my organization’s domain verified?

    The DataTrails team is happy to help you obtain your verified domain badge. Please contact support@datatrails.ai from an email address which includes the domain you wish to verify. For example, email us from @datatrails.ai to verify the datatrails.ai domain. We will send you a confirmation email to make sure that the details are correct.

    In order to protect our user community, it is important for us to verify that the person making the request is authorized to do so by the owner of the domain. We will carry out some internal checks based on the information that we have been given and we may request further evidence from you to prove that you own or control the domain in question. Typically, this will be in the form of public company information or domain registration records. Please be prepared to share this evidence with us.

    Checking the Verified Domain of an External Organization

    If an organization has a verified domain with DataTrails, it will be displayed when you view a Public Asset they have published. You may also retrieve this information via the API if you know the organization’s Tenant ID.

    curl -v -X GET \
          -H "@$HOME/.datatrails/bearer-token.txt" \
          https://app.datatrails.ai/archivist/v1/tenancies/{uuid}:publicinfo
    -

    \ No newline at end of file +

    \ No newline at end of file diff --git a/platform/index.html b/platform/index.html index 1de32d704..c9003a3b9 100644 --- a/platform/index.html +++ b/platform/index.html @@ -5,4 +5,4 @@

    Platform

    If you are new to DataTrails, this is the place to start.

    The foundations of understanding the DataTrails platform are explained in the Overview. This will introduce the basic (and not so basic) concepts and take you through creating your first Asset and registering the first Event of your audit trail.

    The Administration section will show you how to manage your Tenancy and control access to your Assets.

    Check out the sub-sections below for more information!

    Overview →
    Core concepts and tasks
    Administration →
    Create users, set access rights and share Assets
    \ No newline at end of file +Sign Up

    Platform

    If you are new to DataTrails, this is the place to start.

    The foundations of understanding the DataTrails platform are explained in the Overview. This will introduce the basic (and not so basic) concepts and take you through creating your first Asset and registering the first Event of your audit trail.

    The Administration section will show you how to manage your Tenancy and control access to your Assets.

    Check out the sub-sections below for more information!

    Overview →
    Core concepts and tasks
    Administration →
    Create users, set access rights and share Assets
    \ No newline at end of file diff --git a/platform/overview/advanced-concepts/index.html b/platform/overview/advanced-concepts/index.html index a24de05f4..939d0383d 100644 --- a/platform/overview/advanced-concepts/index.html +++ b/platform/overview/advanced-concepts/index.html @@ -154,4 +154,4 @@

    Once applied the GIS coordinates on Events are immutable.

    Compliance Policies

    Note: Creation and editing of Compliance Policies is only supported through the API.
    Trust is subjective. Compliance is a judgement call. No matter what security technology you have in play, every trust decision you make will depend on the circumstances: who is accessing what; where they’re coming from; how sensitive an operation they’re attempting; the consequences of getting it wrong. An Asset that is safe in one context may not be in another.

    By maintaining a complete traceable record of Who Did What When to a Thing, DataTrails makes it possible for any authorized stakeholder to quickly and easily verify that critical processes have been followed and recorded correctly. And if they weren’t, the record makes it easy to discover where things went wrong and what to fix. For instance, missed or late maintenance rounds can be detected simply by spotting gaps in the maintenance record; cyber vulnerable devices can be found by comparing ideal baselines with patching records; out-of-order process execution and handling violations are visible to all; and back-dating is automatically detectable.

    All of this is very valuable in audit and RCA situations after an incident, where there is time to collect together Asset records, piece together the important parts, and analyze the meaning.

    But what if the same information could be used for real-time decision-making that might avert an incident? This is where DataTrails’ “compliance posture” APIs come in. These take the thinking and processing burden off the client by providing a single, simple API call to answer the complex question: “given all you know about this asset, should I trust it right now?”. Additionally, and crucially for sensitive use cases, the yes or no answer comes with a detailed defensible reason why which can be inspected by relevant stakeholders during or after the event.

    When put all together, this enables high quality decision making based on the best available data, even giving confidence to automated or AI systems to play a full part in operations. Assets can be checked as part of access control logic, prior to accepting data or commands from them, accepting a shipment, or anything else that is important to your business. Crucially, each stakeholder is able to define their own view on Compliance, meaning they can each apply their own unique lens and business concerns to the same evidence base.

    Compliance Policy Configuration

    In order to make these trust decisions, DataTrails can be configured with Compliance Policies to check Assets against. These policies specify things like tolerance for vulnerability windows, maintenance SLAs, or detecting unusual values for attributes. For example:

    • “Assets must be patched within 40 days of vulnerability notification”
    • “Maintenance calls must be answered within 72 hours”
    • “rad level must be less than 7”

    Policies can also declare relative tolerances, such as:

    • “No shipping transfer should be more than 10% longer than the average time”
    • “The reported weight of this container should be within 1 standard deviation of the historic mean”

    Individual assets either pass or fail, and organizations can calculate their overall security/compliance posture based on what proportion of their assets are breaching their policy set. Compliance signals can also be used to identify where risk lies in an organization and help to prioritize remedial activities.

    Types of Compliance Policy

    As with Assets and Events, Compliance Policies are very flexible and can be configured to answer a wide range of business problems. The following categories of policy are supported:

    • COMPLIANCE RICHNESS: This Compliance Policy checks whether a specific attribute of an Asset is within acceptable bounds.
      For example, “Weight attribute must be less than 1000 kg”
    • COMPLIANCE SINCE: This Compliance Policy checks if the time since the last occurrence of a specific Event Type has elapsed a specified threshold.
      For example, “Time since last Maintenance must be less than 72 hours”
    • COMPLIANCE CURRENT OUTSTANDING: This Compliance Policy will only pass if there is an associated closing event addressing a specified outstanding event.
      For example, checking there are no outstanding “Maintenance Request” Events that are not addressed by an associated “Maintenance Performed” Event.
    • COMPLIANCE_PERIOD_OUTSTANDING: This Compliance Policy will only pass if the time between a pair of correlated events did not exceed the defined threshold.
      For example, a policy checking that the time between “Maintenance Request” and “Maintenance Performed” Events does not exceed the maximum 72 hours.
    • COMPLIANCE_DYNAMIC_TOLERANCE: This Compliance Policy will only pass if the time between a pair of correlated events or the value of an attribute does not exceed the a variability from the usually observed values.
      For example, a policy checking that maintenance times are not considerably longer than normal, or the weight of a container is not much less than the typical average.
    Note: To correlate Events, define the attribute arc_correlation_value in the Event attributes and set it to the same value on each pair of Events that are to be associated.

    Perspectives

    In the Asset example above there is an at_time property, which reflects a date and time at which these attributes and values were contemporary. Usually this will just be the current system time, but with DataTrails it is possible to go back in time and ask the question “what would that asset have looked like to me had I looked at it last week/last year/before the incident?”. Using its high integrity record of Asset lineage, DataTrails can give clear and faithful answers to those questions with no fear of backdating, forgery, or repudiation getting in the way.

    To do this, simply add at_time=TIMESTAMP to your query. For example, to check the state an Asset was in at 15:30 UTC on 23rd June:

    curl -H "Authorization: Bearer $(cat .auth_token)" -H "Content-Type: application/json" https://app.datatrails.ai/archivist/v2/assets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?at_time=2021-06-23T15:30:00Z | jq 
     

    Compliance calls can be similarly modified to answer questions like “had I asked this question at the time, what would the answer have been?” or “had the AI asked this question, would it have made a better decision?”. This can be done by adding a compliant_at timestamp to the compliance request.

    That’s it

    These are all the basics of DataTrails. With this knowledge you can now jump straight into the API or try other topics on the -DataTrails Platform.

    \ No newline at end of file +DataTrails Platform.

    \ No newline at end of file diff --git a/platform/overview/core-concepts/index.html b/platform/overview/core-concepts/index.html index f1a16a830..79b6cc6ad 100644 --- a/platform/overview/core-concepts/index.html +++ b/platform/overview/core-concepts/index.html @@ -7,17 +7,16 @@

    Core Concepts

    DataTrails Core Concepts

    Tenancies

    A Tenancy is an Organization’s private area within DataTrails, containing Asset and Event data that build over time to create an Audit Trail. The user who created the Tenancy is the Administrator and has full administrative control over everything in that Tenancy. An Administrator can also create granular Access Policies which allow data from their Tenancy to be shared to other Tenancies; for example, Organization A would share Asset data from their Tenancy to Organization B’s Tenancy.

    Administrators may invite other user accounts into their Tenancy. The invited user needs to have signed up for DataTrails with the same email address as the invite, they will then be added to the Tenancy as a Non-Administrator. Non-Administrators start off with no permissions but can be given specific permissions (including being upgraded to an Administrator) by any existing Administrator in that Tenancy.

    Assets

    Assets are central to DataTrails. Each Asset Record represents a thing; this could be a file, a physical object, a smart device, or even a business process.

    A DataTrails Asset has a collection of attributes that describes its current state and, when combined with a complete life history of Events that brought it to that state, we have an immutable Audit Trail. DataTrails Asset attributes track anything deemed important. For example, a Document will have the attributes of author, title and a content hash and will have a history of different versions and release dates. A Shipping Container as an Asset might have the attributes of height, width and depth, and have a handling history of movements through ports. These are examples of completely different things that can have a Data Trails Audit Trail.

    Each Asset has a fixed identity across all stakeholders, ensuring that all relevant parties are collaborating on the same object and see the same history of the Asset at any given time when shared through Access Policies.

    Events

    Events are things that happen during an Asset’s lifecycle. Each Event Record contributes to the -‘Golden Thread’ of the audit trail by enriching the Asset’s history. Events can be used to add or update Asset information if they change the Asset’s state, but they also have their own attributes to add process detail and rich evidence.

    Events can never be deleted or modified. Events provide details on Asset attributes, such as updating the weight of a shipment, and/or details about the event itself, such as a recording a new document version.

    Proof Mechanisms

    Assets and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to being able to use them.

    When -creating an Asset, DataTrails uses a proof mechanism for that Asset and its Events. This determines how your data is recorded on the DataTrails blockchain.

    DataTrails attestations are committed to immutable storage that is underpinned by cryptographically verifiable Merkle Mountain Range data structures for long term verifiability, even when offline.

    Four Increasing Trust Levels

    In the customer’s environment, data can be tampered, shredded, backdated…

    Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However there could be a suspicion that DataTrails (or a hacker in our systems, or Microsoft under subpœna) could tamper with the data, or make it unavailable or something.

    Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable (as long people check). Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. If this checking is weak, and/or copies are not made, then in principle Data Trails could create forks.

    By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on to root holds DataTrails to account and prevents forks, and also prevents a kind of sybil attack that could otherwise be mounted by 3rd party verifiers. Even so, a tiny chance of tampering remains: DataTrails could possibly sign multiple MMRs and maintain multiple split histories, then present whichever version of the history is most advantageous.

    To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast to single, well known location outside of DataTrails control (such as a smart contract address on Ethereum, or an official X account).

    Access Policies

    Sharing the right amount of information with the consumers of your data is critical to creating a trustworthy shared history for any Asset. It is important that every participant be able to see and contribute to the management of those Assets without compromising security and private information. To ensure stakeholders can access only the Assets and attributes relevant to them, transactions are private by default, unless the Asset was created as a +‘Golden Thread’ of the audit trail by enriching the Asset’s history. Events can be used to add or update Asset information if they change the Asset’s state, but they also have their own attributes to add process detail and rich evidence.

    Events can never be deleted or modified. Events provide details on Asset attributes, such as updating the weight of a shipment, and/or details about the event itself, such as a recording a new document version.

    Proving Provenance

    Artifacts and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to knowing the information is secure and trustworthy.

    DataTrails attestations are committed to immutable storage that is underpinned by cryptographically verifiable Merkle Mountain Range data structures for long term verifiability, even when offline.

    Four Increasing Trust Levels

    At DataTrails we believe in holding ourselves to the same levels of accountability as our customers, and the Merkle Log proof mechanism provides the robustness, integrity and availability guarantees needed to ensure data authenticity in any digital or data supply chain. And you don’t have to just take our word for it: you can check.

    Here’s how it works:

    Without an Immutable Audit Trail, there is always the risk - or at least the suspicion - that data can be shredded, backdated or otherwise tampered with.

    Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However while the security and integrity of our customers’ data is our top priority, there could still be a suspicion that DataTrails (or a hacker in our systems, or our cloud service provider under subpœna) could tamper with the data, or make it unavailable.

    Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable. Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. These copies are great for availability and holding DataTrails accountable, but there is a risk that a kind of Sybil attack could be mounted where the community creates forks and then tries to accuse the DataTrails version of being wrong.

    By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on the root at once holds DataTrails to account and prevents forks and the Sybil attack mentioned above. Even so, a tiny chance of tampering remains: in principle, multiple MMRs could be signed, creating multiple versions of history.

    To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast so that it is clear that there is one, and only one, version of history to underpin your data authenticity.

    Access Policies

    Sharing the right amount of information with the consumers of your data is critical to creating a trustworthy shared history for any Asset. It is important that every participant be able to see and contribute to the management of those Assets without compromising security and private information. To ensure stakeholders can access only the Assets and attributes relevant to them, transactions are private by default, unless the Asset was created as a Public Asset. An Administrator defines how many of the Asset’s attributes the Access Policy permits a user to see so that they only see what they need to complete a task.

    An Attribute-Based Access Control (ABAC) policy is used to share with Non-Administrators within a Tenancy. An Organization-Based Access Control (OBAC) policy is used to share with the Administrators of another Tenancy. The Administrator of the external Tenancy may then use an ABAC policy to grant permissions to the relevant Non-Administrators of their Tenancy. In both cases, attribute-specific read and write access can be granted using fine-grained controls.

    The Public View

    Every Asset has a private view which is only visible to Tenancy Administrators and those who are given access through an Access Policy. Other Assets, such as those that meet the requirements of the Document Profile, have a Public View which is visible to everyone. The purpose of this view is to allow anyone to verify that the document that they are using is genuine and has not been altered. When the document Audit Trail is combined with Instaproof a user of your data can easily find out which version of a document they have and confirm that it is genuine.

    The Golden Thread

    Using the four concepts of Tenancy, Assets, Events and Access Policies it is possible to create a Golden Thread of evidence makes up the Data Trails Audit Trail. -This has many use cases relating to content authenticity but can also be applied to supply chain integrity and standards compliance, or fact anything where stakeholders need transparency and trust.

    The Golden Thread

    \ No newline at end of file +This has many use cases relating to content authenticity but can also be applied to supply chain integrity and standards compliance, or fact anything where stakeholders need transparency and trust.

    The Golden Thread

    \ No newline at end of file diff --git a/platform/overview/creating-an-asset/index.html b/platform/overview/creating-an-asset/index.html index 456e61357..f2af0be1b 100644 --- a/platform/overview/creating-an-asset/index.html +++ b/platform/overview/creating-an-asset/index.html @@ -153,4 +153,4 @@ -H "@$HOME/.datatrails/bearer-token.txt" \ https://app.datatrails.ai/archivist/v2/assets?attributes.arc_display_name=My%20First%20Container Here we see all details entered: The extended attributes and a history of Events recorded on the Asset.

    Note: After registration, Assets cannot be updated using the asset creation screens but an Asset’s Asset Attributes can be updated as part of an Event.

    For more information on creating Events, -click here.

    The first Event will always be the Asset Creation. In the next section, we will cover how to create your own Events for your Asset.

    \ No newline at end of file +click here.

    The first Event will always be the Asset Creation. In the next section, we will cover how to create your own Events for your Asset.

    \ No newline at end of file diff --git a/platform/overview/creating-an-event-against-an-asset/index.html b/platform/overview/creating-an-event-against-an-asset/index.html index 2d6eee751..a10995dfa 100644 --- a/platform/overview/creating-an-event-against-an-asset/index.html +++ b/platform/overview/creating-an-event-against-an-asset/index.html @@ -153,4 +153,4 @@ -H "@$HOME/.datatrails/bearer-token.txt" \ https://app.datatrails.ai/archivist/v2/assets/<asset-id>/events/<event-id> Please see the -Administration section for information on how to manage your assets

    In the next section we look at a specific type of Asset, the Document Profile Asset.

    \ No newline at end of file +Administration section for information on how to manage your assets

    In the next section we look at a specific type of Asset, the Document Profile Asset.

    \ No newline at end of file diff --git a/platform/overview/index.html b/platform/overview/index.html index e08bc7807..65ad4e003 100644 --- a/platform/overview/index.html +++ b/platform/overview/index.html @@ -5,4 +5,4 @@ \ No newline at end of file +Sign Up \ No newline at end of file diff --git a/platform/overview/instaproof/index.html b/platform/overview/instaproof/index.html index a7ab78292..e26a402f2 100644 --- a/platform/overview/instaproof/index.html +++ b/platform/overview/instaproof/index.html @@ -7,9 +7,9 @@

    Instaproof

    Instaproof allows anonymous access to the Audit Trail of a file. providing data provenance and authenticity with a simple drag-and-drop.

    Instaproof will search amongst the Publicly Attested assets that have been registered with the Document Profile and return a list of all assets that have a matching hash value.

    The initial version of a document is registered as a document profile asset. New versions of the document are published as events against that asset. See Document Profile more more information.

    Using the Instaproof UI

    1. Using the sidebar, select Instaproofand then drag a document into the search area

      Instaproof Search Area

    2. Document not found
      If the document that you are verifying has not been found, you will see a red response banner.

      Document Not Found
      The possible reasons for this outcome are:

      • The document owner has not registered the document in their DataTrails tenancy
      • The document owner has not published this version of the document as an event
      • The document has been modified since it was registered with DataTrails


      In all cases you should contact the document owner to find out whether your document version can be trusted.

    3. Document Found

      Note: In this screenshot we are using the file greenfrog.jpg which can be downloaded from our Instaproof Samples page.
      If the document has been registered with DataTrails, you will see a green response banner together with a list of all the matching Document Profile Assets. This means that the version of the document that you have has a verifiable provenance record and an immutable audit trail.
      Document Found

    At the top of the image you can see the document that was checked and found on Instaproof.

    Note: We don’t need to access your document to find its provenance, everything that you see in the Instaproof results is held locally and was recorded by the document owner when the document was registered or events were recorded.

    You can check additional documents by dragging them on top of this area.

    Some of the results may be from verified organizations and others from unverified members of the DataTrails community. All results contribute something to the provenance and life history of this document.

    A Verified Organization has a -verified domain associated with their DataTrails account. This helps to confirm the identity of the document source and is likely the thing to look for if you want ‘official’ provenance records. A Verified Domain can be used to link an identity (such as a company or a brand name) to a DataTrails Tenancy.

    The Other Results results are those from from unverified DataTrails accounts - other members of the DataTrails community who have made claims or observations about the document you’re interested in.

    While they may seem less ‘official’ than verified account results, they may still be useful to you. The identity of all users making attestations in DataTrails is checked, recorded, and immutable, even if they are not (yet) associated with a verified domain name.

    What Do the Instaproof Results Mean

    Immutable Audit Trail

    Click on a result to see details of the document history. You will see the Event details of the version that matches your document on the right with a partial view of the Asset details for the latest version on the left. Close the Event details to see the full Asset details view.

    Asset Details Tab

    The Asset details tab shows the information about the asset attributes. -Includes the current version, the organization, and Verified Domain badge, if applicable.

    Public attestation and visibility - Public means that the document is publicly accessible using the public URL. Permissioned means that it is private and requires shared access to be enabled for a user to be able to view it.

    Type - For Document Profile Assets this will always be ‘Document’.

    Description - an optional description of the Asset

    Attributes - This drop down section contains any custom attributes that were added to the asset.

    Versions - the published versions of the document

    Note: The share button allows you to access and copy the permissioned and public (if enabled) links for the asset to share with other users. Private links are for logged in users with permissions assigned in an Access Policy, Public links are for everyone.
    Share Links

    The Event History tab shows the full history of Events including custom Events, new Versions and Withdraw Events.

    Click on the tab and select an Event to view the details.

    Event History Overview Tab

    The Overview information about the Event

    Event Identity - The Event ID will always be of the format ‘publicassets/<asset_id>/events/<event_id>’ for public assets or ‘assets/<asset_id>/events/<event_id>’ for private assets.

    Asset Identity - the ID of the parent Asset for this Event.

    Transaction - This link contains the details of the blockchain transaction.

    Transaction Details

    Type - For Document Profile Events this will always be ‘Publish’

    Document changes - The version and document hash for new version Events. There is no data here for custom Events.

    The Event attributes and Asset attributes tabs contain information about any custom attributes that were added or modified as part this Event.

    \ No newline at end of file +verified domain associated with their DataTrails account. This helps to confirm the identity of the document source and is likely the thing to look for if you want ‘official’ provenance records. A Verified Domain can be used to link an identity (such as a company or a brand name) to a DataTrails Tenancy.

    The Other Results results are those from from unverified DataTrails accounts - other members of the DataTrails community who have made claims or observations about the document you’re interested in.

    While they may seem less ‘official’ than verified account results, they may still be useful to you. The identity of all users making attestations in DataTrails is checked, recorded, and immutable, even if they are not (yet) associated with a verified domain name.

    What Do the Instaproof Results Mean?

    Immutable Audit Trail

    Click on a result to see details of the document history. You will see the Event details of the version that matches your document on the right with a partial view of the Asset details for the latest version on the left. Close the Event details to see the full Asset details view.

    Asset Details Tab

    The Asset details tab shows the information about the asset attributes. +Includes the current version, the organization, and Verified Domain badge, if applicable.

    Public attestation and visibility - Public means that the document is publicly accessible using the public URL. Permissioned means that it is private and requires shared access to be enabled for a user to be able to view it.

    Type - For Document Profile Assets this will always be ‘Document’.

    Description - an optional description of the Asset

    Attributes - This drop down section contains any custom attributes that were added to the asset.

    Versions - the published versions of the document

    Note: The share button allows you to access and copy the permissioned and public (if enabled) links for the asset to share with other users. Private links are for logged in users with permissions assigned in an Access Policy, Public links are for everyone.
    Share Links

    The Event History tab shows the full history of Events including custom Events, new Versions and Withdraw Events.

    Click on the tab and select an Event to view the details.

    Event History Overview Tab

    The Overview information about the Event

    Event Identity - The Event ID will always be of the format ‘publicassets/<asset_id>/events/<event_id>’ for public assets or ‘assets/<asset_id>/events/<event_id>’ for private assets.

    Asset Identity - the ID of the parent Asset for this Event.

    Transaction - This link contains the details of the Event transaction.

    Transaction Details

    Type - For Document Profile Events this will always be ‘Publish’

    Document changes - The version and document hash for new version Events. There is no data here for custom Events.

    The Event attributes and Asset attributes tabs contain information about any custom attributes that were added or modified as part this Event.

    \ No newline at end of file diff --git a/platform/overview/introduction/index.html b/platform/overview/introduction/index.html index 716122342..a2d783bcf 100644 --- a/platform/overview/introduction/index.html +++ b/platform/overview/introduction/index.html @@ -8,4 +8,4 @@ Sign Up

    Introduction

    Welcome to DataTrails

    DataTrails provides Provenance as a Service that continuously proves Who Did What When to all data types.

    DataTrails enables enterprises to build trust in data such as documents, images and sound files by ensuring that you know the origin and history of the data that you are using. -This can also be applied to multi-party Assets such as software and physical items allowing you to make sure that processes are fit for purpose to comply with IT controls, corporate policies, and government regulations.

    DataTrails permanently records evidence into an Immutable Audit Trail to bring the right level of trust in data for faster, confident decisions with lower business risk by combining:

    Metadata Governance - Empower the right people in organizations to set, enforce, and execute complex data sharing policies.

    Authenticated Provenance - Deliver full traceability on all internal and external data sources to speed and assure digital decisions.

    Continuous Accountability - Instantly auditable evidence “Proves Who Did What When” for any shared Asset to delight your GRC team.

    Persistent Integrity - Create a complete, unbroken, and permanent record of shared Event transactions, delivering continuous assurance for faster digital decisions.

    DataTrails delivers assured metadata in a single line of code in a way that makes recording and auditing the full lifecycle of a piece of data simple. Any authorized participant (including a user, a software agent or an endpoint device) can register the Events that they are involved in.
    Users of the data can see a full picture of the data’s origin and history and by understanding Who Did What When, human actors and software/AI systems can make stronger real-time judgments about the trustworthiness of your data.

    DataTrails Functionality

    \ No newline at end of file +This can also be applied to multi-party Assets such as software and physical items allowing you to make sure that processes are fit for purpose to comply with IT controls, corporate policies, and government regulations.

    DataTrails permanently records evidence into an Immutable Audit Trail to bring the right level of trust in data for faster, confident decisions with lower business risk by combining:

    Metadata Governance - Empower the right people in organizations to set, enforce, and execute complex data sharing policies.

    Authenticated Provenance - Deliver full traceability on all internal and external data sources to speed and assure digital decisions.

    Continuous Accountability - Instantly auditable evidence “Proves Who Did What When” for any shared Asset to delight your GRC team.

    Persistent Integrity - Create a complete, unbroken, and permanent record of shared Event transactions, delivering continuous assurance for faster digital decisions.

    DataTrails delivers assured metadata in a single line of code in a way that makes recording and auditing the full lifecycle of a piece of data simple. Any authorized participant (including a user, a software agent or an endpoint device) can register the Events that they are involved in.
    Users of the data can see a full picture of the data’s origin and history and by understanding Who Did What When, human actors and software/AI systems can make stronger real-time judgments about the trustworthiness of your data.

    DataTrails Functionality

    \ No newline at end of file diff --git a/platform/overview/public-attestation/index.html b/platform/overview/public-attestation/index.html index e3d83243d..af8c902ea 100644 --- a/platform/overview/public-attestation/index.html +++ b/platform/overview/public-attestation/index.html @@ -66,4 +66,4 @@ Assets API

    \ No newline at end of file +

    \ No newline at end of file diff --git a/platform/overview/registering-a-document-profile-asset/index.html b/platform/overview/registering-a-document-profile-asset/index.html index cdf7745a2..8241484ac 100644 --- a/platform/overview/registering-a-document-profile-asset/index.html +++ b/platform/overview/registering-a-document-profile-asset/index.html @@ -56,8 +56,8 @@ "behaviours": ["RecordEvidence"], "public": true } -
  • The Advanced Options tab is where you enter the Asset Attributes that are required for all asset types and also the optional document profile asset attributes.

    • Document Type - This is the class of the object; while it is arbitrary, it is best to have consistency amongst the type of Documents you use i.e. if it is a purchase order, the type could be Purchase Order, which will then be pre-populated for future Documents to use as their own types.
    • Proof Mechanism - The method used to commit the blockchain transaction.

    Please see our -Advanced Concepts section for more information on the Proof Mechanism for your Document

    Advanced Options

  • The Advanced Options tab is where you enter the Asset Attributes that are required for all asset types and also the optional document profile asset attributes.

    • Document Type - This is the class of the object; while it is arbitrary, it is best to have consistency amongst the type of Documents you use i.e. if it is a purchase order, the type could be Purchase Order, which will then be pre-populated for future Documents to use as their own types.
    • Proof Mechanism - The method used to record the transaction to the DataTrails distributed ledger.

    Please see our +Core Concepts section for more information on the Proof Mechanism for your Document

    Advanced Options

  • Here we see all details entered: The extended attributes and a history of Events recorded on the Document.

    Note: To update the details of your Asset after it has been created, you must create an Event containing Asset Attributes that conform to the Document Profile.

    For more information on creating Events, -click here.

    The first Event in the Event History will always be the Document Registration. In the next section, we will cover how to create your own Events for your Document.

    \ No newline at end of file +click here.

    The first Event in the Event History will always be the Document Registration. In the next section, we will cover how to create your own Events for your Document.

    \ No newline at end of file diff --git a/platform/overview/registering-an-event-against-a-document-profile-asset/index.html b/platform/overview/registering-an-event-against-a-document-profile-asset/index.html index e93c79b7b..b7bc8cb79 100644 --- a/platform/overview/registering-an-event-against-a-document-profile-asset/index.html +++ b/platform/overview/registering-an-event-against-a-document-profile-asset/index.html @@ -183,4 +183,4 @@

    To view the details of the Event you just created for My First Document, use:

    curl -v -X GET \
          -H "@$HOME/.datatrails/bearer-token.txt" \
          https://app.datatrails.ai/archivist/v2/assets/<asset-id>/events/<event-id>
    -

    \ No newline at end of file +

    \ No newline at end of file diff --git a/sales/contactus/index.html b/sales/contactus/index.html index d72b9f79b..07cd357bd 100644 --- a/sales/contactus/index.html +++ b/sales/contactus/index.html @@ -5,4 +5,4 @@
    \ No newline at end of file +Sign Up
    \ No newline at end of file diff --git a/sales/index.html b/sales/index.html index e3a3c2374..6b13ce328 100644 --- a/sales/index.html +++ b/sales/index.html @@ -5,4 +5,4 @@ \ No newline at end of file +Sign Up \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index d4289666f..6e1464e12 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -/platform/overview/introduction/2021-06-14T10:57:58+01:00weekly0.5/usecases/authenticity-and-attestation/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/platform/overview/core-concepts/2021-06-14T10:57:58+01:00weekly0.5/usecases/bill-of-materials/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/advanced-concepts/2024-03-19T10:57:58+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/usecases/state-machine/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/creating-an-asset/2021-05-18T14:52:25+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/creating-an-event-against-an-asset/2021-05-18T15:32:01+01:00weekly0.5/developers/developer-patterns/verifying-with-simple-hash/2021-05-18T14:52:25+01:00weekly0.5/platform/overview/registering-a-document-profile-asset/2023-06-29T15:11:03+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/registering-an-event-against-a-document-profile-asset/2023-07-26T13:07:55+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/platform/overview/instaproof/2023-07-18T12:10:19+01:00weekly0.5/platform/overview/public-attestation/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/identity-and-access-management/2021-06-14T10:57:58+01:00weekly0.5/platform/administration/verified-domain/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/sharing-access-inside-your-tenant/2021-05-18T15:33:03+01:00weekly0.5/platform/administration/sharing-access-outside-your-tenant/2021-05-18T15:33:31+01:00weekly0.5/platform/administration/dropbox-integration/2023-09-15T13:18:42+01:00weekly0.5/platform/administration/compliance-policies/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/grouping-assets-by-location/2021-05-18T15:32:27+01:00weekly0.5/glossary/common-datatrails-terms/2022-10-19T07:39:44-07:00weekly0.5/glossary/reserved-attributes/2022-10-19T07:39:44-07:00weekly0.5/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/system-api/2021-06-09T13:49:35+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/yaml-reference/story-runner-components/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/assets/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/events/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/locations/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/subjects/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/compliance/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/estate-info/2021-06-09T11:39:03+01:00weekly0.5/developers/developer-patterns/2023-05-31T10:14:18+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5/platform/administration/2023-06-01T10:14:18+01:00weekly0.5/developers/yaml-reference/2023-05-31T10:14:18+01:00weekly0.5/glossary/2021-06-09T10:19:37+01:00weekly0.5/usecases/2021-05-20T17:42:10+01:00weekly0.5/developers/api-reference/2021-06-09T10:19:37+01:00weekly0.5/platform/overview/2021-05-20T12:03:27+01:00weekly0.5/developers/2020-10-06T08:48:23+00:00weekly0.5/platform/2020-10-06T08:48:23+00:00weekly0.5/2020-10-06T08:47:36+00:00weekly0.5/contributors/weekly0.5 \ No newline at end of file +/platform/overview/introduction/2021-06-14T10:57:58+01:00weekly0.5/usecases/authenticity-and-attestation/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/platform/overview/core-concepts/2021-06-14T10:57:58+01:00weekly0.5/usecases/bill-of-materials/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/advanced-concepts/2024-03-19T10:57:58+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/usecases/state-machine/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/creating-an-asset/2021-05-18T14:52:25+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/creating-an-event-against-an-asset/2021-05-18T15:32:01+01:00weekly0.5/platform/overview/registering-a-document-profile-asset/2023-06-29T15:11:03+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/platform/overview/registering-an-event-against-a-document-profile-asset/2023-07-26T13:07:55+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/platform/overview/instaproof/2023-07-18T12:10:19+01:00weekly0.5/platform/overview/public-attestation/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/identity-and-access-management/2021-06-14T10:57:58+01:00weekly0.5/platform/administration/verified-domain/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/sharing-access-inside-your-tenant/2021-05-18T15:33:03+01:00weekly0.5/platform/administration/sharing-access-outside-your-tenant/2021-05-18T15:33:31+01:00weekly0.5/platform/administration/dropbox-integration/2023-09-15T13:18:42+01:00weekly0.5/platform/administration/compliance-policies/2021-05-18T14:52:25+01:00weekly0.5/platform/administration/grouping-assets-by-location/2021-05-18T15:32:27+01:00weekly0.5/glossary/common-datatrails-terms/2022-10-19T07:39:44-07:00weekly0.5/glossary/reserved-attributes/2022-10-19T07:39:44-07:00weekly0.5/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/yaml-reference/story-runner-components/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/assets/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/events/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/locations/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/subjects/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/compliance/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/estate-info/2021-06-09T11:39:03+01:00weekly0.5/developers/developer-patterns/2023-05-31T10:14:18+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5/platform/administration/2023-06-01T10:14:18+01:00weekly0.5/developers/yaml-reference/2023-05-31T10:14:18+01:00weekly0.5/glossary/2021-06-09T10:19:37+01:00weekly0.5/usecases/2021-05-20T17:42:10+01:00weekly0.5/developers/api-reference/2021-06-09T10:19:37+01:00weekly0.5/platform/overview/2021-05-20T12:03:27+01:00weekly0.5/developers/2020-10-06T08:48:23+00:00weekly0.5/platform/2020-10-06T08:48:23+00:00weekly0.5/2020-10-06T08:47:36+00:00weekly0.5/contributors/weekly0.5 \ No newline at end of file diff --git a/support/contactus/index.html b/support/contactus/index.html index a3494b060..d96ae55ce 100644 --- a/support/contactus/index.html +++ b/support/contactus/index.html @@ -5,4 +5,4 @@

    Contact Us

    For any queries please contact support@datatrails.ai

    \ No newline at end of file +Sign Up

    Contact Us

    For any queries please contact support@datatrails.ai

    \ No newline at end of file diff --git a/support/index.html b/support/index.html index 1e464798c..71ac763c6 100644 --- a/support/index.html +++ b/support/index.html @@ -5,4 +5,4 @@ \ No newline at end of file +Sign Up \ No newline at end of file diff --git a/usecases/authenticity-and-attestation/index.html b/usecases/authenticity-and-attestation/index.html index 3f00bab39..ddcd3e3cf 100644 --- a/usecases/authenticity-and-attestation/index.html +++ b/usecases/authenticity-and-attestation/index.html @@ -6,4 +6,4 @@

    Authenticity and Attestation

    Assurance with DataTrails

    A very simple yet powerful pattern for using DataTrails is the Authenticity pattern. This is a good choice when dealing with data or documents that need to be broadly proven. In a single action, files can be uploaded to DataTrails so their integrity, origin, and timestamps can be verified forever. Both private and public stakeholders relying on these files can verify that what they see on their screen is authentic and untampered.

    Example: Evidential Documents and Photographs

    There are a great many documents that serve as evidence in formal discussions: pictures of a traffic accident; education diplomas; contracts; statements of account. DataTrails adds strong integrity to any document to allow easy verification.

    Considerations

    Track Documents: Create a very simple Asset structure with minimal attributes to identify the document and store the key metadata, such as a hash of the document.

    Collections: If the document is strongly related to another one, consider adding and tracking them all as Events against a single Asset record.

    Versions: If the document is a new version of something already stored in DataTrails, then use Events to replace the document’s metadata with the updated version. Any authorized stakeholder fetching the Asset record will automatically get the most up-to-date version, and prior versions can be retrieved if necessary from the Event history.

    \ No newline at end of file +Use Cases

    Authenticity and Attestation

    Assurance with DataTrails

    A very simple yet powerful pattern for using DataTrails is the Authenticity pattern. This is a good choice when dealing with data or documents that need to be broadly proven. In a single action, files can be uploaded to DataTrails so their integrity, origin, and timestamps can be verified forever. Both private and public stakeholders relying on these files can verify that what they see on their screen is authentic and untampered.

    Example: Evidential Documents and Photographs

    There are a great many documents that serve as evidence in formal discussions: pictures of a traffic accident; education diplomas; contracts; statements of account. DataTrails adds strong integrity to any document to allow easy verification.

    Considerations

    Track Documents: Create a very simple Asset structure with minimal attributes to identify the document and store the key metadata, such as a hash of the document.

    Collections: If the document is strongly related to another one, consider adding and tracking them all as Events against a single Asset record.

    Versions: If the document is a new version of something already stored in DataTrails, then use Events to replace the document’s metadata with the updated version. Any authorized stakeholder fetching the Asset record will automatically get the most up-to-date version, and prior versions can be retrieved if necessary from the Event history.

    \ No newline at end of file diff --git a/usecases/bill-of-materials/index.html b/usecases/bill-of-materials/index.html index 3fe86a228..9b3eee517 100644 --- a/usecases/bill-of-materials/index.html +++ b/usecases/bill-of-materials/index.html @@ -11,4 +11,4 @@ NTIA SBOM Proof of Concept the need for strong stakeholder community management and a trusted SBOM data sharing mechanism which protects the interests of all parties.

    The DataTrails Software Package profile is a set of suggested Asset and Event attributes that offers a solution to this sharing and distribution problem: vendors retain control of their proprietary information and release processes while customers have assured and reliable visibility into their digital supply chain risks with reliable access to current and historical SBOM data for the components they rely on.

    As an Asset, a Software Package may hold many different SBOMs over its lifecycle representing the introduction of new releases and versions of the Software Package. Each ‘Release’ is recorded as an Event to capture the known SBOM at the time.

    If a particular Software Package has constituent components composed of other Software Package Assets this would be tracked within the SBOM of the component Supplied Software Package, ensuring full traceability across the Supply Chain.

    Considerations

    Key to any successful DataTrails integration is keeping the number of Asset attributes manageable and meaningful. Do not add every entry in the SBOM as an Asset attribute. Instead, preserve Asset attributes to carry essential metadata such as final build hashes and assured current versions, and put the full details of each released version in attachments and Events.

    Note: There are good standards for storing and exchanging SBOM data such as SWID/ISO/IEC 19770-2:2015, Cyclone DX, and -SPDX. DataTrails recommends adopting standard data formats wherever possible, as these vastly improve interoperability and utility of the data exchanged between DataTrails participants.

    SBOM as a living document: As a vendor, try to model each final software product as an Asset, and releases/updates to that software product as Events on that Asset. That way, a single Asset history contains all the patch versions of a pristine build standard.

    Link to real assets: In reality, not every machine is going to be patched and running identical versions of software, and certainly not the most up-to-date one. As a user of devices, try to link the SBOM from your vendor to the device by having Asset attributes for the Asset Identity of the vendor-published SBOM and the version installed on the device. That way it is easy to find devices that need attention following an SBOM update.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Typically, very few parties need to update the SBOM record, but many people will need to read it.

    Remember that DataTrails is a shared evidence platform. It is there to help share and publish the SBOM and create the trust and transparency that is demanded of modern systems, to ensure the security of the digital supply chain.

    \ No newline at end of file +SPDX. DataTrails recommends adopting standard data formats wherever possible, as these vastly improve interoperability and utility of the data exchanged between DataTrails participants.

    SBOM as a living document: As a vendor, try to model each final software product as an Asset, and releases/updates to that software product as Events on that Asset. That way, a single Asset history contains all the patch versions of a pristine build standard.

    Link to real assets: In reality, not every machine is going to be patched and running identical versions of software, and certainly not the most up-to-date one. As a user of devices, try to link the SBOM from your vendor to the device by having Asset attributes for the Asset Identity of the vendor-published SBOM and the version installed on the device. That way it is easy to find devices that need attention following an SBOM update.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Typically, very few parties need to update the SBOM record, but many people will need to read it.

    Remember that DataTrails is a shared evidence platform. It is there to help share and publish the SBOM and create the trust and transparency that is demanded of modern systems, to ensure the security of the digital supply chain.

    \ No newline at end of file diff --git a/usecases/index.html b/usecases/index.html index 5a53272bb..93dc31eec 100644 --- a/usecases/index.html +++ b/usecases/index.html @@ -7,4 +7,4 @@

    Use Cases

    DataTrails is a powerful and flexible platform enabling users to record Who Did What & When to any content. To get the best out of the DataTrails it is important to model your real-world assets and business processes efficiently into DataTrails Assets and -Events.

    The three most common patterns are:

    • Authenticity and Attestation: proving the state of documents and data at a point in time. Also known as ‘Provenance’.
    • Bill of Materials: tracing the contents and composition of assets.
    • State Machine and Supply Chains: following the progress of an asset as it moves through a business process or lifecycle states.

    These are laid out in more detail here:


    \ No newline at end of file +Events.

    The three most common patterns are:

    • Authenticity and Attestation: proving the state of documents and data at a point in time. Also known as ‘Provenance’.
    • Bill of Materials: tracing the contents and composition of assets.
    • State Machine and Supply Chains: following the progress of an asset as it moves through a business process or lifecycle states.

    These are laid out in more detail here:


    \ No newline at end of file diff --git a/usecases/state-machine/index.html b/usecases/state-machine/index.html index e3b58d15b..61f76ff2c 100644 --- a/usecases/state-machine/index.html +++ b/usecases/state-machine/index.html @@ -6,4 +6,4 @@

    State Machine and Supply Chains

    Using DataTrails to map a process

    A common pattern for tracking an Asset lifecycle is the State Machine pattern. This is a good choice for multi-stakeholder process modelling, particularly where the order of operations is important or activities are triggered by actions of partners. Tracing multi-stakeholder business processes in DataTrails not only ensures transparency and accountability among parties, but is also faster and more reliable than typical cross-organization data sharing and process management involving phone calls and spreadsheets.

    Modelling such systems in DataTrails can help to rapidly answer questions like “are my processes running smoothly?”, “do I need to act?”, and “has this asset been correctly managed?”. In audit situations, the Asset histories also allow stakeholders to look back in time and ask “who knew what at the time? Could process violations have been detected earlier?”

    Example 1: Multi-party change management and approvals

    This pattern uses a purely virtual Asset to represent a policy or process and coordinate movement through that process, complete with multi-party inputs and approvals. The emphasis here is on Events rather than Asset attributes: What Happened? Who Was There? What evidence was used to decide to move to the next sage of the process?

    Considerations

    Keep the Asset simple: This model typically uses mostly non-modifying Events: “what happened” is more important than “what does this Asset look like?”. Use Asset attributes only to clearly identify the business process and store its current state. Otherwise, concentrate on recording the Who Did What When in detailed Event attributes and attachments.

    Map the business process: DataTrails is here to support business operations, not disturb them. Try to define one Event type for each stage of the process, so decisions and artifacts can be recorded naturally and completely during normal operations. In a mature business, there may be formal documents such as a Process Map (PM), Business Process Model (BPM) or Universal Modeling Language description of the process, its steps, and its approvers. Use this as a base if it is available.

    Record decisions clearly: Future decisions will depend on the evidence of past ones. Make sure that all relevant information is recorded in Event records in the right format for the intended consumer: if decisions are made by humans, rich attachments are a good option. If software or AI are involved, then Event attributes are often a stronger choice.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Generally, all parties will need read access to all the Events in the Asset history, but it may be convenient to restrict Event write access to mirror real-world approvers and actors.

    Example 2: Asset lifecycle tracing

    Tracking and tracing the lifecycle of physical Assets - from IoT Devices to skyscrapers - is a key strength of DataTrails. The ability to collect and examine the entire life history of critical Assets - their provenance - is crucial to building secure and trustworthy systems.

    Knowing what state an asset is in, whether or not it is compliant with organizational policy, and whether it needs any attention right now can help a connected system run smoothly. This eliminates the mundane in lifecycle management and allows expert resources to focus only on those parts of the estate that need attention.

    Considerations

    Build the Asset over time: The Asset lifecycle covers its entire life, from design and build to procurement and use, and finally disposal. During this time the Asset evolves and develops new properties and characteristics which are not necessarily foreseeable at creation time. DataTrails supports the addition of new properties at any time in the lifecycle so there is no need to design and fill in everything up-front. Start with a simple - even empty - Asset and let DataTrails track and trace the new properties as they naturally occur.

    Verify and confirm security data: For digital Assets, a lot of the effort spent on lifecycle management will be spent on software and firmware management. DataTrails’s ‘Witness Statement’ approach to creating Asset histories enables statements of intent to be recorded alongside ground truths. For example, a claimed software update next to a digitally signed platform attestation proving that it was done.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Generally, all parties will need read access to all the Events in the Asset history but it may be convenient to restrict Event write access to mirror real-world approvers and actors.

    Example 3: Supply Chain Handling

    “Multi-party business processes” and “Asset lifecycle tracing” are examples of a more general pattern: Supply Chain Handling.

    The ‘State Machine’ and ‘Lifecycle Tracing’ pattens are very similar, but the former puts a greater emphasis on modeling and tracing the Events while the latter concentrates more on the evolving state of the Assets. Combining these concepts makes it possible to easily trace complex multi-party supply chains without stakeholders having to adapt to each other’s ways of working. Everyone participates on their own terms using their own tools and processes, and DataTrails bridges the gap to make data available where it is needed.

    Considerations

    GIS position information: Make good use of the =arc_gis_*= attributes of Events in order to trace Where Who Did What When. Remember that physical environment can make a lot of difference to the virtual security of your Assets.

    Access Policies 1: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Nonetheless, complete supply chain operations are complex and thought must be given to Access Policy configuration to account for changes of custody.

    Access Policies 2: Consider how far up or down the supply chain visibility should be offered. For example, a customer/operator should be able to see manufacturing data but the manufacturer may or may not be entitled to see usage data.

    \ No newline at end of file +Use Cases

    State Machine and Supply Chains

    Using DataTrails to map a process

    A common pattern for tracking an Asset lifecycle is the State Machine pattern. This is a good choice for multi-stakeholder process modelling, particularly where the order of operations is important or activities are triggered by actions of partners. Tracing multi-stakeholder business processes in DataTrails not only ensures transparency and accountability among parties, but is also faster and more reliable than typical cross-organization data sharing and process management involving phone calls and spreadsheets.

    Modelling such systems in DataTrails can help to rapidly answer questions like “are my processes running smoothly?”, “do I need to act?”, and “has this asset been correctly managed?”. In audit situations, the Asset histories also allow stakeholders to look back in time and ask “who knew what at the time? Could process violations have been detected earlier?”

    Example 1: Multi-party change management and approvals

    This pattern uses a purely virtual Asset to represent a policy or process and coordinate movement through that process, complete with multi-party inputs and approvals. The emphasis here is on Events rather than Asset attributes: What Happened? Who Was There? What evidence was used to decide to move to the next sage of the process?

    Considerations

    Keep the Asset simple: This model typically uses mostly non-modifying Events: “what happened” is more important than “what does this Asset look like?”. Use Asset attributes only to clearly identify the business process and store its current state. Otherwise, concentrate on recording the Who Did What When in detailed Event attributes and attachments.

    Map the business process: DataTrails is here to support business operations, not disturb them. Try to define one Event type for each stage of the process, so decisions and artifacts can be recorded naturally and completely during normal operations. In a mature business, there may be formal documents such as a Process Map (PM), Business Process Model (BPM) or Universal Modeling Language description of the process, its steps, and its approvers. Use this as a base if it is available.

    Record decisions clearly: Future decisions will depend on the evidence of past ones. Make sure that all relevant information is recorded in Event records in the right format for the intended consumer: if decisions are made by humans, rich attachments are a good option. If software or AI are involved, then Event attributes are often a stronger choice.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Generally, all parties will need read access to all the Events in the Asset history, but it may be convenient to restrict Event write access to mirror real-world approvers and actors.

    Example 2: Asset lifecycle tracing

    Tracking and tracing the lifecycle of physical Assets - from IoT Devices to skyscrapers - is a key strength of DataTrails. The ability to collect and examine the entire life history of critical Assets - their provenance - is crucial to building secure and trustworthy systems.

    Knowing what state an asset is in, whether or not it is compliant with organizational policy, and whether it needs any attention right now can help a connected system run smoothly. This eliminates the mundane in lifecycle management and allows expert resources to focus only on those parts of the estate that need attention.

    Considerations

    Build the Asset over time: The Asset lifecycle covers its entire life, from design and build to procurement and use, and finally disposal. During this time the Asset evolves and develops new properties and characteristics which are not necessarily foreseeable at creation time. DataTrails supports the addition of new properties at any time in the lifecycle so there is no need to design and fill in everything up-front. Start with a simple - even empty - Asset and let DataTrails track and trace the new properties as they naturally occur.

    Verify and confirm security data: For digital Assets, a lot of the effort spent on lifecycle management will be spent on software and firmware management. DataTrails’s ‘Witness Statement’ approach to creating Asset histories enables statements of intent to be recorded alongside ground truths. For example, a claimed software update next to a digitally signed platform attestation proving that it was done.

    Access Policies: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Generally, all parties will need read access to all the Events in the Asset history but it may be convenient to restrict Event write access to mirror real-world approvers and actors.

    Example 3: Supply Chain Handling

    “Multi-party business processes” and “Asset lifecycle tracing” are examples of a more general pattern: Supply Chain Handling.

    The ‘State Machine’ and ‘Lifecycle Tracing’ pattens are very similar, but the former puts a greater emphasis on modeling and tracing the Events while the latter concentrates more on the evolving state of the Assets. Combining these concepts makes it possible to easily trace complex multi-party supply chains without stakeholders having to adapt to each other’s ways of working. Everyone participates on their own terms using their own tools and processes, and DataTrails bridges the gap to make data available where it is needed.

    Considerations

    GIS position information: Make good use of the =arc_gis_*= attributes of Events in order to trace Where Who Did What When. Remember that physical environment can make a lot of difference to the virtual security of your Assets.

    Access Policies 1: Always try to avoid proliferating Access Policies and make as few as possible with clear user populations and access rights. Nonetheless, complete supply chain operations are complex and thought must be given to Access Policy configuration to account for changes of custody.

    Access Policies 2: Consider how far up or down the supply chain visibility should be offered. For example, a customer/operator should be able to see manufacturing data but the manufacturer may or may not be entitled to see usage data.

    \ No newline at end of file
      (8r6JYVPm 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 DF}cO( diff --git a/developers/developer-patterns/verifying-with-simple-hash/index.html b/developers/developer-patterns/verifying-with-simple-hash/index.html deleted file mode 100644 index 02199585a..000000000 --- a/developers/developer-patterns/verifying-with-simple-hash/index.html +++ /dev/null @@ -1,87 +0,0 @@ -Archived: Verifying Assets and Events with Simple Hash - DataTrails -

      Archived: Verifying Assets and Events with Simple Hash

      Ensure Asset and Event Data Has Not Changed

      Verifying your Simple Hash events provides an additional layer of assurance to your data, so you can ensure that the information you have in your hand at a given time has not changed.

      This allows you to check for yourself, and prove to others, that any attestations that you made have not been changed since they were recorded in DataTrails.

      To verify your data, you may use the -DataTrails Simple Hash tool, available on GitHub.

      Please note that with Simple Hash, Events are committed to the DataTrails blockchain as a batch. Events with the blue tick have been committed to the blockchain as part of a batch, and will have a Transaction ID. With the free tier of DataTrails, Simple Hash batched commits happen every 30 days by default. For Public Assets, batched commits happen each day. If the tick mark is grey, your event has been confirmed in the system but not yet committed to the blockchain. Your event(s) must have a blue tick for transaction details to be available for data verification.

      Step-by-Step Guide for Using the Simple Hash Tool

      1. Retrieve your transaction information. This will give you the inputs you need in later steps to check the hash for that batch of Events.

        For Public Assets, retrieve the transaction information from the public view of the Asset and Events, or from the -Public Assets Endpoint.

        Select Audit/Filters from the sidebar and select a Transaction from the Events Overview List.

         <input type="image" data-bs-toggle="modal" data-bs-target="#AuditSearch" img class="img-fluid responsive" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" data-sizes="auto" data-srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" alt="Rectangle">
        - <noscript><img class="img-fluid" sizes="100vw" srcset="https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_900x0_resize_box_3.png 900w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_800x0_resize_box_3.png 800w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_500x0_resize_box_3.png 500w,https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/AuditSearch_hufcb3e0917fb361796421cfb6571efa9e_112790_200x0_resize_box_3.png 200w" src="/developers/developer-patterns/verifying-with-simple-hash/AuditSearch.png" width="1750" height="602" alt="Rectangle"></noscript>
        - <figcaption class="figure-caption"><em>Audit/Search</em></figcaption>
        -
      2. Use the -DataTrails Simple Hash tool to generate the hash of your Events.

        Use Python pip utility to install the datatrails-simplehash package. This package is supported for Python versions 3.7, 3.8, 3.9, and 3.10.

        python3 -m pip install datatrails-simplehash
        -

        You may then use the code to recreate the hash, using your -BEARER_TOKEN_FILE as the auth_token and the start_date and end_date copied in the last step:

        from datatrails_simplehash.v1 import (
        -    anchor_events,
        -    SimpleHashError,
        -)
        -
        -with open("credentials/token", mode="r", encoding="utf-8") as tokenfile:
        -    auth_token = tokenfile.read().strip()
        -
        -try:
        -    simplehash = anchor_events(
        -        "2022-10-07T07:01:34Z",
        -        "2022-10-16T13:14:56Z",
        -        "app.datatrails.ai",
        -        auth_token,
        -    )
        -except SimpleHashError as ex:
        -    print("Error", ex)
        -
        -else:
        -    print("simplehash=", simplehash)
        -

        Run your Python file to return the hash value.

        Note: SimpleHashClientAuthError is raised if the auth token is invalid or expired.

        Enter the query information you copied in the last step and run the command. See instructions for -creating your BEARER_TOKEN_FILE here.

        Commands can be executed anywhere using a virtual environment and published wheel. Credentials are stored in files within the credentials directory.

        Using an -auth token directly:

        python3 -m venv simplehash-venv
        -source simplehash-venv/bin/activate
        -python3 -m pip install -q datatrails_simplehash
        -
        -datatrails_simplehashv1 \
        -    --auth-token-file "credentials/token" \
        -    --start-time "2022-11-16T00:00:00Z" \
        -    --end-time "2022-11-17T00:00:00Z"
        -
        -deactivate
        -rm -rf simplehash-venv
        -

        Using a Client ID and Client Secret:

        python3 -m venv simplehash-venv
        -source simplehash-venv/bin/activate
        -python3 -m pip install -q datatrails_simplehash
        -
        -CLIENT_ID=$(cat credentials/client_id)
        -datatrails_simplehashv1 \
        -    --client-id "${CLIENT_ID}" \
        -    --client-secret-file "credentials/client_secret" \
        -    --start-time "2022-11-16T00:00:00Z" \
        -    --end-time "2022-11-17T00:00:00Z"
        -
        -deactivate
        -rm -rf simplehash-venv
        -
        Note: If you are using an environment other than app.datatrails.ai, add the URL with the --fqdn option. For example, --fqdn "app.datatrails-poc.ai".
      3. Compare the hash from your Transaction Details to the hash generated by the tool. If they match, your Event history has not changed.

      \ No newline at end of file diff --git a/developers/index.html b/developers/index.html index ad54257e9..6721a972e 100644 --- a/developers/index.html +++ b/developers/index.html @@ -5,4 +5,4 @@

      Developers

      If you are a developer who is looking to easily add provenance to their data, this section is for you.
      You may be building a new application or looking for a way to add functionality to something that you already use every day.

      The DataTrails REST API, python SDK, or the YAML runner provide a simple way for you to integrate a provenance layer into your existing data platform so that you do not need to change the way that your users work.

      Check out the sub-sections below for more information!

      Developer Patterns →
      Go here for information on setting up an App Registration, requesting an Access Token together with other developer concepts and user profile descriptions.

      API Reference →
      The DataTrails REST API endpoint examples and definitions can be found here.

      YAML Runner Reference →
      The YAML reference contains information and examples for those who work with YAML files and would prefer to use this method to access the API.

      Additional resources are available from our Python SDK and the Python Samples.

      \ No newline at end of file +Sign Up

      Developers

      If you are a developer who is looking to easily add provenance to their data, this section is for you.
      You may be building a new application or looking for a way to add functionality to something that you already use every day.

      The DataTrails REST API, python SDK, or the YAML runner provide a simple way for you to integrate a provenance layer into your existing data platform so that you do not need to change the way that your users work.

      Check out the sub-sections below for more information!

      Developer Patterns →
      Go here for information on setting up an App Registration, requesting an Access Token together with other developer concepts and user profile descriptions.

      API Reference →
      The DataTrails REST API endpoint examples and definitions can be found here.

      YAML Runner Reference →
      The YAML reference contains information and examples for those who work with YAML files and would prefer to use this method to access the API.

      Additional resources are available from our Python SDK and the Python Samples.

      \ No newline at end of file diff --git a/developers/sitemap.xml b/developers/sitemap.xml index ea215177f..4651ddec3 100644 --- a/developers/sitemap.xml +++ b/developers/sitemap.xml @@ -1 +1 @@ -/developers/developer-patterns/2023-05-31T10:14:18+01:00weekly0.5/developers/yaml-reference/2023-05-31T10:14:18+01:00weekly0.5/developers/api-reference/2021-06-09T10:19:37+01:00weekly0.5/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/verifying-with-simple-hash/2021-05-18T14:52:25+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5/developers/yaml-reference/story-runner-components/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/assets/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/events/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/locations/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/subjects/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/compliance/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/estate-info/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/system-api/2021-06-09T13:49:35+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5 \ No newline at end of file +/developers/developer-patterns/2023-05-31T10:14:18+01:00weekly0.5/developers/yaml-reference/2023-05-31T10:14:18+01:00weekly0.5/developers/api-reference/2021-06-09T10:19:37+01:00weekly0.5/developers/developer-patterns/getting-access-tokens-using-app-registrations/2023-09-27T11:12:25+01:00weekly0.5/developers/developer-patterns/containers-as-assets/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/namespace/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/document-profile/2021-05-31T15:18:01+01:00weekly0.5/developers/developer-patterns/software-package-profile/2023-06-26T11:56:01+01:00weekly0.5/developers/developer-patterns/scitt-api/2021-06-09T13:49:35+01:00weekly0.5/developers/yaml-reference/story-runner-components/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/assets/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/events/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/locations/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/subjects/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/compliance/2021-06-09T11:39:03+01:00weekly0.5/developers/yaml-reference/estate-info/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/app-registrations-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/assets-api/2021-06-09T11:39:03+01:00weekly0.5/developers/api-reference/attachments-api/2021-06-09T12:05:02+01:00weekly0.5/developers/api-reference/blobs-api/2021-06-09T13:32:57+01:00weekly0.5/developers/api-reference/compliance-api/2021-06-09T12:07:13+01:00weekly0.5/developers/api-reference/events-api/2021-06-09T11:48:40+01:00weekly0.5/developers/api-reference/iam-policies-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/iam-subjects-api/2021-06-09T12:02:15+01:00weekly0.5/developers/api-reference/locations-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/public-assets-api/2021-06-09T11:56:23+01:00weekly0.5/developers/api-reference/tenancies-api/2021-06-09T13:29:57+01:00weekly0.5/developers/api-reference/caps-api/2024-03-05T11:30:29+00:00weekly0.5 \ No newline at end of file diff --git a/developers/yaml-reference/assets/index.html b/developers/yaml-reference/assets/index.html index a148adb4b..8d9a1b5a3 100644 --- a/developers/yaml-reference/assets/index.html +++ b/developers/yaml-reference/assets/index.html @@ -6,8 +6,8 @@

      Assets YAML Runner

      Asset Actions Used with the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Assets Create

      Adding an asset_label allows your Asset to be referenced in later steps of the story. For example, if you want to add a Compliance Policy for the Asset after it is created.

      The arc_namespace (for the Asset) and the namespace (for the location) are used to distinguish between Assets and Locations created between runs of the story. Usually, these field values are derived from an environment variable ARCHIVIST_NAMESPACE (default value is namespace).

      The optional confirm: true entry means that the YAML Runner will wait for the Asset to be committed before moving on to the next step. This is beneficial if the Asset will be referenced in later steps.

      For example:

      ---
       steps:
         - step:
      @@ -82,4 +82,4 @@
             description: Wait for all Assets in the wipp namespace to be confirmed
           attrs:
             arc_namespace: wipp
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/compliance/index.html b/developers/yaml-reference/compliance/index.html index 4f0fe2863..1977d258f 100644 --- a/developers/yaml-reference/compliance/index.html +++ b/developers/yaml-reference/compliance/index.html @@ -6,8 +6,8 @@

      Compliance Policies YAML Runner

      Compliance Policy Actions Used with the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Compliance Policies Create

      This action creates a Compliance Policy that assets may be tested against.

      The specific fields required for creating Compliance Policies vary depending on the type of policy being used. Please see the Compliance Policies section for details regarding Compliance Policy types and YAML Runner examples of each.

      For example, a COMPLIANCE_RICHNESS policy that asserts radiation level must be less than 7:

      ---
       steps:
      @@ -29,4 +29,4 @@
             description: Check Compliance of EV pump 1.
             report: true
             asset_label: ev pump 1
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/estate-info/index.html b/developers/yaml-reference/estate-info/index.html index 479fdeaca..dbab25d1a 100644 --- a/developers/yaml-reference/estate-info/index.html +++ b/developers/yaml-reference/estate-info/index.html @@ -6,11 +6,11 @@

      Estate Information YAML Runner

      Retrieve Estate Info Using the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Composite Estate Info

      This action returns a report on the current number of Assets, Events, and locations in your DataTrails estate.

      ---
       steps:
         - step:
             action: COMPOSITE_ESTATE_INFO
             description: Estate Info Report
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/events/index.html b/developers/yaml-reference/events/index.html index ceefc1bdb..4c561edfa 100644 --- a/developers/yaml-reference/events/index.html +++ b/developers/yaml-reference/events/index.html @@ -6,8 +6,8 @@

      Events YAML Runner

      Event Actions Used with the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Events Create

      The asset_label must match the setting when the Asset was created in an earlier step. The asset_label may also be specified as the Asset ID of an existing Asset, in the form assets/<asset-id>.

      There are a few optional settings that can be used when creating Events. attachments uploads the attachment to DataTrails and the response is added to the Event before posting. location creates the location if it does not exist and adds it to the Event. The sbom setting uploads the SBOM to DataTrails and adds the response to the Event before posting.

      confirm: true tells the YAML Runner to wait for the Event to be committed before moving to the next step.

      For example:

      ---
       steps:
         - step:
      @@ -87,4 +87,4 @@
             arc_display_type: open
           asset_attrs:
             arc_display_type: door
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/index.html b/developers/yaml-reference/index.html index a036ed4f0..e88a64176 100644 --- a/developers/yaml-reference/index.html +++ b/developers/yaml-reference/index.html @@ -5,4 +5,4 @@
      \ No newline at end of file +Sign Up
      \ No newline at end of file diff --git a/developers/yaml-reference/locations/index.html b/developers/yaml-reference/locations/index.html index 53e20ba6f..8407b9f49 100644 --- a/developers/yaml-reference/locations/index.html +++ b/developers/yaml-reference/locations/index.html @@ -6,8 +6,8 @@

      Locations YAML Runner

      Location Actions Used with the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Locations Create If Not Exists

      This action checks to see if the location you are looking to create already exists, and if not, executes the creation of your new location. The action checks for a location with the same identifier to verify that the location does not already exist.

      If this action is executed as part of a series of YAML Runner steps, the location created can be referenced in later steps using the key location_label.

      When you create your location, you may also add location attributes. In the example below, information such as the facility address and type have been included, as well as contact information for the location’s reception:

      ---
       steps:
         - step:
      @@ -43,4 +43,4 @@
             print_response: true
           attrs:
             director: John Smith
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/story-runner-components/index.html b/developers/yaml-reference/story-runner-components/index.html index 3daea2f33..68016dd99 100644 --- a/developers/yaml-reference/story-runner-components/index.html +++ b/developers/yaml-reference/story-runner-components/index.html @@ -6,8 +6,8 @@

      YAML Runner Components

      Common Keys Used for the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      KeyValue
      actionRequired for every operation, the action specifies what function will be performed.
      descriptionOptional string that describes what the step is doing. For example, “Create the Asset My First Container”.
      asset_labelFor a series of steps run as one file, the Asset label could be a friendly name used by later steps to refer back to an Asset created in a previous step. If the Asset already exists, this field may be used to reference the Asset ID in the form assets/<asset-id>.
      location_labelFor a series of steps run as one file, the location label could be a friendly name used by later steps to refer back to a location created in a previous step. If the location already exists, this field may be used to reference the Location ID in the form locations/<location-id>.
      subject_labelFor a series of steps run as one file, the Subject label could be a friendly name used by later steps to refer back to a Subject created in a previous step. If the Subject already exists, this field may be used to reference the Subject ID in the form subjects/<subject-id>.
      print_responseSpecifying this field as true emits a JSON representation of the response, useful for debugging purposes.
      wait_timeOptional field specifying a number of seconds the story runner will pause before executing the next step. Useful for demonstration and/or testing Compliance Policies.

      Each step of the YAML Runner follows the same general pattern:

      ---
       steps:
         - step:
      @@ -23,4 +23,4 @@
             --client-id <your-client-id> \
             --client-secret <your-client-secret> \
             <path-to-yaml-file>
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/developers/yaml-reference/subjects/index.html b/developers/yaml-reference/subjects/index.html index 131c3265a..827da4220 100644 --- a/developers/yaml-reference/subjects/index.html +++ b/developers/yaml-reference/subjects/index.html @@ -6,8 +6,8 @@

      Subjects YAML Runner

      Subject Actions Used with the Yaml Runner

      Note: To use the YAML Runner you will need to install the datatrails-archivist python package.

      Click here for installation instructions.

      Subjects Create

      This action creates a Subject using their wallet_pub_key and tessera_pub_key. Adding a subject_label allows the Subject to be referenced in later YAML Runner steps.

      ---
       steps:
         - step:
      @@ -90,4 +90,4 @@
             print_response: true
             subject_label: A subject
       ``
      -

      \ No newline at end of file +

      \ No newline at end of file diff --git a/docs/api-reference/system-api/index.html b/docs/api-reference/system-api/index.html deleted file mode 100644 index 654633a4a..000000000 --- a/docs/api-reference/system-api/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://docs.datatrails.ai/developers/api-reference/system-api/ - \ No newline at end of file diff --git a/docs/beyond-the-basics/verifying-with-simple-hash/index.html b/docs/beyond-the-basics/verifying-with-simple-hash/index.html deleted file mode 100644 index b8723643a..000000000 --- a/docs/beyond-the-basics/verifying-with-simple-hash/index.html +++ /dev/null @@ -1,2 +0,0 @@ -https://docs.datatrails.ai/developers/developer-patterns/verifying-with-simple-hash/ - \ No newline at end of file diff --git a/glossary/common-datatrails-terms/index.html b/glossary/common-datatrails-terms/index.html index 7c36f17e4..0fd02996b 100644 --- a/glossary/common-datatrails-terms/index.html +++ b/glossary/common-datatrails-terms/index.html @@ -1,11 +1,11 @@ Common DataTrails Terms - DataTrails

      Glossary

      Select an option to to find out more about the terms used by DataTrails.

      • Common DataTrails Terms: A list of terms used by DataTrails.
      • Reserved Attributes: A list of Asset attributes that are used by the DataTrails platform and have a specific purpose.

      \ No newline at end of file +Sign Up

      Glossary

      Select an option to to find out more about the terms used by DataTrails.

      • Common DataTrails Terms: A list of terms used by DataTrails.
      • Reserved Attributes: A list of Asset attributes that are used by the DataTrails platform and have a specific purpose.

      \ No newline at end of file diff --git a/glossary/index.xml b/glossary/index.xml index 1beb1e28a..77f4f61cc 100644 --- a/glossary/index.xml +++ b/glossary/index.xml @@ -1,4 +1,4 @@ Glossary onhttps://docs.datatrails.ai/glossary/Recent content in Glossary onHugo 0.125.2en-GBWed, 19 Oct 2022 07:39:44 -0700Common DataTrails Termshttps://docs.datatrails.ai/glossary/common-datatrails-terms/Wed, 19 Oct 2022 07:39:44 -0700https://docs.datatrails.ai/glossary/common-datatrails-terms/Select a term for more information. -Term Definition ABAC Attribute-Based Access Control; policy that allows you to grant fine-grain access to members of your Tenancy access policy grants chosen Asset and Event access to stakeholders actor person/machine/software integration that created a particular entry on the provenance record administrator user with permission to see all Asset and Event information within a Tenancy, and to grant access to other users anchored Simple Hash events are committed to the blockchain by hashing them in batches.Reserved Attributeshttps://docs.datatrails.ai/glossary/reserved-attributes/Wed, 19 Oct 2022 07:39:44 -0700https://docs.datatrails.ai/glossary/reserved-attributes/Reserved attributes are asset attributes that are used by the DataTrails platform and have a specific purpose. All reserved attributes have the arc_ prefix. +Term Definition ABAC Attribute-Based Access Control; policy that allows you to grant fine-grain access to members of your Tenancy access policy grants chosen Asset and Event access to stakeholders actor person/machine/software integration that created a particular entry on the provenance record administrator user with permission to see all Asset and Event information within a Tenancy, and to grant access to other users asset a DataTrails Asset is an entry in your tenancy, which has a collection of attributes that describes its current state and a complete life history of Events asset attributes key-value pairs that represent information about an Asset asset ID the permanent unique identifier for an Asset, under which all provenance information (Events) can be found audit trail a formal record of activities (Events) that are made against a piece of data (an Asset) bearer token access token for DataTrails API; created using Custom Integration credentials behaviors detail what class of events in an Asset lifecycle you might wish to record compliance policy user-defined rule sets that Assets can be tested against custom integration client ID and client secret credentials that are used to access the DataTrails API.Reserved Attributeshttps://docs.datatrails.ai/glossary/reserved-attributes/Wed, 19 Oct 2022 07:39:44 -0700https://docs.datatrails.ai/glossary/reserved-attributes/Reserved attributes are asset attributes that are used by the DataTrails platform and have a specific purpose. All reserved attributes have the arc_ prefix. Select an attribute to see an example of it in use. Asset Attributes Attribute Meaning arc_description brief description of Asset or Event being recorded arc_display_name friendly name identifier for Assets, Events, and policies arc_display_type classification of the type of Asset being traced that can be used for grouping or access control arc_home_location_identity physical location to which an Asset nominally &lsquo;belongs&rsquo;. \ No newline at end of file diff --git a/glossary/reserved-attributes/index.html b/glossary/reserved-attributes/index.html index bac98f529..4d25c76a7 100644 --- a/glossary/reserved-attributes/index.html +++ b/glossary/reserved-attributes/index.html @@ -10,4 +10,4 @@

      Reserved Attributes

      Reserved attributes are asset attributes that are used by the DataTrails platform and have a specific purpose. All reserved attributes have the arc_ prefix.

      Select an attribute to see an example of it in use.

      Asset Attributes

      AttributeMeaning
      arc_descriptionbrief description of Asset or Event being recorded
      arc_display_namefriendly name identifier for Assets, Events, and policies
      arc_display_typeclassification of the type of Asset being traced that can be used for grouping or access control
      arc_home_location_identityphysical location to which an Asset nominally ‘belongs’. NOT related to the Asset’s position in space. For that, use arc_gis_* (below)
      arc_primary_imagean image attachment that will display as the thumbnail of an Asset

      Event Attributes

      AttributeMeaning
      arc_correlation_valuelinks Events together for evaluation in Compliance Policies
      arc_gis_lattags the Event as having happened at a particular latitude. Used in the DataTrails UI for mapping
      arc_gis_lngtags the Event as having happened at a particular longitude. Used in the DataTrails UI for mapping
      arc_descriptionbrief description of the Event being recorded
      arc_display_typeclassification of the type of Event being performed that can be used for grouping or access control
      arc_primary_imagean image attachment that will display as the thumbnail of the Event

      \ No newline at end of file +Glossary

      Reserved Attributes

      Reserved attributes are asset attributes that are used by the DataTrails platform and have a specific purpose. All reserved attributes have the arc_ prefix.

      Select an attribute to see an example of it in use.

      Asset Attributes

      AttributeMeaning
      arc_descriptionbrief description of Asset or Event being recorded
      arc_display_namefriendly name identifier for Assets, Events, and policies
      arc_display_typeclassification of the type of Asset being traced that can be used for grouping or access control
      arc_home_location_identityphysical location to which an Asset nominally ‘belongs’. NOT related to the Asset’s position in space. For that, use arc_gis_* (below)
      arc_primary_imagean image attachment that will display as the thumbnail of an Asset

      Event Attributes

      AttributeMeaning
      arc_correlation_valuelinks Events together for evaluation in Compliance Policies
      arc_gis_lattags the Event as having happened at a particular latitude. Used in the DataTrails UI for mapping
      arc_gis_lngtags the Event as having happened at a particular longitude. Used in the DataTrails UI for mapping
      arc_descriptionbrief description of the Event being recorded
      arc_display_typeclassification of the type of Event being performed that can be used for grouping or access control
      arc_primary_imagean image attachment that will display as the thumbnail of the Event

      \ No newline at end of file diff --git a/index.html b/index.html index dccd16b63..667c31a68 100644 --- a/index.html +++ b/index.html @@ -5,4 +5,4 @@
      \ No newline at end of file +Sign Up
      \ No newline at end of file diff --git a/index.min.98521d1443290e16a61d8af6cc1dc252d3b52b9608286ae0ba41e11cd79733e1940967c466e3977102b2d324c0f5b56a3e0ba1c6f83b1a4ce43b90d6156f0a7a.js b/index.min.dfb2f0bc0875a13dbad2af830294dbc836a9a4492f797f9bb61f070ed64c9a4d64cc9eac2929b14417179bea10ab4f8df24e34a47d99d52600fd60ae0b39696c.js similarity index 97% rename from index.min.98521d1443290e16a61d8af6cc1dc252d3b52b9608286ae0ba41e11cd79733e1940967c466e3977102b2d324c0f5b56a3e0ba1c6f83b1a4ce43b90d6156f0a7a.js rename to index.min.dfb2f0bc0875a13dbad2af830294dbc836a9a4492f797f9bb61f070ed64c9a4d64cc9eac2929b14417179bea10ab4f8df24e34a47d99d52600fd60ae0b39696c.js index 31cffb5a6..6c02a62dc 100644 --- a/index.min.98521d1443290e16a61d8af6cc1dc252d3b52b9608286ae0ba41e11cd79733e1940967c466e3977102b2d324c0f5b56a3e0ba1c6f83b1a4ce43b90d6156f0a7a.js +++ b/index.min.dfb2f0bc0875a13dbad2af830294dbc836a9a4492f797f9bb61f070ed64c9a4d64cc9eac2929b14417179bea10ab4f8df24e34a47d99d52600fd60ae0b39696c.js @@ -399,11 +399,12 @@ These are examples of completely different things that

      Events are things that happen during an Asset’s lifecycle. Each Event Record contributes to the ‘Golden Thread’ of the audit trail by enriching the Asset’s history. Events can be used to add or update Asset information if they change the Asset’s state, but they also have their own attributes to add process detail and rich evidence.

      Events can never be deleted or modified. Events provide details on Asset attributes, such as updating the weight of a shipment, and/or details about the event itself, such as a recording a new document version.

      -

      Proof Mechanisms

      -

      Assets and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to being able to use them.

      -

      When -creating an Asset, DataTrails uses a proof mechanism for that Asset and its Events. This determines how your data is recorded on the DataTrails blockchain.

      +

      Proving Provenance

      +

      Artifacts and Events are core to the DataTrails platform, and being able to quickly demonstrate proof that these artifacts have not been tampered is key to knowing the information is secure and trustworthy.

      DataTrails attestations are committed to immutable storage that is underpinned by cryptographically verifiable Merkle Mountain Range data structures for long term verifiability, even when offline.

      +

      Four Increasing Trust Levels

      +

      At DataTrails we believe in holding ourselves to the same levels of accountability as our customers, and the Merkle Log proof mechanism provides the robustness, integrity and availability guarantees needed to ensure data authenticity in any digital or data supply chain. And you don’t have to just take our word for it: you can check.

      +

      Here’s how it works:

      @@ -427,12 +428,11 @@ These are examples of completely different things that -

      Four Increasing Trust Levels

      -

      In the customer’s environment, data can be tampered, shredded, backdated…

      -

      Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However there could be a suspicion that DataTrails (or a hacker in our systems, or Microsoft under subpœna) could tamper with the data, or make it unavailable or something.

      -

      Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable (as long people check). Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. If this checking is weak, and/or copies are not made, then in principle Data Trails could create forks.

      -

      By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on to root holds DataTrails to account and prevents forks, and also prevents a kind of sybil attack that could otherwise be mounted by 3rd party verifiers. Even so, a tiny chance of tampering remains: DataTrails could possibly sign multiple MMRs and maintain multiple split histories, then present whichever version of the history is most advantageous.

      -

      To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast to single, well known location outside of DataTrails control (such as a smart contract address on Ethereum, or an official X account).

      +

      Without an Immutable Audit Trail, there is always the risk - or at least the suspicion - that data can be shredded, backdated or otherwise tampered with.

      +

      Once STORED in DataTrails and shared with partners, no party to the transaction can tamper, back-date or shred evidence. However while the security and integrity of our customers’ data is our top priority, there could still be a suspicion that DataTrails (or a hacker in our systems, or our cloud service provider under subpœna) could tamper with the data, or make it unavailable.

      +

      Once COMMITTED in the customer’s Tenancy Merkle tree in public blob storage, customers can prove their Events to 3rd parties, AND any tampering by DataTrails is detectable. Because this data is public, anyone can keep and maintain a copy just in case DataTrails’ version disappears. These copies are great for availability and holding DataTrails accountable, but there is a risk that a kind of Sybil attack could be mounted where the community creates forks and then tries to accuse the DataTrails version of being wrong.

      +

      By adding all Tenancies to the Merkle Mountain Range (MMR) and signing the root, Events move to the CONFIRMED stage. The signature on the root at once holds DataTrails to account and prevents forks and the Sybil attack mentioned above. Even so, a tiny chance of tampering remains: in principle, multiple MMRs could be signed, creating multiple versions of history.

      +

      To make the whole history and individual events UNEQUIVOCAL, the root hash of the Committed MMR is periodically broadcast so that it is clear that there is one, and only one, version of history to underpin your data authenticity.

      Access Policies

      Sharing the right amount of information with the consumers of your data is critical to creating a trustworthy shared history for any Asset. It is important that every participant be able to see and contribute to the management of those Assets without compromising security and private information. To ensure stakeholders can access only the Assets and attributes relevant to them, transactions are private by default, unless the Asset was created as a Public Asset. An Administrator defines how many of the Asset’s attributes the Access Policy permits a user to see so that they only see what they need to complete a task.

      @@ -1900,158 +1900,7 @@ Please see the