Skip to content

Commit 3f4b049

Browse files
authored
Merge pull request #1555 from input-output-hk/ensemble/enhance-www-wasm-demo
Enhance Cardano transaction part in `mithril-client-wasm/www`
2 parents 0945639 + 3dec292 commit 3f4b049

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

mithril-client-wasm/www/index.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import initMithrilClient, { MithrilClient } from "@mithril-dev/mithril-client-wa
44
let aggregator_endpoint = "https://aggregator.testing-sanchonet.api.mithril.network/aggregator";
55
let genesis_verification_key =
66
"5b3132372c37332c3132342c3136312c362c3133372c3133312c3231332c3230372c3131372c3139382c38352c3137362c3139392c3136322c3234312c36382c3132332c3131392c3134352c31332c3233322c3234332c34392c3232392c322c3234392c3230352c3230352c33392c3233352c34345d";
7-
7+
let certificate_chain_validated_occurs = false;
88
const broadcast_channel = new BroadcastChannel("mithril-client");
99
broadcast_channel.onmessage = (e) => {
1010
let event = e.data;
@@ -13,12 +13,20 @@ broadcast_channel.onmessage = (e) => {
1313
} else if (event.type == "CertificateValidated") {
1414
displayMessageInDOM(event.type, "A certificate has been validated, certificate_hash: " + event.payload.certificate_hash + ", event_id: " + event.payload.certificate_chain_validation_id);
1515
} else if (event.type == "CertificateChainValidated") {
16+
certificate_chain_validated_occurs = true;
1617
displayMessageInDOM(event.type, "The certificate chain is valid, event_id: " + event.payload.certificate_chain_validation_id);
1718
} else {
1819
displayMessageInDOM(event);
1920
}
2021
};
2122

23+
async function waitUntilCertificateChainValidatedOccursOrTimeout() {
24+
for (let i = 0; i < 100 && !certificate_chain_validated_occurs; i++) {
25+
await new Promise(r => setTimeout(r, 100));
26+
}
27+
certificate_chain_validated_occurs = false;
28+
}
29+
2230
function displayMessageInDOM(subject, message) {
2331
let div = document.createElement('div');
2432
div.innerHTML = '<strong>' + subject + ': </strong>' + message;
@@ -33,6 +41,10 @@ function displayStepInDOM(number, content) {
3341
document.body.appendChild(div);
3442
}
3543

44+
function format_tx_list(transactions_hashes) {
45+
return "<ul>"+transactions_hashes.map((tx) => "<li>"+tx+"</li>").join("")+"</ul>"
46+
}
47+
3648
await initMithrilClient();
3749

3850
let client = new MithrilClient(
@@ -60,6 +72,7 @@ console.log("certificate:", certificate);
6072

6173
displayStepInDOM(4, "Verifying certificate chain...");
6274
let last_certificate_from_chain = await client.verify_certificate_chain(certificate.hash);
75+
await waitUntilCertificateChainValidatedOccursOrTimeout();
6376
displayMessageInDOM("Result", "certificate chain verified &#x2713;");
6477
console.log("verify_certificate_chain OK, last_certificate_from_chain:", last_certificate_from_chain);
6578

@@ -74,16 +87,24 @@ displayMessageInDOM("Result", "Mithril stake distribution message validated &#x2
7487
console.log("valid_stake_distribution_message:", valid_stake_distribution_message);
7588

7689
displayStepInDOM(7, "Getting transaction proof...");
77-
const proof = await client.unstable.get_cardano_transaction_proofs(["eac09f970f47ef3ab378db9232914e146773853397e79b904f1a45123a23c21f"]);
78-
displayMessageInDOM("Proof tx hash", proof.transactions_hashes);
79-
displayMessageInDOM("Proof certificate hash", proof.certificate_hash);
90+
const proof = await client.unstable.get_cardano_transaction_proofs(["eac09f970f47ef3ab378db9232914e146773853397e79b904f1a45123a23c21f", "81fe7a5dab42867ef309b6d7210158bf99331884ac3c3b6c7188a8c9c18d5974", "320c13f4a3e51f6f4f66fcd9007e02bf658aa4ee9a88a509028d867d3b8a8e9a"]);
91+
displayMessageInDOM("Certificate hash of the returned proof", proof.certificate_hash);
92+
displayMessageInDOM("Transactions hashes included in the proof", format_tx_list(proof.transactions_hashes));
93+
displayMessageInDOM("Transactions hashes not included in the proof", format_tx_list(proof.non_certified_transactions));
8094

8195
displayStepInDOM(9, "Verifying certificate chain...");
8296
let proof_certificate = await client.verify_certificate_chain(proof.certificate_hash);
97+
await waitUntilCertificateChainValidatedOccursOrTimeout();
8398
displayMessageInDOM("Result", "certificate chain verified &#x2713;");
8499
console.log("verify_certificate_chain OK, last_certificate_from_chain:", proof_certificate);
85100

86101
displayStepInDOM(10, "Validating Cardano transaction proof message...");
87-
let valid_cardano_transaction_proof = await client.unstable.verify_cardano_transaction_proof_then_compute_message(proof, proof_certificate);
88-
displayMessageInDOM("Result", "Cardano transaction proof message validated &#x2713;");
89-
console.log("valid_cardano_transaction_proof:", valid_cardano_transaction_proof);
102+
let protocol_message = await client.unstable.verify_cardano_transaction_proof_then_compute_message(proof, proof_certificate);
103+
console.log("Ensuire that the proof is indeed signed in the associated certificate");
104+
if ((await client.verify_message_match_certificate(protocol_message, proof_certificate)) === true) {
105+
displayMessageInDOM("Result", "The proof is signed in the associated certificate &#x2713;");
106+
} else {
107+
displayMessageInDOM("Result", "Proof and certificate doesn't match &#x2717;");
108+
}
109+
displayMessageInDOM("Transactions hashes certified", format_tx_list(proof.transactions_hashes));
110+
displayMessageInDOM("Transactions hashes not certified", format_tx_list(proof.non_certified_transactions));

mithril-client-wasm/www/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "www",
3-
"version": "0.1.2",
3+
"version": "0.1.3",
44
"private": true,
55
"scripts": {
66
"build": "webpack --config webpack.config.js",

0 commit comments

Comments
 (0)