NGI Sargasso (Call 2) DPP-CRC project (online: https://hackmd.io/RXqCXeC0TzWHKGxNhfuEGg) # Use Case #3 - EPDs for Carbon-reduced Concrete with Heated Formwork #### Document Structure * [Description](#Description) * [Infrastructure](#Infrastructure) * [Identities](#Identities) * [Data Models](#Data-Models) * [Walk-Through](#Walk-Through) * [Video Recording](#Video-Recording) * [Sequence Diagram](#Sequence-Diagram) * [Step-by-Step Process](#Steps) * [Use Case Results](#Use-Case-Results) ## Description demonstrate EPDs covering A1-A5 from the building life-cycle by including heated formwork This final use case in the [DPP-CRC project](https://www.ownyourdata.eu/en/dpp-crc/) illustrates the process of generating Environmental Product Declarations (EPDs) at a concrete factory, assembling a building component using multiple concrete deliveries (with attached DPPs referencing the EPDs), and subsequently culminating a Digital Product Passport (DPP) of a complete building that integrates data also from energy consumed at the construction site covering phases A1-A5. ### Infrastructure The following technical components are used: <details><summary><strong>Private Data Store</strong> of a Concrete Producer:<br>stores data to generate EPDs</summary> URL: https://cp-private.data-container.net ```bash # Credentials APP_KEY: 5mdPuiwt-H50Ixl2rWRKVPKQMhfdYw5LngK6RwBwZ5c APP_SECRET: EFV6OgfmFj73XmAI-4ncU41MLjOACwvIU5jtlWXpFtA ``` Github Repo: https://github.com/OwnYourData/dc-cpprivate Docker Image: https://hub.docker.com/r/oydeu/cp-private </details> <details><summary><strong>EPD Calc Tool</strong> of a Concrete Producer:<br>computes EPD and accompanying Zero-Knowledge Proof</summary> URL: https://epd.ownyourdata.eu Github Repo: https://github.com/OwnYourData/zk-epd-calc Docker Image: https://hub.docker.com/r/oydeu/zk-epd-calc *Steps for manual testing:* * Create EPD: ```bash= echo '{"description":"C 25/30/B1","cement":150,"gravel":300,"water":250,"additives":300,"material":"super starker Eco++","factory":"Eggendorf"}' | \ curl -s -H "Content-Type: application/json" -d @- \ -X POST "https://epd.ownyourdata.eu/create?snark=false&zktype=Concrete" ``` * Verify EPD: ```bash= echo '{"description":"C 25/30/B1","factory":"Eggendorf","A13_gwp":165.4,"zkp":"1234abcd"}' | \ curl -s -H "Content-Type: application/json" -d @- \ -X POST https://epd.ownyourdata.eu/verify ``` </details> <details><summary><strong>Private Data Store</strong> of a Construction Site Manager:<br>stores data of concrete deliveries and allows to generate DPPs</summary> URL: https://sm-private.data-container.net ```bash # Credentials APP_KEY: qRXhTJVntLIQjKzllLD5gnE33QcVA81LAX1y7VZ7u4E APP_SECRET: HV6OflMxRu9MgofNjwmiUTftLVidgzvoaqXXF46_zwc ``` Github Repo: https://github.com/OwnYourData/dc-smprivate Docker Image: https://hub.docker.com/r/oydeu/sm-private </details> <details><summary><strong>Aggregation Tool</strong> for a Construction Site Manager:<br>aggregates concrete deliveries and Building parts</summary> URL: https://sm-zkp.data-container.net Github Repo: https://github.com/OwnYourData/zk-epd-calc Docker Image: https://hub.docker.com/r/oydeu/zk-epd-calc *Steps for manual testing:* * zkBuildingPartEPD ```bash= echo '{ "definition": { "building": "Vienna Central", "buildingPartID": "West Wing", "date": "2024-09-08", "usedMaterial": [{"amount": 4, "concreteDppDid": "did:oyd:zQmdV9FowzCHiSzic8mgAohe62Fz7vbQr8q45nHreGN6AE7"}] }, "dpps": [{"did": "did:oyd:zQmdV9FowzCHiSzic8mgAohe62Fz7vbQr8q45nHreGN6AE7", "ddp_vp": "<verifiable presentation>"}] }' | \ curl -s -H "Content-Type: application/json" -d @- \ -X POST "https://sm-zkp.data-container.net/create?snark=false&zktype=BuildingPart" ``` * zkBuildingEPD ```bash= echo '{ "definition": { "date": "2024-10-08", "building": "Vienna Central", "buildingParts": [{"buildingPartDppDid": "did:oyd:zQmf6uepGG49ZGsRqy5Vszceuf8xVhMZ7DavMQhgGLMEFkb"}], "siteEnergy": [{"amount": 2, "dppDid": "did:oyd:zQmf6uepGG49ZGsRqy5Vszceuf8xVhMZ7DavMQhgGLMEFkb"}] }, "buildingPartDpps": [{"did": "did:oyd:zQmdV9FowzCHiSzic8mgAohe62Fz7vbQr8q45nHreGN6AE7", "ddp_vp": "<verifiable presentation>"}] "siteEnergyDpps": [{"did": "did:oyd:zQmdV9FowzCHiSzic8mgAohe62Fz7vbQr8q45nHreGN6AE7", "ddp_vp": "<verifiable presentation>"}] }' | \ curl -s -H "Content-Type: application/json" -d @- \ -X POST "https://sm-zkp.data-container.net/create?snark=false&zktype=Building" ``` </details> <details><summary><strong>Data Intermediary</strong>: neutral actor <br>stores proof for DPPs and public information</summary> URL: https://concrete.go-data.at ```bash # Credentials APP_KEY: nENk5CBuUIQy0e24bewN-WJx8w-FkPUekG9oQtx9N-4 APP_SECRET: 1oiPZTxbnQyQnl48QsRR9LlsAPFUUVTV5o4aaqZdOIg ``` Github Repo: https://github.com/OwnYourData/dc-intermediary Docker Image: https://hub.docker.com/r/oydeu/dc-intermediary </details> <details><summary><strong>Sphereon Mobile Wallet</strong>: SSI wallet for Stakeholders<br> signs Verifiable Credentials with private key</summary> General information: https://sphereon.com/sphereon-products/sphereon-wallet/ Github: https://github.com/Sphereon-Opensource/mobile-wallet/ </details> &nbsp; ### Identities <details><summary><em>Concrete Producer (CP)</em><br>enters Concrete Mixture and creates DPP with EPD</summary> <ul> <li>uses Sphereon Mobile Wallet for signing data</li> <li>DID: <code>did:oyd:zQmVYKr85swPeCmg1rF5vqhNA2FYEFgGPaQr3mJoVYfAxe6</code><br>(note: will differ based on DID in wallet)</li> <li>command: <code>echo '{"authentication":["#key-doc"], "assertionMethod":["#key-doc"]}' | oydid create --doc-pwd cppwd --rev-pwd cprev -z 2</code></li> </ul> </details> <details><summary><em>Construction Site Manager (SM)</em><br>uses concrete deliverables and creates DPP for building parts</summary> <ul> <li>uses Sphereon Mobile Wallet for signing data</li> <li>DID: <code>did:oyd:zQmUaXtFWvJRPXfJxqMcXd4RRngdzsQeAPRZtnUZxuGB1q3</code><br>(note: will differ based on DID in wallet)</li> <li>command: <code>echo '{"authentication":["#key-doc"], "assertionMethod":["#key-doc"]}' | oydid create --doc-pwd smpwd --rev-pwd smrev -z 2</code></li> </ul> </details> <details><summary><em>Building Owner (BO)</em> <br>verifies DPPs</summary> <ul> <li>DID: <code>did:oyd:zQme8RBriYQSJFjXd6q559wJeSnMxGmTEgkX9GVdru9aTNh</code></li> <li>command: <code>echo '' | oydid create --doc-pwd bopwd --rev-pwd borev -z 2</code></li> </ul> </details> <details><summary><em>Data Intermediary (DI)</em> <br>public repository that can store data, DIDs, VCs, VPs, DPPs</summary> <ul> <li>DID: <code>did:oyd:zQmeUMAjpbEHegCsUDLK93oiyNwvGpdZwZxMpXoiLuBTt2J</code></li> <li>command: <code>echo '' | oydid create --doc-pwd dipwd --rev-pwd direv -z 1</code></li> </ul> </details> &nbsp; ### Data Models * [`ConcreteMixture`](https://soya.ownyourdata.eu/ConcreteMixture/yaml) - ingredients of concrete ([edit](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteMixture&data=%7B%7D) | [example](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteMixture&data=%7B%22description%22%3A%22C+25%2F30%2FB1%22%2C%22cement%22%3A15%2C%22gravel%22%3A20%2C%22water%22%3A25%2C%22additives%22%3A30%2C%22material%22%3A%22super+starker+Eco%2B%2B%22%2C%22factory%22%3A%22Eggendorf%22%7D)) * [`zkEPD`](https://soya.ownyourdata.eu/zkEPD/yaml) - Zero-Knowledge Proof for an EPD ([edit](https://soya-form.ownyourdata.eu/?schemaDri=zkEPD) | [example](https://soya-form.ownyourdata.eu/?schemaDri=zkEPD&data=%7B%22description%22%3A%22C+25%2F30%2FB1%22%2C%22factory%22%3A%22Eggendorf%22%2C%22A13_gwp%22%3A165.4%2C%22zkp%22%3A%221234abcd%22%7D)) * [`ConcreteDPP`](https://soya.ownyourdata.eu/ConcreteDPP/yaml) - Digital Product Passport for concrete ([edit](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteDPP) | [example](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteDPP&data=%7B%22date%22%3A%222024-05-29%22%2C%22epd%22%3A%7B%22description%22%3A%22C+25%2F30%2FB1%22%2C%22factory%22%3A%22Eggendorf%22%2C%22A13_gwp%22%3A165.4%2C%22zkp%22%3A%221234abcd%22%7D%2C%22volume%22%3A1.5%7D)) * [`ConcreteDelivery`](https://soya.ownyourdata.eu/ConcreteDelivery/yaml) - Verifiable Credential for concrete delivery ([edit](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteDelivery) | [example](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteDelivery&data=%7B%22timestamp%22%3A%222024-08-20T18%3A50%3A00%2B02%3A00%22%2C%22batch%22%3A%22did%3Aoyd%3AzQmQht8RJD6vx7nDvqjL8fdYPrTBJvDJui5oQVbW6cYJTw3%22%2C%22volume%22%3A3%2C%22transport%22%3A24.7%2C%22holder%22%3A%22did%3Aoyd%3AzQmZ83C6BAi5qYRwaAnofAud4ozubFjRhFiyTFe3bDNnARy%22%7D)) * [`BuildingPartDefinition`](https://soya.ownyourdata.eu/BuildingPartDefinition/yaml) - list of materials in a building part ([edit](https://soya-form.ownyourdata.eu/?schemaDri=BuildingPartDefinition) | [example](https://soya-form.ownyourdata.eu/?schemaDri=BuildingPartDefinition&data=%7B%22building%22%3A%22Vienna+Central%22%2C%22buildingPartID%22%3A%22West+Wing%22%2C%22date%22%3A%222024-09-08%22%2C%22usedMaterial%22%3A%5B%7B%22amount%22%3A4%2C%22concreteDppDid%22%3A%22did%3Aoyd%3AzQmdV9FowzCHiSzic8mgAohe62Fz7vbQr8q45nHreGN6AE7%22%2C%22select%22%3A%2234+-+2024-09-14%3A+C+25%2F30%2FB1+from+Company+B%22%7D%5D%7D)) * [`ZkBuildingPartEPD`](https://soya.ownyourdata.eu/ZkBuildingPartEPD/yaml) - Zero-Knowledge Proof for aggregated EPDs ([edit](https://soya-form.ownyourdata.eu/?schemaDri=ZkBuildingPartEPD) | [example](https://soya-form.ownyourdata.eu/?schemaDri=ZkBuildingPartEPD&data=%7B%22date%22%3A%222024-09-08%22%2C%22a14_gwp%22%3A123%2C%22building%22%3A%22Vienna+Central%22%2C%22buildingPartID%22%3A%22West+Wing%22%2C%22zkp%22%3A%227890wxyz%22%7D)) * [`BuildingPartDPP`](https://soya.ownyourdata.eu/BuildingPartDPP/yaml) - Digital Product passport for building part ([edit](https://soya-form.ownyourdata.eu/?schemaDri=BuildingPartDPP) | [example](https://soya-form.ownyourdata.eu/?schemaDri=BuildingPartDPP&data=%7B%22vp%22%3A%22https%3A%2F%2Fconcrete.go-data.at%2Fpresentations%2FzQm123%22%2C%22did%22%3A%22did%3Aoyd%3A123abc%22%2C%22epd%22%3A%7B%22zkp%22%3A%22abc890%22%2C%22date%22%3A%222024-09-08%22%2C%22a14_gwp%22%3A123%2C%22building%22%3A%22Vienna+Central%22%2C%22building_part_id%22%3A%22West+Wing%22%7D%7D)) * `EnergyConsumed` - Proof of record for consumed energy at site ([edit](https://soya-form.ownyourdata.eu/?schemaDri=EnergyConsumed) | [example](https://soya-form.ownyourdata.eu/?schemaDri=EnergyConsumed&data=%7B%22timestamp%22%3A%222024-11-28T14%3A56%3A03Z%22%2C%22description%22%3A%22Site+Power+%28Green+Energy%29%22%2C%22energy_kWh%22%3A24.8%2C%22gwp_kgCO2e%22%3A12%7D)) * `HeatedFormwork` - Prof of record for footprint of heated formwork ([edit](https://soya-form.ownyourdata.eu/?schemaDri=HeatedFormwork) | [example](https://soya-form.ownyourdata.eu/?schemaDri=HeatedFormwork&data=%7B%22description%22%3A%22Green+Energy%22%2C%22gwp%22%3A2%2C%22unit%22%3A%22kWh%22%2C%22siteEnergy%22%3A%5B%7B%7D%5D%2C%22timestamp%22%3A%222024-11-20T13%3A50%3A00%2B01%3A00%22%2C%22formwork%22%3A%22Heatform%2B%2B%22%2C%22energy_kWh%22%3A576.93%2C%22gwp_kgCO2e%22%3A283%2C%22avg_outside_temp%22%3A-2%7D)) * [`BuildingDefinition`](https://soya.ownyourdata.eu/BuildingDefinition/yaml) - list of building parts and energy consupmtion ([edit](https://soya-form.ownyourdata.eu/?schemaDri=BuildingDefinition) | [example](https://soya-form.ownyourdata.eu/?schemaDri=BuildingDefinition&data=%7B%22building%22%3A%22Vienna+Central%22%2C%22date%22%3A%222024-11-25%22%2C%22buildingParts%22%3A%5B%7B%22select%22%3A%2219+-+2024-09-08%3A+Vienna+Central+%28West+Wing%29%22%7D%2C%7B%22select%22%3A%2246+-+2024-11-18%3A+Vienna+Central+%28East+Wing%29%22%7D%5D%2C%22siteEnergy%22%3A%5B%7B%22select%22%3A%22Site+Power+%28DID%3A+did%3Aoyd%3AzQmWHrcact9L1ZWUUzzTQSSRHCVQnscAZ5aqcinvFhAxMrP%29%22%2C%22amount%22%3A1%7D%2C%7B%22amount%22%3A18%2C%22select%22%3A%22HeatForm%2B%2B+%28DID%3A+did%3Aoyd%3AzQmcevu788snBPFCd5XUU916oT6QvoZtHShCQiFKDBHHCwQ%29%22%7D%5D%7D)) * [`ZkBuildingEPD`](https://soya.ownyourdata.eu/ZkBuildingEPD/yaml) - list of building parts and energy consupmtion ([edit](https://soya-form.ownyourdata.eu/?schemaDri=ZkBuildingEPD) | [example](https://soya-form.ownyourdata.eu/?schemaDri=ZkBuildingEPD&data=%7B%22zkp%22%3A%22123abc%22%2C%22date%22%3A%222024-11-24%22%2C%22a15_gwp%22%3A456%2C%22building%22%3A%22my+Building%22%7D)) * [`BuildingDPP`](https://soya.ownyourdata.eu/BuildingDPP/yaml) - list of building parts and energy consupmtion ([edit](https://soya-form.ownyourdata.eu/?schemaDri=BuildingDPP) | [example](https://soya-form.ownyourdata.eu/?schemaDri=BuildingDPP&data=%7B%22zkp%22%3A%22123abc%22%2C%22date%22%3A%222024-11-24%22%2C%22a15_gwp%22%3A456%2C%22building%22%3A%22my+Building%22%2C%22epd%22%3A%7B%22building%22%3A%22my+Building%22%2C%22date%22%3A%222024-11-13%22%2C%22a15_gwp%22%3A123%2C%22zkp%22%3A%22789xyz%22%7D%2C%22did%22%3A%22did%3Aoyd%3A123%22%2C%22vp%22%3A%22zQmabc%22%7D)) &nbsp; ## Walk Through <a id="Video-Recording"></a>Video recording: https://youtu.be/9qzXDiLyh9Y ### Sequence Diagram ```plantuml @startuml box "\nServices Concrete Producer" #LightBlue actor "Concrete\nProducer" as cp participant "Online\nWallet" as cp_wallet database "Private\nData Store" as cp_store participant "Concrete\nEPD Calc" as epd end box box "\nServices Construction Manager" #Yellow actor "Construction\nManager" as cm participant "Online\nWallet" as cm_wallet database "Private\nData Store" as cm_store participant "Building Part\nEPD Calc" as agg end box box "\n Data\nIntermediary" database " " as disp box "\nServices Building Onwer\n" #LightGreen actor "Building\nOwner" as owner participant "Verification\nTool" as verifier cp -> cp_store: enter ConcreteMix data cp --> cp_store: trigger EPD calculation cp_store -> epd: send ConcreteMix epd -> cp_store: provide ConcreteMix EPD cp --> cp_store: trigger DPP creation cp_store -> cp_store: create\nConcrete DPP cp_store --> cp_wallet cp_wallet -> cp_store: sign DPP cp_store -> disp: publish Concrete DPP cp_store -> cp_wallet: create\ndelivery VC cm -> cp_wallet: read concrete delivery VCs cm --> cm_wallet: store\ndelivery VCs cm -> cm_store: enter building parts data cm_wallet --> cm_store: retrieve data\nfrom delivery VCs disp --> cm_store: retrieve data from DPPs cm_store -> agg: send BuildingPart agg -> cm_store: provide BuildingPart EPD\n(aggregation of parts) cm --> cm_store: trigger DPP creation cm_store -> cm_store: create\nBuildingPart DPP cm_store --> cm_wallet cm_wallet -> cm_store: sign DPP cm_store -> disp: publish BuildingPart DPP cm -> cm_store: enter building data (building\nparts + energy consumption) cm --> cm_store: trigger DPP creation cm_store -> cm_store: create Building DPP cm_store --> cm_wallet cm_wallet -> cm_store: sign DPP cm_store -> disp: publish Building DPP cm --> owner: provide building DPP owner --> disp: read\nDPPs owner -> verifier: validate DPPs\n(incl. ZKP) verifier --> owner: hierarchical list\nof DPPs @enduml ``` ### Steps ### Steps 1) Concrete Producer (CP) logs into private data store * url: https://cp-private.data-container.net/ App Key: `5mdPuiwt-H50Ixl2rWRKVPKQMhfdYw5LngK6RwBwZ5c` App Secret: `EFV6OgfmFj73XmAI-4ncU41MLjOACwvIU5jtlWXpFtA` 2) CP creates new record for a `ConcreteMixture` * **output:** new record example link: https://cp-private.data-container.net/?itemId=176 3) CP triggers "Generate EPD" for a "ConcreteMixture" record * **input:** record of structure `ConcreteMixture`<br><br> * **output:** `zkEPD` record example link: https://cp-private.data-container.net/?itemId=177 * **output:** `ConcreteDPP` record example link: https://cp-private.data-container.net/?itemId=178 4) CP triggers "Publish DPP" for a "ConcreteDPP" record * **input:** record of structure `ConcreteDPP` * enter date+volume * click "Publish DPP" to show page with QR Code * CP scans QR Code (referencing EPD-VC) with wallet * CP clicks "show Digital Product Passport" * display page with DID<br><br> * **outptut:** updated `ConcreteDPP` record with DID and link to VP example link: https://cp-private.data-container.net/?itemId=97 * DID: [`did:oyd:zQmQht8RJD6vx7nDvqjL8fdYPrTBJvDJui5oQVbW6cYJTw3`](https://dev.uniresolver.io/#did:oyd:zQmQht8RJD6vx7nDvqjL8fdYPrTBJvDJui5oQVbW6cYJTw3) * Verifiable Presentation: <br><span style="font-size:11px">[`https://concrete.go-data.at/presentations/zQmboVisouVKVfB1PduFgsGq4LCZWAY56x3ScXxMukgFdLs`](https://concrete.go-data.at/presentations/zQmboVisouVKVfB1PduFgsGq4LCZWAY56x3ScXxMukgFdLs)</span> 5) CP issues Verifiable Credential for `ConcreteDelivery` * **input:** enter data for a `ConcreteDelivery` record example link: https://cp-private.data-container.net/?itemId=179 * click "Show Delivery VC" * enter URL of online wallet from construction site: sm-private.data-container.net and click "Go" 6) Construction Site Manager (SM) accepts `ConcreteDelivery` VC * select record with schema `ReceivedConcreteDeliveryVCs` * click "Accept VC"<br><br> * **outptut:** new record `ConcreteDelivery` example: https://sm-private.data-container.net/?itemId=18 7) SM assembles concrete deliveries to a `BuildingPartDefinition` * **input:** enter data for `BuildingPartDefinition` record example link: https://sm-private.data-container.net/?itemId=19 8) Create a ZKP of aggregating the "BuildingPartDefintion" * select record with schema `BuildingPartDefintion` * click "Aggregate BuildingPart"<br><br> * **output:** * new record `ZkBuildingPartEPD` example: https://sm-private.data-container.net/?itemId=37 * new record `BuildingPartDPP` example: https://sm-private.data-container.net/?itemId=38 9) SM triggers "Publish DPP" for a `BuildingPartDPP` record * **input:** record of structure `BuildingPartDPP` * click "Publish DPP<br><br> * **outptut:** updated `BuildingPartDPP` record with DID and link to VP example link: https://sm-private.data-container.net/?itemId=38 * DID: [`did:oyd:zQmf6uepGG49ZGsRqy5Vszceuf8xVhMZ7DavMQhgGLMEFkb`](https://dev.uniresolver.io/#did:oyd:zQmf6uepGG49ZGsRqy5Vszceuf8xVhMZ7DavMQhgGLMEFkb) * Verifiable Presentation: <br><span style="font-size:11px">[`https://concrete.go-data.at/presentations/zQmfDjqDbDqu3yX93xyK5AeG3d6eS5kpjB8MjNcjvzj7dTG`](https://concrete.go-data.at/presentations/zQmfDjqDbDqu3yX93xyK5AeG3d6eS5kpjB8MjNcjvzj7dTG)</span> 10) SM assembles information for a `BuildingDefinition` * **input:** enter data for `BuildingDefinition` record example link: https://sm-private.data-container.net/?itemId=47 includes: * BuildingPartDefinitions * consumed energy at the construction site <details><summary>create passport for Site Power</summary> ```bash= echo '{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1", "https://w3id.org/security/suites/ed25519-2020/v1", "https://playground2.data-container.net/api/data?id=111&f=plain#" ], "credentialSubject": { "timestamp": "2024-11-28T14:56:03Z", "description": "Site Power (Green Energy)", "energy_kWh": 24.8, "gwp_kgCO2e": 12 } }' | oydid vc --issuer did:oyd:zQmUaXtFWvJRPXfJxqMcXd4RRngdzsQeAPRZtnUZxuGB1q3 --doc-pwd smpwd | oydid vp-push --location concrete.go-data.at --holder did:oyd:zQmUaXtFWvJRPXfJxqMcXd4RRngdzsQeAPRZtnUZxuGB1q3 --doc-pwd smpwd # created https://concrete.go-data.at/presentations/zQmSAeTnBvJh4BvY5nRDhhT7DzmRQnUPsQ6NcKsWTq9sjmX echo '{"service":[ { "id": "#product", "type": "ProductPassport", "serviceEndpoint": "https://concrete.go-data.at/presentations/zQmSAeTnBvJh4BvY5nRDhhT7DzmRQnUPsQ6NcKsWTq9sjmX" }, { "id": "#info", "type": "EnergyConsumed", "data": { "description": "Site Power (Green Energy)", "gwp": 12, "date": "2024-11-28", "kWh": 24.8 } } ]}' | oydid create # created did:oyd:zQmWHrcact9L1ZWUUzzTQSSRHCVQnscAZ5aqcinvFhAxMrP ``` </details> * use of appliances <details><summary>create passport for Heated Formwork</summary> ```bash= echo '{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1", "https://w3id.org/security/suites/ed25519-2020/v1", "https://playground2.data-container.net/api/data?id=112&f=plain#" ], "credentialSubject": { "timestamp": "2024-11-20T13:50:00+01:00", "formwork": "Heatform++", "energy_kWh": 576.93, "gwp_kgCO2e": 283, "avg_outside_temp": -2 } }' | oydid vc --issuer did:oyd:zQmUaXtFWvJRPXfJxqMcXd4RRngdzsQeAPRZtnUZxuGB1q3 --doc-pwd smpwd | oydid vp-push --location concrete.go-data.at --holder did:oyd:zQmUaXtFWvJRPXfJxqMcXd4RRngdzsQeAPRZtnUZxuGB1q3 --doc-pwd smpwd # created https://concrete.go-data.at/presentations/zQmeUvN56TPcvJsSv3XnEbHhpoY9qXHSgtAo3UvxSCSv19p echo '{"service":[ { "id": "#product", "type": "ProductPassport", "serviceEndpoint": "https://concrete.go-data.at/presentations/zQmeUvN56TPcvJsSv3XnEbHhpoY9qXHSgtAo3UvxSCSv19p" }, { "id": "#info", "type": "HeatedFormwork", "data": { "description": "Heatform++", "gwp": 283, "date": "2024-11-2ß", "kWh": 576.93 } } ]}' | oydid create # created did:oyd:zQmcevu788snBPFCd5XUU916oT6QvoZtHShCQiFKDBHHCwQ ``` </details> 11) Create a ZKP of aggregating the "BuildingDefintion" * select record with schema `BuildingDefintion` * click "Aggregate Building"<br><br> * **output:** * new record `ZkBuildingEPD` example: https://sm-private.data-container.net/?itemId=48 * new record `BuildingDPP` example: https://sm-private.data-container.net/?itemId=49 12) SM triggers "Publish DPP" for a `BuildingDPP` record * **input:** record of structure `BuildingDPP` * click "Publish DPP<br><br> * **outptut:** updated `BuildingDPP` record with DID and link to VP example link: https://sm-private.data-container.net/?itemId=49 * DID: [`did:oyd:zQmTJH9JqeGLd22p67WC1SmTmyTJfc1aGxFFL2xQNkMJuPQ`](https://dev.uniresolver.io/#did:oyd:zQmTJH9JqeGLd22p67WC1SmTmyTJfc1aGxFFL2xQNkMJuPQ) * Verifiable Presentation: <br><span style="font-size:11px">[`https://concrete.go-data.at/presentations/zQmUp5sajm29sb9H6b823JWAp8Ren5F1R79x7ebu3RzizZZ`](https://concrete.go-data.at/presentations/zQmUp5sajm29sb9H6b823JWAp8Ren5F1R79x7ebu3RzizZZ)</span> 13) Building Owner verifies DPP * resolve DID (e.g., with [Uniresolver](https://dev.uniresolver.io/#did:oyd:zQmf6uepGG49ZGsRqy5Vszceuf8xVhMZ7DavMQhgGLMEFkb)) and download data from service endpoint * perform the following checks: <details><summary>checks on the command line</summary> * integrity of Verifiable Presentation ```bash= curl -s https://concrete.go-data.at/presentations/zQmUp5sajm29sb9H6b823JWAp8Ren5F1R79x7ebu3RzizZZ | \ oydid vp-verify ``` * proof of correct calculation of GWP (global warming potential) using ZKP (Zero-Knowledge Proof) ```bash= curl -s https://concrete.go-data.at/presentations/zQmUp5sajm29sb9H6b823JWAp8Ren5F1R79x7ebu3RzizZZ | \ jq '.verifiableCredential.credentialSubject' | \ curl -s -H "Content-Type: application/json" -d @- \ -X POST https://sm-zkp.data-container.net/verify ``` </details> * check by clicking on "Validate Building DPP" example link: https://sm-private.data-container.net/?itemId=49 &nbsp; ## Use Case Results * identify available data and interfaces for involved stakeholders to better develop the business case for a production service * Identity Management (and specifically SSI - Self Souvereign Identity) are still abstract concepts in the construction industry and the use of digital wallet (mobile and online) confuses people * synchronization between Sphereon Online Wallet and Semantic Container is hard and the usage of different platforms is confusing for users; focus should be on technical concepts, e.g., credential exchange, use of supporting evidence * integration of material testing centres is vital to ensure the accuracy, reliability, and certification of the data within Digital Product Passports, enabling stakeholders to trust the documented material properties and environmental impact metrics