diff --git a/mithril-client-wasm/www/index.js b/mithril-client-wasm/www/index.js index 3ef0aaa637..f5468a5eab 100644 --- a/mithril-client-wasm/www/index.js +++ b/mithril-client-wasm/www/index.js @@ -4,7 +4,7 @@ import initMithrilClient, { MithrilClient } from "@mithril-dev/mithril-client-wa let aggregator_endpoint = "https://aggregator.testing-sanchonet.api.mithril.network/aggregator"; let genesis_verification_key = "5b3132372c37332c3132342c3136312c362c3133372c3133312c3231332c3230372c3131372c3139382c38352c3137362c3139392c3136322c3234312c36382c3132332c3131392c3134352c31332c3233322c3234332c34392c3232392c322c3234392c3230352c3230352c33392c3233352c34345d"; - +let certificate_chain_validated_occurs = false; const broadcast_channel = new BroadcastChannel("mithril-client"); broadcast_channel.onmessage = (e) => { let event = e.data; @@ -13,12 +13,20 @@ broadcast_channel.onmessage = (e) => { } else if (event.type == "CertificateValidated") { displayMessageInDOM(event.type, "A certificate has been validated, certificate_hash: " + event.payload.certificate_hash + ", event_id: " + event.payload.certificate_chain_validation_id); } else if (event.type == "CertificateChainValidated") { + certificate_chain_validated_occurs = true; displayMessageInDOM(event.type, "The certificate chain is valid, event_id: " + event.payload.certificate_chain_validation_id); } else { displayMessageInDOM(event); } }; +async function waitUntilCertificateChainValidatedOccursOrTimeout() { + for (let i = 0; i < 100 && !certificate_chain_validated_occurs; i++) { + await new Promise(r => setTimeout(r, 100)); + } + certificate_chain_validated_occurs = false; +} + function displayMessageInDOM(subject, message) { let div = document.createElement('div'); div.innerHTML = '' + subject + ': ' + message; @@ -33,6 +41,10 @@ function displayStepInDOM(number, content) { document.body.appendChild(div); } +function format_tx_list(transactions_hashes) { + return "" +} + await initMithrilClient(); let client = new MithrilClient( @@ -60,6 +72,7 @@ console.log("certificate:", certificate); displayStepInDOM(4, "Verifying certificate chain..."); let last_certificate_from_chain = await client.verify_certificate_chain(certificate.hash); +await waitUntilCertificateChainValidatedOccursOrTimeout(); displayMessageInDOM("Result", "certificate chain verified ✓"); console.log("verify_certificate_chain OK, last_certificate_from_chain:", last_certificate_from_chain); @@ -74,16 +87,24 @@ displayMessageInDOM("Result", "Mithril stake distribution message validated  console.log("valid_stake_distribution_message:", valid_stake_distribution_message); displayStepInDOM(7, "Getting transaction proof..."); -const proof = await client.unstable.get_cardano_transaction_proofs(["eac09f970f47ef3ab378db9232914e146773853397e79b904f1a45123a23c21f"]); -displayMessageInDOM("Proof tx hash", proof.transactions_hashes); -displayMessageInDOM("Proof certificate hash", proof.certificate_hash); +const proof = await client.unstable.get_cardano_transaction_proofs(["eac09f970f47ef3ab378db9232914e146773853397e79b904f1a45123a23c21f", "81fe7a5dab42867ef309b6d7210158bf99331884ac3c3b6c7188a8c9c18d5974", "320c13f4a3e51f6f4f66fcd9007e02bf658aa4ee9a88a509028d867d3b8a8e9a"]); +displayMessageInDOM("Certificate hash of the returned proof", proof.certificate_hash); +displayMessageInDOM("Transactions hashes included in the proof", format_tx_list(proof.transactions_hashes)); +displayMessageInDOM("Transactions hashes not included in the proof", format_tx_list(proof.non_certified_transactions)); displayStepInDOM(9, "Verifying certificate chain..."); let proof_certificate = await client.verify_certificate_chain(proof.certificate_hash); +await waitUntilCertificateChainValidatedOccursOrTimeout(); displayMessageInDOM("Result", "certificate chain verified ✓"); console.log("verify_certificate_chain OK, last_certificate_from_chain:", proof_certificate); displayStepInDOM(10, "Validating Cardano transaction proof message..."); -let valid_cardano_transaction_proof = await client.unstable.verify_cardano_transaction_proof_then_compute_message(proof, proof_certificate); -displayMessageInDOM("Result", "Cardano transaction proof message validated ✓"); -console.log("valid_cardano_transaction_proof:", valid_cardano_transaction_proof); +let protocol_message = await client.unstable.verify_cardano_transaction_proof_then_compute_message(proof, proof_certificate); +console.log("Ensuire that the proof is indeed signed in the associated certificate"); +if ((await client.verify_message_match_certificate(protocol_message, proof_certificate)) === true) { + displayMessageInDOM("Result", "The proof is signed in the associated certificate ✓"); +} else { + displayMessageInDOM("Result", "Proof and certificate doesn't match ✗"); +} +displayMessageInDOM("Transactions hashes certified", format_tx_list(proof.transactions_hashes)); +displayMessageInDOM("Transactions hashes not certified", format_tx_list(proof.non_certified_transactions)); diff --git a/mithril-client-wasm/www/package.json b/mithril-client-wasm/www/package.json index efa9a2963a..be5b210fd3 100644 --- a/mithril-client-wasm/www/package.json +++ b/mithril-client-wasm/www/package.json @@ -1,6 +1,6 @@ { "name": "www", - "version": "0.1.2", + "version": "0.1.3", "private": true, "scripts": { "build": "webpack --config webpack.config.js",