From 673466e8885d497d9521324e87878a86cd67437a Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 2 Aug 2022 14:07:57 +0300 Subject: [PATCH 1/7] add VoteTally decrypting doc --- chain-impl-mockchain/doc/format.abnf | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/chain-impl-mockchain/doc/format.abnf b/chain-impl-mockchain/doc/format.abnf index 50188412f..7bb1570f0 100644 --- a/chain-impl-mockchain/doc/format.abnf +++ b/chain-impl-mockchain/doc/format.abnf @@ -44,6 +44,12 @@ FRAGMENT-SPEC = %x00 INITIAL / %x07 POOL-UPDATE / %x08 UPDATE-PROPOSAL / %x09 UPDATE-VOTE + / %x0a VOTE-PLAN + / %x0b VOTE-CAST + / %x0c VOTE-TALLY + / %x0d MINT-TOKEN + / %x0e EVM + / %x0f EVM-MAPPING ; #################### ; FRAGMENT only present in genesis block @@ -139,6 +145,37 @@ CHANGES = SIZE-ELEMENT-16BIT ; number of changes PROPOSAL-ID = FRAGMENT-ID +; #################### +; FRAGMENT Vote plan, vote cast, vote tally +; #################### + +VOTE-PLAN = PLAN-CERT IOW BFT-SIGNATURE +VOTE-CAST = CAST-CERT IOW BFT-SIGNATURE +VOTE-TALLY = TALLY-CERT IOW BFT-SIGNATURE + +PLAN-CERT = VOTE-START VOTE-END COMMITTE-END PROPOSALS PAYLOAD-TYPE + +VOTE-START = BLOCK-DATE +VOTE-END = BLOCK-DATE +COMMITTE-END = BLOCK-DATE +PROPOSALS = SIZE-ELEMENT-8BIT *PROPOSAL-ELEMENT +PROPOSAL-ELEMENT = TODO + +CAST-CERT = TODO + +TALLY-CERT = VOTE-PLAN-ID PAYLOAD +PAYLOAD = %x01 ; Public payload + / %x02 PRIVATE-PAYLOAD ; Private payload +PRIVATE-PAYLOAD = SIZE-ELEMENT-8BIT *PAYLOAD-ELEMENT +PAYLOAD-ELEMENT = MEMBERS-SIZE OPTIONS-SIZE *MEMBER-ELEMENT *OPTION-ELEMENT +MEMBERS-SIZE = SIZE-ELEMENT-8BIT +OPTIONS-SIZE = SIZE-ELEMENT-8BIT +MEMBER-ELEMENT = *SHARE-ELEMENT ; size is equal to the OPTIONS-SIZE value +SHARE-ELEMENT = SIZE-ELEMENT-64BIT SIZE-ELEMENT-65BIT +OPTION-ELEMENT = U64 + +VOTE-PLAN-ID = 32OCTET + ; #################### ; TRANSACTION CONSTRUCTION ; From 47db07af2b635fcebf544e509ba3bc4061121b3f Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 2 Aug 2022 14:30:09 +0300 Subject: [PATCH 2/7] add CAST-CERT doc description --- chain-impl-mockchain/doc/format.abnf | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/chain-impl-mockchain/doc/format.abnf b/chain-impl-mockchain/doc/format.abnf index 7bb1570f0..42e616645 100644 --- a/chain-impl-mockchain/doc/format.abnf +++ b/chain-impl-mockchain/doc/format.abnf @@ -161,13 +161,22 @@ COMMITTE-END = BLOCK-DATE PROPOSALS = SIZE-ELEMENT-8BIT *PROPOSAL-ELEMENT PROPOSAL-ELEMENT = TODO -CAST-CERT = TODO - -TALLY-CERT = VOTE-PLAN-ID PAYLOAD -PAYLOAD = %x01 ; Public payload - / %x02 PRIVATE-PAYLOAD ; Private payload -PRIVATE-PAYLOAD = SIZE-ELEMENT-8BIT *PAYLOAD-ELEMENT -PAYLOAD-ELEMENT = MEMBERS-SIZE OPTIONS-SIZE *MEMBER-ELEMENT *OPTION-ELEMENT +CAST-CERT = VOTE-PLAN-ID PROPOSAL-INDEX CAST-PAYLOAD +PROPOSAL-INDEX = U8 +CAST-PAYLOAD = %x01 CHOICE; Public payload + / %x02 ECRYPTED-VOTE PROOF-VOTE ; Private payload +CHOICE = U8 +ECRYPTED-VOTE = SIZE-ELEMENT-8BIT *CYPHER-TEXT +CYPHER-TEXT = 2 * SIZE-ELEMENT-65BIT +PROOF-VOTE = SIZE-ELEMENT-8BIT ANNOUNCEMENT CYPHER-TEXT R-RESPONSE +ANNOUNCEMENT = 3 * SIZE-ELEMENT-65BIT +R-RESPONSE = 2 * SIZE-ELEMENT-65BIT + +TALLY-CERT = VOTE-PLAN-ID TALLY-PAYLOAD +TALLY-PAYLOAD = %x01 ; Public payload + / %x02 PRIVATE-TALLY ; Private payload +PRIVATE-TALLY = SIZE-ELEMENT-8BIT *TALLY-ELEMENT +TALLY-ELEMENT = MEMBERS-SIZE OPTIONS-SIZE *MEMBER-ELEMENT *OPTION-ELEMENT MEMBERS-SIZE = SIZE-ELEMENT-8BIT OPTIONS-SIZE = SIZE-ELEMENT-8BIT MEMBER-ELEMENT = *SHARE-ELEMENT ; size is equal to the OPTIONS-SIZE value From cb107d59b082e0a4d979328040b6f123b24bf46d Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 2 Aug 2022 17:38:30 +0300 Subject: [PATCH 3/7] fixed suggestions --- chain-impl-mockchain/doc/format.abnf | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/chain-impl-mockchain/doc/format.abnf b/chain-impl-mockchain/doc/format.abnf index 42e616645..43fb78c50 100644 --- a/chain-impl-mockchain/doc/format.abnf +++ b/chain-impl-mockchain/doc/format.abnf @@ -149,9 +149,9 @@ PROPOSAL-ID = FRAGMENT-ID ; FRAGMENT Vote plan, vote cast, vote tally ; #################### -VOTE-PLAN = PLAN-CERT IOW BFT-SIGNATURE -VOTE-CAST = CAST-CERT IOW BFT-SIGNATURE -VOTE-TALLY = TALLY-CERT IOW BFT-SIGNATURE +VOTE-PLAN = PLAN-CERT IOW ED25519-SIGNATURE +VOTE-CAST = CAST-CERT IOW +VOTE-TALLY = TALLY-CERT IOW PLAN-CERT = VOTE-START VOTE-END COMMITTE-END PROPOSALS PAYLOAD-TYPE @@ -164,13 +164,14 @@ PROPOSAL-ELEMENT = TODO CAST-CERT = VOTE-PLAN-ID PROPOSAL-INDEX CAST-PAYLOAD PROPOSAL-INDEX = U8 CAST-PAYLOAD = %x01 CHOICE; Public payload - / %x02 ECRYPTED-VOTE PROOF-VOTE ; Private payload + / %x02 ENCRYPTED-VOTE PROOF-VOTE ; Private payload CHOICE = U8 -ECRYPTED-VOTE = SIZE-ELEMENT-8BIT *CYPHER-TEXT -CYPHER-TEXT = 2 * SIZE-ELEMENT-65BIT -PROOF-VOTE = SIZE-ELEMENT-8BIT ANNOUNCEMENT CYPHER-TEXT R-RESPONSE +ENCRYPTED-VOTE = SIZE-ELEMENT-8BIT *CYPHERTEXT +CYPHERTEXT = 2 * SIZE-ELEMENT-65BIT +PROOF-VOTE = SIZE-ELEMENT-8BIT ANNOUNCEMENT CYPHERTEXT R-RESPONSE SCALAR ANNOUNCEMENT = 3 * SIZE-ELEMENT-65BIT R-RESPONSE = 2 * SIZE-ELEMENT-65BIT +SCALAR = SIZE-ELEMENT-32BIT TALLY-CERT = VOTE-PLAN-ID TALLY-PAYLOAD TALLY-PAYLOAD = %x01 ; Public payload From 31fafb407ac2d0b519ed297410c1d128ff510f23 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 2 Aug 2022 18:18:55 +0300 Subject: [PATCH 4/7] fixed --- chain-impl-mockchain/doc/format.abnf | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/chain-impl-mockchain/doc/format.abnf b/chain-impl-mockchain/doc/format.abnf index 43fb78c50..13c53b1d5 100644 --- a/chain-impl-mockchain/doc/format.abnf +++ b/chain-impl-mockchain/doc/format.abnf @@ -167,11 +167,15 @@ CAST-PAYLOAD = %x01 CHOICE; Public payload / %x02 ENCRYPTED-VOTE PROOF-VOTE ; Private payload CHOICE = U8 ENCRYPTED-VOTE = SIZE-ELEMENT-8BIT *CYPHERTEXT -CYPHERTEXT = 2 * SIZE-ELEMENT-65BIT -PROOF-VOTE = SIZE-ELEMENT-8BIT ANNOUNCEMENT CYPHERTEXT R-RESPONSE SCALAR -ANNOUNCEMENT = 3 * SIZE-ELEMENT-65BIT -R-RESPONSE = 2 * SIZE-ELEMENT-65BIT -SCALAR = SIZE-ELEMENT-32BIT +CYPHERTEXT = E1 E2 +PROOF-VOTE = SIZE-ELEMENT-8BIT *ANNOUNCEMENT *CYPHERTEXT *R-RESPONSE SCALAR ; size of the *ANNOUNCEMENT, *CYPHERTEXT, *R-RESPONSE are equal to SIZE-ELEMENT-8BIT value +ANNOUNCEMENT = I A B +R-RESPONSE = 3 * SCALAR +I = GROUP-ELEMENT +A = GROUP-ELEMENT +B = GROUP-ELEMENT +E1 = GROUP-ELEMENT +E2 = GROUP-ELEMENT TALLY-CERT = VOTE-PLAN-ID TALLY-PAYLOAD TALLY-PAYLOAD = %x01 ; Public payload @@ -265,3 +269,9 @@ U8 = OCTET ; unsigned integer 8 bit U16 = 2OCTET ; unsigned integer 16 bit (BE) U32 = 4OCTET ; unsigned integer 32 bit (BE) U64 = 8OCTET ; unsigned integer 64 bit (BE) +SIZE-BYTES-32BYTE = 320CTET ; unsigned integer 256 bit (32 bytes) (BE) +SIZE-BYTES-64BYTE = 640CTET ; unsigned integer 512 bit (64 bytes) (BE) +SIZE-BYTES-65BYTE = 650CTET ; unsigned integer 520 bit (65 bytes) (BE) +SCALAR = SIZE-BYTES-32BYTE +GROUP-ELEMENT = SIZE-BYTES-65BYTE ; ristretto255 backend (build with the feature=ristretto255, it is enabled by default) + / SIZE-BYTES-32BYTE ; p256k1 backend (build with the feature=p256k1) \ No newline at end of file From 2a9f8a98f036218e6cb34a56977134549ce7f72e Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Wed, 3 Aug 2022 18:31:18 +0300 Subject: [PATCH 5/7] add documentation about VoteCast into the format.md document --- chain-impl-mockchain/doc/format.abnf | 12 ++-- chain-impl-mockchain/doc/format.md | 72 +++++++++++++++++++++++- chain-impl-mockchain/src/fragment/mod.rs | 2 +- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/chain-impl-mockchain/doc/format.abnf b/chain-impl-mockchain/doc/format.abnf index 13c53b1d5..9e7782f12 100644 --- a/chain-impl-mockchain/doc/format.abnf +++ b/chain-impl-mockchain/doc/format.abnf @@ -202,7 +202,7 @@ IOW = BLOCK-DATE ; end validity of this IOW *INPUT ; as many as indicated in the number of inputs *OUTPUT ; sa many as indicated in the number of outputs *WITNESS ; as many as indicated in the number of inputs -INPUT = INPUT-UTXO / INPUT_ACCOUNT +INPUT = INPUT-UTXO / INPUT-ACCOUNT INPUT-UTXO = IDX VALUE FRAGMENT-ID INPUT-ACCOUNT = %xff VALUE UNTAG-ACCOUNT-ID IDX = %x00-fe @@ -269,9 +269,9 @@ U8 = OCTET ; unsigned integer 8 bit U16 = 2OCTET ; unsigned integer 16 bit (BE) U32 = 4OCTET ; unsigned integer 32 bit (BE) U64 = 8OCTET ; unsigned integer 64 bit (BE) -SIZE-BYTES-32BYTE = 320CTET ; unsigned integer 256 bit (32 bytes) (BE) -SIZE-BYTES-64BYTE = 640CTET ; unsigned integer 512 bit (64 bytes) (BE) -SIZE-BYTES-65BYTE = 650CTET ; unsigned integer 520 bit (65 bytes) (BE) +SIZE-BYTES-32BYTE = 32OCTET ; unsigned integer 256 bit (32 bytes) (BE) +SIZE-BYTES-64BYTE = 64OCTET ; unsigned integer 512 bit (64 bytes) (BE) +SIZE-BYTES-65BYTE = 65OCTET ; unsigned integer 520 bit (65 bytes) (BE) SCALAR = SIZE-BYTES-32BYTE -GROUP-ELEMENT = SIZE-BYTES-65BYTE ; ristretto255 backend (build with the feature=ristretto255, it is enabled by default) - / SIZE-BYTES-32BYTE ; p256k1 backend (build with the feature=p256k1) \ No newline at end of file +GROUP-ELEMENT = SIZE-BYTES-32BYTE ; ristretto255 backend (build with the feature=ristretto255, it is enabled by default) + / SIZE-BYTES-65BYTE ; p256k1 backend (build with the feature=p256k1) \ No newline at end of file diff --git a/chain-impl-mockchain/doc/format.md b/chain-impl-mockchain/doc/format.md index fee76e395..e08200812 100644 --- a/chain-impl-mockchain/doc/format.md +++ b/chain-impl-mockchain/doc/format.md @@ -304,6 +304,76 @@ message, `VoterId` is an ed25519 extended public key, and `Signature` is a signature by the corresponding secret key over `ProposalId | VoterId`. +## Type 11: Vote Cast + +VoteCast message is used to vote for a particular voting event. + +Full fragment representation in hex: +``` +00000572000b93c52748d7f75ffb0267846af7b3ca5228d7a210908be3fc963f227ab7f039f81f0203bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b4979698590263054c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1abc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b4979698590263054c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1abc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e483302864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3bcaa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4eda0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64ef286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6ca2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac020459a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e0532c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20aeba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c44260921b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105000000010000000005001d000000000000003433503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e1e000000000000003d23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e4722330700000000000000284f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e22354300000000000000122a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e4200000000000000322c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00020000002a1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a020000005e303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b053806145000480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec82000000000000000000000000000000000000000000000000000000000000000002280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b02000000431c074c29614b622b23044502565a0e1b3c081c370557075f1f1e59594609474b01335b2754283211422a5458325a06090b502e524a352e2d425c18043b38572b0200000045630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402 +``` +1. Fragment size (u32): `00000572` +2. `00` +3. Fragment id tag (u8): `0b` == `11` (it is equal to VoteCast tag) +4. Vote plan id (32 byte hash): `93c52748d7f75ffb0267846af7b3ca5228d7a210908be3fc963f227ab7f039f8` +5. Proposal index (u8): `1f` +6. Payload type tag (u8): `02` +7. Encrypted vote: `03|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e4833` + - size (u8): `03` + - ciphertext (group element (32 byte), group element (32 byte)): `bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e4833` +8. Proof: `02|864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b|5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3b|caa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4e|da0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f|5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74|d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64e|f286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a|2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6c|a2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e|0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a|9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac0204|59a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e05|32c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20a|eba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b|5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907|e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c442609|21b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105` + - size (u8): `02` + - announcements (group element (32 byte), group element (32 byte), group element (32 byte)): `864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b|5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3b|caa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4e|da0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f|5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74|d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64e` + - ciphertext (group element (32 byte), group element (32 byte)): `f286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a|2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6c|a2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e|0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a` + - response randomness (scalar (32 byte), scalar (32 byte), scalar (32 byte)): `9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac0204|59a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e05|32c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20a|eba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b|5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907|e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c442609` + - scalar (32 byte): `21b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105` +9. IOW stand for Inputs-Outputs-Witnesses: `000000010000000005001d000000000000003433503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e1e000000000000003d23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e4722330700000000000000284f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e22354300000000000000122a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e4200000000000000322c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00020000002a1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a020000005e303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b053806145000480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec82000000000000000000000000000000000000000000000000000000000000000002280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b02000000431c074c29614b622b23044502565a0e1b3c081c370557075f1f1e59594609474b01335b2754283211422a5458325a06090b502e524a352e2d425c18043b38572b0200000045630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402` + - block date (epoch (u32), slot (u32)): `00000001|00000000` + - number of inputs and witnesses (u8): `05` + - number of outputs (u8): `00` + - Inputs + 1. + - index or accout (u8): `1d` (index) + - value (u64): `0000000000000034` + - input pointer (32 byte): `33503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e` + 2. + - index or accout (u8): `1e` (index) + - value (u64): `000000000000003d` + - input pointer (32 byte): `23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e472233` + 3. + - index or accout (u8): `07` (index) + - value (u64): `0000000000000028` + - input pointer (32 byte): `4f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e2235` + 4. + - index or accout (u8): `43` (index) + - value (u64): `0000000000000012` + - input pointer (32 byte): `2a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e` + 5. + - index or accout (u8): `42` (index) + - value (u64): `0000000000000032` + - input pointer (32 byte): `2c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00` + - Witnesses + 1. + - witness type tag (u8): `02` + - nonce (u32): `0000002a` + - legacy signature (64 byte): `1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a` + 2. + - witness type tag (u8): `02` + - nonce (u32): `0000005e` + - signature (64 byte): `303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b0538061450` + 3. + - witness type tag (u8): `00` + - legacy public key (64 byte): `480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec820000000000000000000000000000000000000000000000000000000000000000` + - legacy signature (64 byte): `02280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b` + 4. + - witness type tag (u8): `02` + - nonce (u32): `00000043` + - signature (64 byte): `303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b0538061450` + 5. + - witness type tag (u8): `02` + - nonce (u32): `00000045` + - signature (64 byte): `630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402` + ## Shared formats Delegation Type has 3 different encodings: @@ -347,4 +417,4 @@ Ratio Delegation of: f0 f0 f0 03 ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab -``` +``` \ No newline at end of file diff --git a/chain-impl-mockchain/src/fragment/mod.rs b/chain-impl-mockchain/src/fragment/mod.rs index e5c03a6cc..47d9a79c7 100644 --- a/chain-impl-mockchain/src/fragment/mod.rs +++ b/chain-impl-mockchain/src/fragment/mod.rs @@ -234,7 +234,7 @@ impl Serialize for Fragment { Fragment::UpdateProposal(proposal) => proposal.serialize(&mut tmp)?, Fragment::UpdateVote(vote) => vote.serialize(&mut tmp)?, Fragment::VotePlan(vote_plan) => vote_plan.serialize(&mut tmp)?, - Fragment::VoteCast(vote_plan) => vote_plan.serialize(&mut tmp)?, + Fragment::VoteCast(vote_cast) => vote_cast.serialize(&mut tmp)?, Fragment::VoteTally(vote_tally) => vote_tally.serialize(&mut tmp)?, Fragment::MintToken(mint_token) => mint_token.serialize(&mut tmp)?, Fragment::Evm(deployment) => deployment.serialize(&mut tmp)?, From 8536dd21faa31bd34f67a878be282e974d558515 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 12 Aug 2022 13:12:14 +0300 Subject: [PATCH 6/7] Update format doc --- chain-impl-mockchain/doc/format.md | 93 ++++++++++++++---------------- 1 file changed, 42 insertions(+), 51 deletions(-) diff --git a/chain-impl-mockchain/doc/format.md b/chain-impl-mockchain/doc/format.md index e08200812..2a7e4f9a9 100644 --- a/chain-impl-mockchain/doc/format.md +++ b/chain-impl-mockchain/doc/format.md @@ -308,71 +308,62 @@ VoterId`. VoteCast message is used to vote for a particular voting event. +VoteCast trnasction should have only 1 input, 0 output and 1 witness (signature). + Full fragment representation in hex: ``` -00000572000b93c52748d7f75ffb0267846af7b3ca5228d7a210908be3fc963f227ab7f039f81f0203bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b4979698590263054c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1abc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b4979698590263054c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1abc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e483302864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3bcaa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4eda0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64ef286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6ca2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac020459a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e0532c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20aeba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c44260921b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105000000010000000005001d000000000000003433503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e1e000000000000003d23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e4722330700000000000000284f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e22354300000000000000122a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e4200000000000000322c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00020000002a1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a020000005e303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b053806145000480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec82000000000000000000000000000000000000000000000000000000000000000002280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b02000000431c074c29614b622b23044502565a0e1b3c081c370557075f1f1e59594609474b01335b2754283211422a5458325a06090b502e524a352e2d425c18043b38572b0200000045630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402 +0000037e000b36ad42885189a0ac3438cdb57bc8ac7f6542e05a59d1f2e4d1d38194c9d4ac7b000203f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fb0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fc8f58976fc0e951ba284a24f3fc190d914ae53aebcc523e7a4a330c8655b4908f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fb0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846021c76d0a50054ef7205cb95c1fd3f928f224fab8a8d70feaf4f5db90630c3845a06df2f11c881e396318bd8f9e9f135c2477e923c3decfd6be5466d6166fb3c702edd0d1d0a201fb8c51a91d01328da257971ca78cc566d4b518cb2cd261f96644067a7359a745fe239db8e73059883aece4d506be71c1262b137e295ce5f8a0aac22c1d8d343e5c8b5be652573b85cba8f4dcb46cfa4aafd8d59974e2eb65f480cf85ab522e23203c4f2faa9f95ebc0cd75b04f04fef5d4001d349d1307bb5570af4a91d8af4a489297a3f5255c1e12948787271275c50386ab2ef3980d882228e5f3c82d386e6a4ccf7663df5f6bbd9cbbadd6b2fea2668a8bf5603be29546152902a35fc44aae80d9dcd85fad6cde5b47a6bdc6257c5937f8de877d5ca0356ee9f12a061e03b99ab9dfea56295485cb5ce38cd37f56c396949f58b0627f455d26e4c5ff0bc61ab0ff05ffa07880d0e5c540bc45b527e8e85bb1da469935e0d3ada75d7d41d785d67d1d0732d7d6cbb12b23bfc21dfb4bbe3d933eaa1e5190a85d6e028706ab18d262375dd22a7c1a0e7efa11851ea29b4c92739aaabfee40353453ece16bda2f4a2c2f86e6b37f6de92dc45dba2eb811413c4af2c89f5fc0859718d7cd9888cd8d813da2e93726484ea5ce5be8ecf1e1490b874bd897ccd0cbc33db0a1751f813683724b7f5cf750f2497953607d1e82fb5d1429cbfd7a40ccbdba04fb648203c91e0809e497e80e9fad7895b844ba6da6ac690c7ce49c10e00000000000000000100ff00000000000000036d2ac8ddbf6eaac95401f91baca7f068e3c237386d7c9a271f5187ed909155870200000000e6c8aa48925e37fdab75db13aca7c4f39068e12eeb3af8fd1f342005cae5ab9a1ef5344fab2374e9436a67f57041899693d333610dfe785d329988736797950d ``` -1. Fragment size (u32): `00000572` +1. Fragment size (u32): `0000037e` 2. `00` 3. Fragment id tag (u8): `0b` == `11` (it is equal to VoteCast tag) -4. Vote plan id (32 byte hash): `93c52748d7f75ffb0267846af7b3ca5228d7a210908be3fc963f227ab7f039f8` -5. Proposal index (u8): `1f` +4. Vote plan id (32 byte hash): `36ad42885189a0ac3438cdb57bc8ac7f6542e05a59d1f2e4d1d38194c9d4ac7b` +5. Proposal index (u8): `00` 6. Payload type tag (u8): `02` -7. Encrypted vote: `03|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e4833` +7. Encrypted vote: `03|f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|b0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846|f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|c8f58976fc0e951ba284a24f3fc190d914ae53aebcc523e7a4a330c8655b4908|f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|b0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846` - size (u8): `03` - - ciphertext (group element (32 byte), group element (32 byte)): `bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|4c03526a8ba6ca343ed1fcf61bb3b82821d0f2361f541727a3e85f0d1a55aa1a|bc02c5ed4c96454223b073ec02f8a941e7dd58abcdefa547b497969859026305|f0d6dd25bab8405561d5bb817d9b20236bd5bb88c21b73afc09818ce5c5e4833` -8. Proof: `02|864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b|5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3b|caa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4e|da0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f|5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74|d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64e|f286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a|2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6c|a2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e|0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a|9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac0204|59a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e05|32c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20a|eba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b|5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907|e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c442609|21b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105` + - ciphertext (group element (32 byte), group element (32 byte)): `f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|b0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846|f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|c8f58976fc0e951ba284a24f3fc190d914ae53aebcc523e7a4a330c8655b4908|f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6f|b0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846` +8. Proof: `02|1c76d0a50054ef7205cb95c1fd3f928f224fab8a8d70feaf4f5db90630c3845a|06df2f11c881e396318bd8f9e9f135c2477e923c3decfd6be5466d6166fb3c70|2edd0d1d0a201fb8c51a91d01328da257971ca78cc566d4b518cb2cd261f9664|4067a7359a745fe239db8e73059883aece4d506be71c1262b137e295ce5f8a0a|ac22c1d8d343e5c8b5be652573b85cba8f4dcb46cfa4aafd8d59974e2eb65f48|0cf85ab522e23203c4f2faa9f95ebc0cd75b04f04fef5d4001d349d1307bb557|0af4a91d8af4a489297a3f5255c1e12948787271275c50386ab2ef3980d88222|8e5f3c82d386e6a4ccf7663df5f6bbd9cbbadd6b2fea2668a8bf5603be295461|52902a35fc44aae80d9dcd85fad6cde5b47a6bdc6257c5937f8de877d5ca0356|ee9f12a061e03b99ab9dfea56295485cb5ce38cd37f56c396949f58b0627f455|d26e4c5ff0bc61ab0ff05ffa07880d0e5c540bc45b527e8e85bb1da469935e0d|3ada75d7d41d785d67d1d0732d7d6cbb12b23bfc21dfb4bbe3d933eaa1e5190a|85d6e028706ab18d262375dd22a7c1a0e7efa11851ea29b4c92739aaabfee403|53453ece16bda2f4a2c2f86e6b37f6de92dc45dba2eb811413c4af2c89f5fc08|59718d7cd9888cd8d813da2e93726484ea5ce5be8ecf1e1490b874bd897ccd0c|bc33db0a1751f813683724b7f5cf750f2497953607d1e82fb5d1429cbfd7a40c|cbdba04fb648203c91e0809e497e80e9fad7895b844ba6da6ac690c7ce49c10e` - size (u8): `02` - - announcements (group element (32 byte), group element (32 byte), group element (32 byte)): `864143d55bdc29e4f86db8fc1fdee2e1e9cd7062e5e2fb5ca52f581fdb7cd75b|5e7836744ecbac60802ca39e3d92ebdac06479ec27b410140488bcb73ff76f3b|caa135fe2f52ed3fcee49e7e44feb9948ab2ee242c052fb24fe03e74f5d31f4e|da0263ac2b0fddb4b56a7210e892f306b2bec41a0e9f6d713980753418ca1a6f|5e7d4ad2a52627d4f72d86757a052794d07798178b5e05068993222bf167af74|d40b167e06b063ec6f7fdd7a907b27a030197c4d7e5b53e9828be208ba94e64e` - - ciphertext (group element (32 byte), group element (32 byte)): `f286a900fe795a3219e1dc23a4b033ca300cbf350d48d655bcb6ce5de7bf007a|2a0ee3305468ba753fca17f700d102e665115acfc0653c8636e06aee4688ed6c|a2db9928191c9e6c930f9a2ebda82c58eb7481dee601905713a593f33ce23f4e|0ca87a1b487a36544d10c6bffeb83c3e897f968cba066471dd0cfe540dfeee2a` - - response randomness (scalar (32 byte), scalar (32 byte), scalar (32 byte)): `9ef2f8441c4cce519a90820147be22efbe06d9b20d72ed3fe3ffe4198dac0204|59a4e56d0f4beb687661c9c38777c4034c6dd0d5efbaa713df7971fbf23b1e05|32c5813d8fdff7e4dd3ea3da8755ea457a0ca5681c555dccd915db9530c0f20a|eba371fc09b1524dbef709694f1ef87d168392dfb9a17b23e05980436e2c4e0b|5aa4653e54062da822e6849d45ffa8ad7b8d9e258124ecd5adb99c4986cd3907|e7a24b5b93fe207cfe8d7ebf927f3932b314c649ec18b19958c9b5d63c442609` - - scalar (32 byte): `21b79b3d5bd79021901e2a7f4de8ad42fd677b3f033cf1b0f2151cc221703105` -9. IOW stand for Inputs-Outputs-Witnesses: `000000010000000005001d000000000000003433503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e1e000000000000003d23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e4722330700000000000000284f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e22354300000000000000122a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e4200000000000000322c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00020000002a1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a020000005e303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b053806145000480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec82000000000000000000000000000000000000000000000000000000000000000002280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b02000000431c074c29614b622b23044502565a0e1b3c081c370557075f1f1e59594609474b01335b2754283211422a5458325a06090b502e524a352e2d425c18043b38572b0200000045630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402` - - block date (epoch (u32), slot (u32)): `00000001|00000000` - - number of inputs and witnesses (u8): `05` + - announcements (group element (32 byte), group element (32 byte), group element (32 byte)): `1c76d0a50054ef7205cb95c1fd3f928f224fab8a8d70feaf4f5db90630c3845a|06df2f11c881e396318bd8f9e9f135c2477e923c3decfd6be5466d6166fb3c70|2edd0d1d0a201fb8c51a91d01328da257971ca78cc566d4b518cb2cd261f9664|4067a7359a745fe239db8e73059883aece4d506be71c1262b137e295ce5f8a0a|ac22c1d8d343e5c8b5be652573b85cba8f4dcb46cfa4aafd8d59974e2eb65f48|0cf85ab522e23203c4f2faa9f95ebc0cd75b04f04fef5d4001d349d1307bb557` + - ciphertext (group element (32 byte), group element (32 byte)): `0af4a91d8af4a489297a3f5255c1e12948787271275c50386ab2ef3980d88222|8e5f3c82d386e6a4ccf7663df5f6bbd9cbbadd6b2fea2668a8bf5603be295461|52902a35fc44aae80d9dcd85fad6cde5b47a6bdc6257c5937f8de877d5ca0356|ee9f12a061e03b99ab9dfea56295485cb5ce38cd37f56c396949f58b0627f455` + - response randomness (scalar (32 byte), scalar (32 byte), scalar (32 byte)): `d26e4c5ff0bc61ab0ff05ffa07880d0e5c540bc45b527e8e85bb1da469935e0d|3ada75d7d41d785d67d1d0732d7d6cbb12b23bfc21dfb4bbe3d933eaa1e5190a|85d6e028706ab18d262375dd22a7c1a0e7efa11851ea29b4c92739aaabfee403|53453ece16bda2f4a2c2f86e6b37f6de92dc45dba2eb811413c4af2c89f5fc08|59718d7cd9888cd8d813da2e93726484ea5ce5be8ecf1e1490b874bd897ccd0c|bc33db0a1751f813683724b7f5cf750f2497953607d1e82fb5d1429cbfd7a40c` + - scalar (32 byte): `cbdba04fb648203c91e0809e497e80e9fad7895b844ba6da6ac690c7ce49c10e` +9. IOW stand for Inputs-Outputs-Witnesses: `00000000000000000100ff00000000000000036d2ac8ddbf6eaac95401f91baca7f068e3c237386d7c9a271f5187ed909155870200000000e6c8aa48925e37fdab75db13aca7c4f39068e12eeb3af8fd1f342005cae5ab9a1ef5344fab2374e9436a67f57041899693d333610dfe785d329988736797950d` + - block date (epoch (u32), slot (u32)): `00000000|00000000` + - number of inputs and witnesses (u8): `01` - number of outputs (u8): `00` - Inputs 1. - - index or accout (u8): `1d` (index) - - value (u64): `0000000000000034` - - input pointer (32 byte): `33503f28035b5b470f3c38571e1748474e191c362c583057472941066031093e` - 2. - - index or accout (u8): `1e` (index) - - value (u64): `000000000000003d` - - input pointer (32 byte): `23541c2c601e5e281533631c284a2c093437044a0c07545e5505341b1e472233` - 3. - - index or accout (u8): `07` (index) - - value (u64): `0000000000000028` - - input pointer (32 byte): `4f51171a2b5b0a2e4632452d125b3451170a004d182235390f484c2d1f2e2235` - 4. - - index or accout (u8): `43` (index) - - value (u64): `0000000000000012` - - input pointer (32 byte): `2a0e5d3608025f4b1b10281e2f2e252d2b56251734541e4e5520414e5c58071e` - 5. - - index or accout (u8): `42` (index) - - value (u64): `0000000000000032` - - input pointer (32 byte): `2c083a41035741182e471b0d4c1f0c0732221f0314034d293731151633441c00` + - index or accout (u8): `ff` (index) + - value (u64): `0000000000000003` + - input pointer (32 byte): `6d2ac8ddbf6eaac95401f91baca7f068e3c237386d7c9a271f5187ed90915587` - Witnesses 1. - witness type tag (u8): `02` - - nonce (u32): `0000002a` - - legacy signature (64 byte): `1f4417144c2d542c156063336331613d1e5654182c63634705275e1822585d37095f625305234f4f3d1d263615601a385d0335095a3e1903052a0b0f1954264a` - 2. - - witness type tag (u8): `02` - - nonce (u32): `0000005e` - - signature (64 byte): `303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b0538061450` - 3. - - witness type tag (u8): `00` - - legacy public key (64 byte): `480e0a7115af2e40dc5e9c1890fcda18ca4b60ec5d1393d1416e9eafe537ec820000000000000000000000000000000000000000000000000000000000000000` - - legacy signature (64 byte): `02280f130c2d092c3c2d5f012c611f4e5c624a094121393316185f4a1a461e105f2a522b24153f0a2c441a4f013f5c03032a46561e231e114246391e26470c2b` - 4. - - witness type tag (u8): `02` - - nonce (u32): `00000043` - - signature (64 byte): `303a062f2f322f3253570e032149372e550f2a4d23225a5946482d5e393914090811033e0704491716142d2e2b0a004d3a5e613f1653063147505b0538061450` - 5. - - witness type tag (u8): `02` - - nonce (u32): `00000045` - - signature (64 byte): `630b03625210214c3a5a4d2731380f37313b50100b1d0a373754471e1e593234013461623256024d5a130354302e463344161d17103c4e272e31114d311e0402` + - nonce (u32): `00000000` + - legacy signature (64 byte): `e6c8aa48925e37fdab75db13aca7c4f39068e12eeb3af8fd1f342005cae5ab9a1ef5344fab2374e9436a67f57041899693d333610dfe785d329988736797950d` + +Signing valid VoteCast fragment example (witness generation). + +Transaction data to sign: +``` +36ad42885189a0ac3438cdb57bc8ac7f6542e05a59d1f2e4d1d38194c9d4ac7b000203f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fb0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fc8f58976fc0e951ba284a24f3fc190d914ae53aebcc523e7a4a330c8655b4908f6639bdbc9235103825a9f025eae5cff3bd9c9dcc0f5a4b286909744746c8b6fb0018773d3b4308344d2e90599cd03749658561787eab714b542a5ccaf078846021c76d0a50054ef7205cb95c1fd3f928f224fab8a8d70feaf4f5db90630c3845a06df2f11c881e396318bd8f9e9f135c2477e923c3decfd6be5466d6166fb3c702edd0d1d0a201fb8c51a91d01328da257971ca78cc566d4b518cb2cd261f96644067a7359a745fe239db8e73059883aece4d506be71c1262b137e295ce5f8a0aac22c1d8d343e5c8b5be652573b85cba8f4dcb46cfa4aafd8d59974e2eb65f480cf85ab522e23203c4f2faa9f95ebc0cd75b04f04fef5d4001d349d1307bb5570af4a91d8af4a489297a3f5255c1e12948787271275c50386ab2ef3980d882228e5f3c82d386e6a4ccf7663df5f6bbd9cbbadd6b2fea2668a8bf5603be29546152902a35fc44aae80d9dcd85fad6cde5b47a6bdc6257c5937f8de877d5ca0356ee9f12a061e03b99ab9dfea56295485cb5ce38cd37f56c396949f58b0627f455d26e4c5ff0bc61ab0ff05ffa07880d0e5c540bc45b527e8e85bb1da469935e0d3ada75d7d41d785d67d1d0732d7d6cbb12b23bfc21dfb4bbe3d933eaa1e5190a85d6e028706ab18d262375dd22a7c1a0e7efa11851ea29b4c92739aaabfee40353453ece16bda2f4a2c2f86e6b37f6de92dc45dba2eb811413c4af2c89f5fc0859718d7cd9888cd8d813da2e93726484ea5ce5be8ecf1e1490b874bd897ccd0cbc33db0a1751f813683724b7f5cf750f2497953607d1e82fb5d1429cbfd7a40ccbdba04fb648203c91e0809e497e80e9fad7895b844ba6da6ac690c7ce49c10e00000000000000000100ff00000000000000036d2ac8ddbf6eaac95401f91baca7f068e3c237386d7c9a271f5187ed90915587 +``` +It consists of (detailed representation you can see below): +1. Vote plan id +2. Proposal index +3. Payload type tag +4. Encrypted vote +5. Proof +6. Inputs + +`blake2b256` hash of the transaction data to sign equals to `f51473df863be3e0383ce5a8da79c7ff51b3d98dadbbefbf9f042e8601901269` + +Expected witness (includes signature) +``` +0200000000e6c8aa48925e37fdab75db13aca7c4f39068e12eeb3af8fd1f342005cae5ab9a1ef5344fab2374e9436a67f57041899693d333610dfe785d329988736797950d +``` ## Shared formats From 65bd59146acd5b2d9b1a14543d47d56e1725b76b Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Fri, 12 Aug 2022 14:16:36 +0300 Subject: [PATCH 7/7] fix --- chain-impl-mockchain/doc/format.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chain-impl-mockchain/doc/format.md b/chain-impl-mockchain/doc/format.md index 2a7e4f9a9..11fae4bcf 100644 --- a/chain-impl-mockchain/doc/format.md +++ b/chain-impl-mockchain/doc/format.md @@ -308,7 +308,7 @@ VoterId`. VoteCast message is used to vote for a particular voting event. -VoteCast trnasction should have only 1 input, 0 output and 1 witness (signature). +VoteCast transaction should have only 1 input, 0 output and 1 witness (signature). Full fragment representation in hex: ```