From d286cbda8d055cec5be6d238ce6dcdfdd94bd8ae Mon Sep 17 00:00:00 2001 From: algoidan Date: Wed, 6 Jul 2022 14:04:43 +0300 Subject: [PATCH 01/21] add descrption for SHA256 TXN commitment --- dev/ledger.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dev/ledger.md b/dev/ledger.md index 1deb279..7c53b83 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -905,6 +905,16 @@ The transaction commitment for a block covers the transaction encodings with the changes described above. Individual transaction signatures cover the original encoding of transactions as standalone. +In addtion to _transaction commitment_, each block will also contains _SHA256 transaction commitment_. +It can allow a verifier which does not support SHA512_256 function to verify proofs of membership on Algorand's transcation. +In order to consturct this commitment we use Vector Commitment. The leaves in the Vector Commitment +tree are hashed as $$SHA256("TL", txidSha256, stibSha256)$$. Where txidSha256 and stibSha256 are computed in the following manner: + +- txidSha256 = SHA256(`TX` || transcation) +- txidSha256 = SHA256(`STIB` || signed transaction || ApplyData) + +We use SHA256 for creating the internal node of the vector commitment as well. + A valid transaction sequence contains no duplicates: each transaction in the transaction sequence appears exactly once. We can call the set of these transactions the _transaction set_. (For convenience, we may also write From e073944b028fcde92e07965d3639bf11e5af0708 Mon Sep 17 00:00:00 2001 From: algoidan Date: Wed, 6 Jul 2022 17:13:42 +0300 Subject: [PATCH 02/21] add init state proof desc --- dev/crypto.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/dev/crypto.md b/dev/crypto.md index a33df88..b9027af 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -52,10 +52,14 @@ below specifies each prefix (in quotation marks): - "MA": An internal node in a [Merkle tree](#merkle-tree). - "MB": A bottem leaf in a vector commitment [vector commitment](#vector-commitment). - "KP": Is a public key used by the Merkle siganture scheme [Merkle Siganture Scheme](merklesignaturescheme) + - "spc": A coin used as part of the state proofs construction. + - "spp": Participant's information (state proof pk and weight) used for state proofs. + - "sps": A signature from a specific participant that is used for state proofs. - In the [Algorand Ledger][ledger-spec]: - "BH": A _Block Header_. - "BR": A _Balance Record_. - "GE": A _Genesis_ configuration. + - "spm": A state proof message. - "STIB": A _SignedTxnInBlock_ that appears as part of the leaf in the Merkle tree of transactions. - "TL": A leaf in the Merkle tree of transactions. - "TX": A _Transaction_. @@ -287,6 +291,52 @@ def verify(elems, proof, root): Algorand uses [Vector Commitments][vector-commitment], which allows for concisely committing to an ordered (indexed) vector of data entries, based on Merkle trees. +# State Proofs + +State proofs (aka Compact Certificates) allow external parties to efficiently validate +Algorand blocks. The [technical report][compactcert] provides the +overall approach of state proofs; this section describes the +specific details of how state proofs are realized in Algorand. + +As a brief summary of the technical report, state proofs operate +in three steps: + +- The first step is to commit to a set of participants that are eligible + to produce signatures, along with a weight for each participant. + In Algorand's case, these end up being the online accounts, and the + weights are the account balances. + +- The second step is for each participant to sign the same message, and + broadcast this signature to others. In Algorand's case, the message would contain + a commitment on blocks in a specific period. + +- The third step is for relays to collect these signatures from a + large fraction of participants (by weight) and generate a state + proof. Given a sufficient number of signatures, a relay + can form a state proof, which effectively consists of a + small number of signatures, pseudo-randomly chosen out of all of + the signatures. + +The resulting state proof proves that at least some `provenWeight` +of participants have signed the message. The actual weight of +all participants that have signed the message must be greater than +`provenWeight`. + +## Participant commitment + +The state proof scheme requires a commitment to a dense array of participants, +in some well-defined order. In order to grantee this property, Algorand uses Vector Commitment. +Leaf hashing is done in the following manner: \newline + +_leaf_ = hash("spp" || _Weight_ || _KeyLifeTime_ || _StateProofPK_) for each online participant. + +where: + +- _Weight_ is a 64-bit integer represents the participant's weight in MicroAlgos + +- _KeyLifeTime_ is a 64-bit constant integer with value of 256 + +- _StateProofPK_ is a 512-bit represents the participant's merkle signature scheme commitment. [ledger-spec]: https://github.com/algorand/spec/ledger.md @@ -300,3 +350,4 @@ Algorand uses [Vector Commitments][vector-commitment], which allows for concisel [falcon]: https://falcon-sign.info/falcon.pdf [deterministic-falcon]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/falcon-deterministic.pdf [vector-commitment]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/merkle-vc-full.pdf +[compactcert]: https://eprint.iacr.org/2020/1568] \ No newline at end of file From bbb917c3252bfe8546fbad3049fc84d96ce43ea5 Mon Sep 17 00:00:00 2001 From: algoidan Date: Thu, 14 Jul 2022 15:31:41 +0300 Subject: [PATCH 03/21] fix typo --- dev/ledger.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/ledger.md b/dev/ledger.md index 7c53b83..dafd839 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -643,7 +643,7 @@ For a key registration transaction to be valid, the following needs to apply: - _vote last_ needs to be greater than or equal to the current network round _r_. - _vote first_ needs to be less than or equal to (_first valid_+1). - _vote first_ needs to be less than or equal to (_r_+1). -- The value (_vote last_ - _vote first_) must be greater than 256*(2$^{16}$)-1. +- The value (_vote last_ - _vote first_) must be not be greater than 256*(2$^{16}$)-1. ### Application Call Transaction An application call transaction additionally has the following fields: From 9ed9feff785e0216d41b2416e2df3c060bbe0a4a Mon Sep 17 00:00:00 2001 From: algoidan Date: Thu, 14 Jul 2022 17:42:01 +0300 Subject: [PATCH 04/21] add signature description + coin hashing --- dev/crypto.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/dev/crypto.md b/dev/crypto.md index b9027af..bc2e513 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -339,6 +339,84 @@ where: - _StateProofPK_ is a 512-bit represents the participant's merkle signature scheme commitment. +## Signature format + +Similarly to the participant commitment, the state proof scheme requires a commitment +to a signature array. Leaf hashing is done in the following manner: \newline + + +_leaf_ = hash("sps" || _L_ || _serializedMerkleSignature_) for each online participant. + +where: + +- _L_ is a 64-bit integer represents the participant's `L` value as described in the technical report. + +- _serializedMerkleSignature_ represents a merkleSignature of the participant [merkle signature binary representation](https://github.com/algorandfoundation/specs/blob/master/dev/partkey.md#signatures) + +## Choice of revealed signatures + +As described in the [technical report][compactcert] section IV.A, a +state proof contains a pseudorandomly chosen set of signatures. +The choice is made using a coin. In Algorand's implementation, the +coin derivation is made in the following manner: \newline + +_Hin_ = ("spc" || _version_ || _participantCommitment_ || _LnProvenWeight_ || _signatureCommitment_ || _singedWeight_ || _stateproofMessageHash_ ) + +where: + +_version_ is a 8-bit constant value of 0 + +_participantCommitment_ is a 64-bit string represents the vector commitment root on the participant array + +_LnProvenWeight_ is a 8-bit string represents the value of the $\ln(ProvenWeight)$ with 16 bits of precision (TODO: LINK weights paper here HERE) + +_signatureCommitment_ is a 512-bit string represents the vector commitment root on the signature array + +_singedWeight_ is a 64-bit integer represents the state proof signed weight + +_stateproofMessageHash_ is a 256-bit string represents the message that would be verified by the state proof. (would be the hash result of the state proof message) + + +We compute: \newline +_R_ = SHAKE256(_Hin_) + +For every reveal, we squeeze 64-bit string and use rejection sampling +to have a uniform random coin in [0,signedWeight). + +## State proof format + +A State proof consists of five fields: + +- The Merkle root commitment to the array of signatures, under msgpack + key `c`. + +- The total weight of all signers whose signatures appear in the array + of signatures, under msgpack key `w`. + +- The set of revealed signatures, chosen as described in section IV.A + of the [technical report][compactcert], under msgpack key `r`. This set is stored as a + msgpack map. The key of the map is the position in the array of the + participant whose signature is being revealed. The value in the map + is a msgpack struct with the following fields: + + -- The participant information, encoded as described [above](#participant-commitment), + under msgpack key `p`. + + -- The signature information, encoded as described [above](#signature-format), + under msgpack key `s`. + +- The Merkle proof for the signatures revealed above, under msgpack + key `S`. The Merkle proof is an array of 32-byte hash digests. + +- The Merkle proof for the participants revealed above, under msgpack + key `P`. + +Note that, although the compact certificate contains a commitment to +the signatures, it does not contain a commitment to the participants. +The set of participants must already be known in order to verify a +compact certificate. In practice, a commitment to the participants is +stored in the block header of an earlier block. + [ledger-spec]: https://github.com/algorand/spec/ledger.md [abft-spec]: https://github.com/algorand/spec/abft.md From 2f666f964c1e8e312c08b86b58e6514243e1c580 Mon Sep 17 00:00:00 2001 From: algoidan Date: Sun, 17 Jul 2022 14:40:49 +0300 Subject: [PATCH 05/21] define state proof struct --- dev/crypto.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/dev/crypto.md b/dev/crypto.md index bc2e513..39e003d 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -385,14 +385,23 @@ to have a uniform random coin in [0,signedWeight). ## State proof format -A State proof consists of five fields: +A State proof consists of seven fields: -- The Merkle root commitment to the array of signatures, under msgpack +- The Vector commitment root to the array of signatures, under msgpack key `c`. - The total weight of all signers whose signatures appear in the array of signatures, under msgpack key `w`. +- The Vector commitment proof for the signatures revealed above, under msgpack + key `S`. + +- The Vector commitment proof for the participants revealed above, under msgpack + key `P`. + +- The Falcon signature salt version, under msgpack key `v`, is expected salt version of +every signature in the state proof. + - The set of revealed signatures, chosen as described in section IV.A of the [technical report][compactcert], under msgpack key `r`. This set is stored as a msgpack map. The key of the map is the position in the array of the @@ -405,17 +414,17 @@ A State proof consists of five fields: -- The signature information, encoded as described [above](#signature-format), under msgpack key `s`. -- The Merkle proof for the signatures revealed above, under msgpack - key `S`. The Merkle proof is an array of 32-byte hash digests. +- A sequence of positions, under msgpack key `pr`, the sequence defines the order of the + participant whose signature is being revealed. i.e \newline + _PositionToReveal_ = [IntToInd(coin$_{0}$),...,IntToInd(coin$_{numReveals-1}$)] -- The Merkle proof for the participants revealed above, under msgpack - key `P`. -Note that, although the compact certificate contains a commitment to +Note that, although the state proof contains a commitment to the signatures, it does not contain a commitment to the participants. The set of participants must already be known in order to verify a -compact certificate. In practice, a commitment to the participants is -stored in the block header of an earlier block. +state proof. In practice, a commitment to the participants is +stored in the block header of an earlier block, and in the state proof message that was +proven by the previous state proof. [ledger-spec]: https://github.com/algorand/spec/ledger.md [abft-spec]: https://github.com/algorand/spec/abft.md From e669471b88d9172f4b8f4ee762dc27f603c294f9 Mon Sep 17 00:00:00 2001 From: algoidan Date: Sun, 17 Jul 2022 15:00:21 +0300 Subject: [PATCH 06/21] add SpecialAddr --- dev/crypto.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/crypto.md b/dev/crypto.md index 39e003d..309b167 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -63,6 +63,7 @@ below specifies each prefix (in quotation marks): - "STIB": A _SignedTxnInBlock_ that appears as part of the leaf in the Merkle tree of transactions. - "TL": A leaf in the Merkle tree of transactions. - "TX": A _Transaction_. + - "SpecialAddr": A prefix used to generate designated addresses for specific functions, such as sending state proof transactions. - In the [Algorand Byzantine Fault Tolerance protocol][abft-spec]: - "AS": An _Agreement Selector_, which is also a [VRF][Verifiable Random Function] input. From 39a562e3cc5c2aa7f4e28c25045503be3e6a5dff Mon Sep 17 00:00:00 2001 From: algoidan Date: Mon, 18 Jul 2022 14:35:39 +0300 Subject: [PATCH 07/21] verifying stateproof --- dev/crypto.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/dev/crypto.md b/dev/crypto.md index 309b167..099c6be 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -354,6 +354,10 @@ where: - _serializedMerkleSignature_ represents a merkleSignature of the participant [merkle signature binary representation](https://github.com/algorandfoundation/specs/blob/master/dev/partkey.md#signatures) + +When a signature is missing in the signature array, i.e the prover didn't receive a signature for this slot. The slot would be +decoded as an empty string. As a result the vector commitment leaf of this slot would be the hash of the bottom leaf. + ## Choice of revealed signatures As described in the [technical report][compactcert] section IV.A, a @@ -417,7 +421,7 @@ every signature in the state proof. - A sequence of positions, under msgpack key `pr`, the sequence defines the order of the participant whose signature is being revealed. i.e \newline - _PositionToReveal_ = [IntToInd(coin$_{0}$),...,IntToInd(coin$_{numReveals-1}$)] + _PositionsToReveal_ = [IntToInd(coin$_{0}$),...,IntToInd(coin$_{numReveals-1}$)] Note that, although the state proof contains a commitment to @@ -427,6 +431,36 @@ state proof. In practice, a commitment to the participants is stored in the block header of an earlier block, and in the state proof message that was proven by the previous state proof. + +## State proof validity + +A state proof is valid for the message hash, +with respect to a commitment to the array of participants, +if: + +- The vector commitment proofs for the signature and the participant information + should be less than or equal to 20. + +- All falcon signatures should have the same salt version and it should + by equal to the salt version specified in state proof + +- The number of reveals in the state proof should be less than of equal to ????? 1024 ??????? + +- Using the trusted Proven Weight (supplied by the verifier), The state proof should pass + the [SNARK-Friendly Weight Threshold Verification] check + (#https://github.com/algorandfoundation/spec???) + +- All of the participant and signature information that appears in + the reveals is validated by the Vector commitment proofs for the participants + (against the commitment to participants, supplied by the verifier) + and signatures (against the commitment in the state proof itself), respectively. + +- All of the signatures are valid signatures for the message hash. + +- For every i $\in$ {0,...,numReveals-1} there is a reveal in map denote by _r_$_{i}$, where _r_$_{i}$ $\gets$ T[_PositionsToReveal_[_i_]] + and _r_$_{i}$.Sig.L <= _coin_$_{i}$ < _r_$_{i}$.Sig.L + _r_$_{i}$.Part.Weight + + [ledger-spec]: https://github.com/algorand/spec/ledger.md [abft-spec]: https://github.com/algorand/spec/abft.md From 4292a28746b4c583d47a291e4e6569522b624fc4 Mon Sep 17 00:00:00 2001 From: algoidan Date: Mon, 18 Jul 2022 15:41:25 +0300 Subject: [PATCH 08/21] define light block headers. --- dev/ledger.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/dev/ledger.md b/dev/ledger.md index dafd839..d84418c 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -109,6 +109,9 @@ The block header contains the following components: - A cryptographic commitment to the block's _transaction sequence_, described below, stored under msgpack key `txn`. + - A cryptographic commitment, using a SHA256 hash function, to the block's _transaction sequence_, described + below, stored under msgpack key `txn256`. + - The block's _previous hash_, which is the cryptographic hash of the previous block in the sequence. (The previous hash of the genesis block is 0.) The previous hash is stored under msgpack key `prev`. @@ -523,6 +526,25 @@ valid vote round in its participation key is strictly less than the current roun that is being processed. Once included in this list, an account will be marked offline as part of applying the block changes to the ledger. +# Light Block Header + +A light block header is a structure contains subset of fields for Algorand's _block header_ +Light block header contains the following components: + +- The block's _seed_, under msgpack key `s`. + +- The block's _genesis hash_, under msgpack key `gh`. + +- The block's _round_, under msgpack key `r`. + +- The block's SHA256 Transaction commitment, under msgpack key `tc`. + +# Light Block Header Commitment + +Light Block Header Commitment for rounds (_X_$\times$$\delta_{SP}$,...,(_X_+1)$\times$$\delta_{SP}$] for some number _X_, defined as +the root of a vector commitment whose leaves are light block headers for rounds _X_$\times$$\delta_{SP}$,...,(_X_+1)$\times$$\delta_{SP}$ respectively. + + # Transactions \newcommand \Tx {\mathrm{Tx}} From 0fce13a4f13f0ef15318cbd11d27d2a374c23fa1 Mon Sep 17 00:00:00 2001 From: algoidan Date: Mon, 18 Jul 2022 17:37:10 +0300 Subject: [PATCH 09/21] update state proof tracking in ledger --- dev/ledger.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 2 deletions(-) diff --git a/dev/ledger.md b/dev/ledger.md index d84418c..6595834 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -42,6 +42,15 @@ The Algorand Ledger is parameterized by the following values: Currently defined as 500,000. - $A$, the size of an earning unit. Currently defined as 1,000,000 microAlgos. + - Several parameters for state proofs; namely: + - $\delta_{SP}$, the number of rounds between state proofs. + - $\delta_{SPR}$, the number of $\delta_{SP}$ that the network will try to catch-up with. + - $\delta_{SPB}$, the delay (lookback) in rounds for online participant + information committed to in the block header for state proofs. + - $N_{SP}$, the maximum number of online accounts that are included + in the Vector commitment of state proofs participants. + - $KQ_{SP}$, the security parameter for state proof. We use either k+q (for pre-quantum security) or k+2q (for post-quantum security). + - $f_{SP}$, the fraction of participants that are proven to have signed by a state proof. ## States @@ -541,8 +550,78 @@ Light block header contains the following components: # Light Block Header Commitment -Light Block Header Commitment for rounds (_X_$\times$$\delta_{SP}$,...,(_X_+1)$\times$$\delta_{SP}$] for some number _X_, defined as -the root of a vector commitment whose leaves are light block headers for rounds _X_$\times$$\delta_{SP}$,...,(_X_+1)$\times$$\delta_{SP}$ respectively. +Light Block Header Commitment for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$] for some number _X_, defined as +the root of a vector commitment whose leaves are light block headers for rounds _X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$ respectively. We use SHA256 hash function to create this vector commitment. + +# State Proof message + +A state proof message for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$] for some number _X_, +contains the following components: + + - Light block headers commitment for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$], under msgpack key `b`. + + - First attested round which would be equal to _X_$\cdot$$\delta_{SP}$ + 1, under msgpack key `f`. + + - Last attested round which would be equal to (_X_+1)$\cdot$$\delta_{SP}$, under msgpack key `l`. + +# State Proof Tracking + +Each block header keeps track of the state needed to construct, validate, +and record state proofs. +This tracking data is stored in a map under the msgpack key `spt` in the block header. +The map is indexed by the type of the state proof; at the moment, only +type 0 is supported. In the future, other types of state proofs +might be added. + +For type 0, $KQ_{SP}=256$, $f_{SP}$ is $2^{32}*30/100$ +(as the numerator of a fraction out of $2^{32}$), $N_{SP}=1024$, +$\delta_{SP}=256$, $\delta_{SPR}=10$ and $\delta_{SPB}=16$ . + +The value of the tracking data is a msgpack map with three +elements: + +- Under key `n`, the next expected round of a state proof that + should be formed. When upgrading from an earlier consensus protocol + to a protocol that supports state proofs, the `n` field is + set to the lowest value such that `n` is a multiple of $\delta_{SP}$ + and so that the `n` is at least the first round of the new protocol + (supporting state proofs) plus $\delta_{SPB}+\delta_{SP}$. + This field is set in every block. + +- Under key `v`, the root of the Vector commitment to an array of + participants that are eligible to vote in the state proof at + round $\delta_{SP}$ from the current block. Only blocks whose round + number is a multiple of $\delta_{SP}$ have a non-zero `v` field. + +- Under key `t`, the total weight of participants in the Vector commitment. + +The participants committed to by the Vector commitment are chosen in a +specific fashion: + +- First off, because it takes some time to collect all of the online + participants (more than the target assembly time for a block), the + set of participants appearing in a commitment in block at round $r$ + are actually based on the account state from round $r-\delta_{SPB}$. + +- The participants are sorted by the number of microAlgos they currently + hold (including any pending rewards). This enables more compact + proofs of pseudorandomly-chosen participants weighted by their + microAlgo holdings. Only accounts in the online state are included + in this list of participants. + +- To limit the worst-case size of this Vector commitment, the array of + participants contains just the top $N_{SP}$ participants. Efficiently + computing the top $N_{SP}$ accounts by their algo balance is difficult + in the presence of pending rewards. Thus, to make this top-$N_{SP}$ + calculation more efficient, we choose the top accounts based on a + normalized balance. The normalized balance is a hypothetical balance + that a given account would need to have at round 0 to achieve its + current balance (without pending rewards) as of the last round at + which the account was touched (i.e., its pending rewards were added + to the account's balance). Specifically, for an account $a$ with raw + balance $a_I$ and rewards base $a'_I$, the normalized balance is $a_I * + RewardUnit / (a'_I + RewardUnit)$. + # Transactions From 80928a4240a471ea9b5a5f1a76818110e6feb0b7 Mon Sep 17 00:00:00 2001 From: algoidan Date: Tue, 19 Jul 2022 15:39:43 +0300 Subject: [PATCH 10/21] state proof transaction desc --- dev/ledger.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/dev/ledger.md b/dev/ledger.md index 6595834..3797d16 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -564,6 +564,11 @@ contains the following components: - Last attested round which would be equal to (_X_+1)$\cdot$$\delta_{SP}$, under msgpack key `l`. + - Participant commitment used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], + under msgpack key `v`. + + - The $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. + # State Proof Tracking Each block header keeps track of the state needed to construct, validate, @@ -852,6 +857,47 @@ An asset freeze transaction additionally has the following fields: The cryptographic hash of the fields above is called the _transaction identifier_. This is written as $\Hash(\Tx)$. +## State proof transaction + +A special transaction is used to disseminate and store state +proofs. The type of a state proof transaction is `stpf`. +This type of transaction must always be issued from a special sender +address, which is the hash of the domain-separation prefix `SpecialAddr` +with the string `StateProofSender`. The transaction must not have any +signature, must not have any fee, must have an empty note, must not have +the rekeying field set, must not have any lease, and must not be part +of a transaction group. +The state proof transaction includes four additional fields: + + - Under msgpack key `sptype`, the type of the state proof; currently always zero. + - Under msgpack key `sprnd`, the last round that this state proof attest to. + - Under msgpack key `sp`, the state proof fields as defined in the state proof format subsection + of the cryptographic primitive specification document. + - Under msgpack key `spmsg`, a structure that compose the state proof message, whose hash is being attested + by the state proof. This structure defined [above](#state-proof-message) + +In order for a state proof transaction to be valid, the round of +the state proof (`sprnd`) must be exactly equal to the next +expected state proof round in the block header, as described +[above](#state-proof-tracking). When a state proof +transaction is applied to the state, the next expected state proof round +for that type of state proof is incremented by $\delta_{SP}$. +To encourage the formation of shorter state proof, the rule for +validity of state proof transactions is dependent on the round +number of the block in which a state proof transaction appears. +In particular, the signed weight of a state proof must be: + +- Equal to the full weight of all participants, `TotalWeight`, if the + containing block's round number is no greater than the proof's + `sprnd` plus $\delta_{SP}/2$. +- At least the minimum weight being proven by the proof, + `ProvenWeight, if the containing block's round number is no less than + the proof's `sprnd` plus $\delta_{SP}`. +- At least $ProvenWeight + (TotalWeight - ProvenWeight) * Offset / (\delta_{SP} / 2)$, + if the containing block's round number is the proof's `sprnd` plus + $\delta_{SP}/2+Offset$. + + Authorization and Signatures ---------------------------- From 712ec9ce6cb1bce09da93b9882af66404f5dbf45 Mon Sep 17 00:00:00 2001 From: algoidan Date: Tue, 19 Jul 2022 22:38:10 +0300 Subject: [PATCH 11/21] add ephemerality relaxation --- dev/partkey.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/dev/partkey.md b/dev/partkey.md index 45e1b8c..3fd6ee8 100644 --- a/dev/partkey.md +++ b/dev/partkey.md @@ -186,11 +186,11 @@ In order to bound verification paths on the tree, the tree's depth is bound to 1 #### Public Commitment -The scheme generates multiple keys for the entire participation period. Given _FirstValidRound_, _LastValidRound_ and an _Interval_, a key is generated for each _Round_ that holds:\newline - _FirstValidRound_ $\leq$ _Round_ $\leq$ _LastValidRound_ and _Round_ % _Interval_ = 0\newline +The scheme generates multiple keys for the entire participation period. Given _FirstValidRound_, _LastValidRound_ and an _keyLifeTime_, a key is generated for each _Round_ that holds:\newline + _FirstValidRound_ $\leq$ _Round_ $\leq$ _LastValidRound_ and _Round_ % _keyLifeTime_ = 0\newline -Currently, _Interval_ is set to 256.\newline +Currently, _keyLifeTime_ is set to 256.\newline After generating the public keys, the scheme creates a vector commitment using the keys as leaves. Leaf hashing is done in the following manner: \newline @@ -201,7 +201,8 @@ where: - _schemeId_ is a 16-bit constant integer with value of 0 -- _Round_ is a 64-bit, little-endian integer represents the round in which the key _P_$_{k_{i}}$ is valid. +- _Round_ is a 64-bit, little-endian integer represents the start round for which the key _P_$_{k_{i}}$ is valid. + The key would be valid for all rounds in [_Round_,...,_Round_ + _keyLifeTime_ - 1] - _P_$_{k_{i}}$ is a 14,344-bit string represents the Falcon ephemeral public key. @@ -256,3 +257,17 @@ where: - _zeroDigest_ is a constant 512-bit string with the value 0. - _d_ = 16 - _n_ + + +#### Verifying Signatures + +A signature _s_ for a message _m_ at round _r_ is valid under the public commitment _pk_ and _keyLifeTime_ if: + + - The falcon signature _s.Signature_ is valid for the message _m_ under the public key _s.VerifyingKey_ + + - The proof _s.Proof_ is a valid vector commitment proof for the entry _leaf_ at index _s.VectorIndex_ with respect to + the vector commitment root _pk_ where: \newline + + - _leaf_ := "KP" || _schemeId_ || _Round_ || _s.VerifyingKey_ + + - _Round_ := _r_ - ( _r_ % _keyLifeTime_) \ No newline at end of file From 89c4897011a93b353b6123561b80c36b1608ac93 Mon Sep 17 00:00:00 2001 From: algoidan Date: Wed, 20 Jul 2022 15:55:05 +0300 Subject: [PATCH 12/21] fix typos --- dev/crypto.md | 17 +- dev/cryptographic-specs/latex/extra.bib | 6 + .../latex/weight-thresh.tex | 178 ++++++++++++++++++ dev/cryptographic-specs/weight-thresh.pdf | Bin 0 -> 185059 bytes dev/ledger.md | 14 +- 5 files changed, 200 insertions(+), 15 deletions(-) create mode 100644 dev/cryptographic-specs/latex/extra.bib create mode 100644 dev/cryptographic-specs/latex/weight-thresh.tex create mode 100644 dev/cryptographic-specs/weight-thresh.pdf diff --git a/dev/crypto.md b/dev/crypto.md index 099c6be..9b340a8 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -371,15 +371,15 @@ where: _version_ is a 8-bit constant value of 0 -_participantCommitment_ is a 64-bit string represents the vector commitment root on the participant array +_participantCommitment_ is a 512-bit string represents the vector commitment root on the participant array -_LnProvenWeight_ is a 8-bit string represents the value of the $\ln(ProvenWeight)$ with 16 bits of precision (TODO: LINK weights paper here HERE) +_LnProvenWeight_ is a 8-bit string represents the value of the $\ln(ProvenWeight)$ with 16 bits of precision [SNARK-Friendly Weight Threshold Verification][weight-threshold] _signatureCommitment_ is a 512-bit string represents the vector commitment root on the signature array _singedWeight_ is a 64-bit integer represents the state proof signed weight -_stateproofMessageHash_ is a 256-bit string represents the message that would be verified by the state proof. (would be the hash result of the state proof message) +_stateproofMessageHash_ is a 256-bit string represents the message that would be verified by the state proof. (it would be the hash result of the state proof message) We compute: \newline @@ -404,7 +404,7 @@ A State proof consists of seven fields: - The Vector commitment proof for the participants revealed above, under msgpack key `P`. -- The Falcon signature salt version, under msgpack key `v`, is expected salt version of +- The Falcon signature salt version, under msgpack key `v`, is the expected salt version of every signature in the state proof. - The set of revealed signatures, chosen as described in section IV.A @@ -419,7 +419,7 @@ every signature in the state proof. -- The signature information, encoded as described [above](#signature-format), under msgpack key `s`. -- A sequence of positions, under msgpack key `pr`, the sequence defines the order of the +- A sequence of positions, under msgpack key `pr`. The sequence defines the order of the participant whose signature is being revealed. i.e \newline _PositionsToReveal_ = [IntToInd(coin$_{0}$),...,IntToInd(coin$_{numReveals-1}$)] @@ -447,8 +447,8 @@ if: - The number of reveals in the state proof should be less than of equal to ????? 1024 ??????? - Using the trusted Proven Weight (supplied by the verifier), The state proof should pass - the [SNARK-Friendly Weight Threshold Verification] check - (#https://github.com/algorandfoundation/spec???) + the [SNARK-Friendly Weight Threshold Verification][weight-threshold] check + - All of the participant and signature information that appears in the reveals is validated by the Vector commitment proofs for the participants @@ -472,4 +472,5 @@ if: [falcon]: https://falcon-sign.info/falcon.pdf [deterministic-falcon]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/falcon-deterministic.pdf [vector-commitment]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/merkle-vc-full.pdf -[compactcert]: https://eprint.iacr.org/2020/1568] \ No newline at end of file +[compactcert]: https://eprint.iacr.org/2020/1568 +[weight-threshold]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/weight-thresh.pdf \ No newline at end of file diff --git a/dev/cryptographic-specs/latex/extra.bib b/dev/cryptographic-specs/latex/extra.bib new file mode 100644 index 0000000..d1e7b85 --- /dev/null +++ b/dev/cryptographic-specs/latex/extra.bib @@ -0,0 +1,6 @@ +@misc{pade, + author = "{Flemming Topsoe}", + title = {{Some bounds for the logarithmic function}}, + howpublished = {\url{https://rgmia.org/papers/v7n2/pade.pdf}}, + note = {Online; accessed March 16 2022} , +} \ No newline at end of file diff --git a/dev/cryptographic-specs/latex/weight-thresh.tex b/dev/cryptographic-specs/latex/weight-thresh.tex new file mode 100644 index 0000000..a5abc24 --- /dev/null +++ b/dev/cryptographic-specs/latex/weight-thresh.tex @@ -0,0 +1,178 @@ +\documentclass[11pt,hidelinks]{article} +\usepackage{fullpage} +\usepackage{url} +\usepackage{amssymb,amsmath,amsfonts,amsthm} +\usepackage{mathtools} +\usepackage{authblk} + +\usepackage[colorlinks]{hyperref} + \hypersetup{linkcolor=blue,filecolor=blue,citecolor=blue,urlcolor=blue} + +% load after hyperref, algpseudocode to get proper behavior +\usepackage[capitalize,nameinlink,noabbrev]{cleveref} + +% remove 'draft' to turn off fixme notes +\usepackage[draft,multiuser,inline,nomargin]{fixme} + +% fixme: register commands for author(s) +\usepackage{xcolor} +\FXRegisterAuthor{c}{ec}{\color{red}Chris} +\FXRegisterAuthor{l}{el}{\color{blue}Leo} +\fxusetheme{color} + +\newtheorem*{thm*}{Theorem} +\newtheorem{theorem}{Theorem}[section] +\newtheorem{claim}[theorem]{Claim} + +\newcommand{\numreveals}{\mathsf{numReveals}} +\newcommand{\sigwt}{\mathsf{signedWt}} +\newcommand{\provwt}{\mathsf{provenWt}} +\newcommand{\target}{\mathsf{target}} + +\pagestyle{plain} + +\author{Xiong Fan} +\author{Chris Peikert} + +\affil{Algorand, Inc.} + +\begin{document} + +\title{SNARK-Friendly Weight Threshold Verification} + +\maketitle + +\section{Derivation} +\label{sec:derivation} + +For the compact certificate verifier, our goal is to provide a SNARK-friendly verification of the inequality +\begin{equation} + \label{equ:goal} + \numreveals\cdot (\log_2(\sigwt) - \log_2(\provwt)) \geq \target +\end{equation} +for given positive integers $\numreveals, \sigwt, \provwt$, and a fixed positive integer $\target$. +Since SNARKs cannot compute the exact values of logarithms, we need to use suitable approximation bounds, and wish to do so in relatively low complexity and with little approximation loss. + +By changing the base-2 logarithms to natural logarithms, \cref{equ:goal} is equivalent to +\begin{equation} +\label{equ:goal-ln} + \numreveals\cdot (\ln(\sigwt) - \ln(\provwt)) \geq \target \cdot \ln(2). +\end{equation} + +Note that $\provwt$ is provided as trusted information (from the previous state proof). +Therefore, a trusted, precise upper bound on its natural-base logarithm can also be given as input. +So, we mainly focus on approximating $\ln(\sigwt)$ well enough to establish \cref{equ:goal-ln} without much approximation loss. + +\begin{claim} +\label{clm:sufficient} +Suppose that $\sigwt/2^d \geq 1$ for some integer $d \geq 0$, let $p = P/2^b \geq \ln(\provwt)$, $t = T/2^b \geq \ln(2) > (T - 1)/2^b > 0$ for some integers $b, P, T \geq 0$, and let +\[ Y = \sigwt^2 + 4 \cdot 2^d \cdot \sigwt + 2^{2d} > 0. \] +Then \cref{equ:goal-ln} holds if +\begin{equation} + \label{equ:condition} + \numreveals \cdot \left( 3\cdot 2^b \cdot (\sigwt^2 - 2^{2d}) + d \cdot (T - 1) \cdot Y\right) \geq (\target \cdot T + \numreveals \cdot P) \cdot Y . +\end{equation} +\end{claim} +Observe that \cref{equ:condition} is equivalent to the following two conditions, which may be more convenient to use when constructing (rather than just verifying) a certificate, since they give a direct bound on $\numreveals$: +\begin{align} + D := 3\cdot 2^b \cdot (\sigwt^2 - 2^{2d}) + (d \cdot (T - 1) - P) \cdot Y &> 0 , \\ +\numreveals &\geq \frac{\target \cdot T \cdot Y}{D} . +\end{align} +Also note that it is possible for~$D$ to be negative---e.g., if $\sigwt$ is equal to, or even slightly larger than, both $2^d$ and~$\provwt$---but in this case it is impossible to satisfy \cref{equ:condition}. + +\begin{proof}[Proof of \cref{clm:sufficient}] +First of all, dividing by $2^b \cdot Y > 0$, \cref{equ:condition} implies that +\begin{align} + \MoveEqLeft \numreveals \cdot \left( \frac{3(\sigwt^2 - 2^{2d})}{Y} + d\ln(2) - p\right) \nonumber \\ + &> \numreveals \cdot \left( \frac{3(\sigwt^2 - 2^{2d})}{Y} + d \cdot \frac{T - 1}{2^b} - p\right) \nonumber \\ + &\geq \target \cdot t. \label{equ:condition-ln} +\end{align} + +Next, Pad{\'e} expansion~\cite[Table~3]{pade} gives the lower bound (valid for all $x \geq 1$) +\begin{equation} + \label{equ:pade-lower} + \ln x \geq \frac{3(x^2 - 1)}{x^2 + 4x + 1}. +\end{equation} + +So, we have + \begin{align*} + \MoveEqLeft \numreveals \cdot (\ln(\sigwt) - \ln(\provwt)) \\ + &\geq \numreveals \cdot \left(\ln\frac{\sigwt}{2^d} + d\ln(2) - p\right) & \text{($p \geq \ln(\provwt)$)} \\ + &\geq \numreveals \cdot \left(\frac{3(\sigwt^2 - 2^{2d})}{Y} + d\ln(2) - p\right) & \text{(\cref{equ:pade-lower}, $\sigwt/2^d \geq 1$)} \\ + &> \target \cdot t & \text{(\cref{equ:condition-ln})} \\ + &\geq \target \cdot \ln(2). & \text{($t \geq \ln(2)$)} +\end{align*} +This establishes \cref{equ:goal-ln}, as desired. +\end{proof} + +Observe that both sides of \cref{equ:condition} involve only integer operations, and are positive. +We now show that for typical parameters, both sides are much smaller than the size of the SNARK's underlying field, so there is no overflow in their computation by the SNARK. +Since $\sigwt$ and $\provwt$ are denominated in micro-Algos, and there can be at most $10^{10}$ Algos in circulation, both quantities are bounded by $10^{16} < 2^{54}$, so also $d \leq 54$. +Now suppose that $\numreveals$ is upper bounded by (say) $2^{10}$, and the bounds on $\ln(2)$ and $\ln(\provwt)$ are given with up to~$16$ bits of precision, i.e., $b \leq 16$, so~$T$ and~$P$ are upper bounded by $2^{16}$ and $2^{22}$, respectively. + +Therefore, the left-hand side of \cref{equ:condition} is upper bounded by $2^{142}$, which is much less than the capacity of the SNARK's underlying field (more than $2^{254}$). +For the right-hand side of \cref{equ:condition}, $\target$ will be no more than $512$, so that side is also upper bounded by $2^{142}$ (regardless of whether the inequality holds). + +\section{Approximation Analysis} +\label{sec:analysis} + +To analyze the relative cost of using approximations in place of exact amounts, we compare the minimum values of $\numreveals$ that satisfy \cref{equ:goal} versus \cref{equ:condition}, and consider their ratio. +In summary, for all realistic values of the parameters, the cost is a less-than-$1\%$ increase in the value of $\numreveals$. + +For \cref{equ:condition}, we take +\[ \numreveals = \frac{\target \cdot T \cdot Y}{3\cdot 2^b \cdot (\sigwt^2 - 2^{2d}) + (d \cdot (T - 1) - P) \cdot Y}, \] +and for \cref{equ:goal} we take +\[ \numreveals' = \frac{\target}{\log_2(\sigwt/\provwt)}. \] +The ratio of the above two quantities is +\begin{equation} +\label{equ:reveals-ratio} +\gamma = \frac{\numreveals}{\numreveals'} += \frac{T \cdot Y \cdot \log_2(\sigwt/\provwt)}{3\cdot 2^b \cdot (\sigwt^2 - 2^{2d}) + (d \cdot (T - 1) - P) \cdot Y} . +\end{equation} + +To analyze the ratio~$\gamma$ for realistic values of the parameters, we wrote a simple python program to compute \cref{equ:reveals-ratio} (see below). +We let~$d = \lfloor \log_2(\sigwt) \rfloor$ in order to minimize $\sigwt/2^d \geq 1$, and fixed $b=16$, i.e., we approximate $\ln(2)$ and $\ln(\provwt)$ with~$16$ bits of precision, and let $T = \lceil 2^b \cdot \ln(2) \rceil$ and $P = \lceil 2^b \cdot \ln(\provwt) \rceil$. +We use the \texttt{Decimal} type with a moderately large (fixed) amount of precision in order to ensure sufficient accuracy of the calculations. + +The ratio~$\gamma$ is smallest when $\sigwt$ is a power of two, i.e., $\sigwt/2^d = 1$. +In this case, there is no error at all in the Pad{\'e} approximation, so~$\gamma$ is extremely close to~$1$. +(There is still some slight approximation error in~$T$ and~$P$, but it is very small due to the use of $b=16$ bits of precision.) +Conversely,~$\gamma$ is largest when $\sigwt$ is slightly less than a power of two, i.e., $\sigwt = 2^{d+1} - 1$, because the error from the Pad{\'e} approximation of $\ln(x)$ increases with~$x$, and here $x=\sigwt/2^d \approx 2$ is essentially maximized. + +Using realistic values $\sigwt \in \{2^{40} - 1, 2^{38} - 1, 2^{36} - 1, 2^{32} - 1, 2^{16} - 1\}$ and $\sigwt/\provwt \in \{1.1, 1.2, 1.3, \ldots, 2\}$, the ratio~$\gamma$ is always less than~$1.01$. +That is, the minimal value of $\numreveals$ obtained from \cref{equ:condition} is less than 1\% larger than the one obtained from \cref{equ:goal}. +The magnitude of $\sigwt$ has almost no effect on~$\gamma$, whereas the weight ratio $\sigwt/\provwt$ has a minor effect: as it increases from~$1.1$ to~$2$, the value of~$\gamma$ decreases from about $1.009$ to about $1.001$. +So, the relatively large weight ratios that we typically expect to see in practice correspond to lower costs of approximation. + +\paragraph{Python code.} + +\begin{verbatim} +from math import log, floor, ceil +from decimal import * + +getcontext().prec = 32 +b = 16 +two = Decimal(2) +B = two**b +T = Decimal(ceil(B * Decimal.ln(two))) + +def ratio(sigWt, weightRatio): + d = floor(Decimal.ln(sigWt) / Decimal.ln(two)) + Y = sigWt**2 + two**(d+2) * sigWt + two**(2*d) + P = Decimal(ceil(B * Decimal.ln(sigWt/weightRatio))) + denom = 3 * B * (sigWt**2 - two**(2*d)) + (d*(T - 1) - P)*Y + num = T * Y * Decimal.ln(weightRatio) / Decimal.ln(two) + return num / denom + +for j in range(0, 10): + sigWt = two**(40 - j) - 1 + for i in range(0, 10): + weightRatio = Decimal(2 - i/10) + result = ratio(sigWt, weightRatio) + print(f"{40-j},{2-i/10}: {result}") +\end{verbatim} + +\bibliographystyle{plain} +\bibliography{extra} + +\end{document} diff --git a/dev/cryptographic-specs/weight-thresh.pdf b/dev/cryptographic-specs/weight-thresh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..51eb85a2e244ff4d6e4f162d44f01d5c1c383908 GIT binary patch literal 185059 zcmeFZWl&^ImoADsG>tojyAiZiTzMd*cp`JB@4O?(Xi5dn1>3zL|68o|(9D zew`mTPDRwtSh;hr%3Lesc~<6LSrm$55)42_b_9y<$AWhRAS-|w05Y;d;Nt@@$ywT& z8ai5fnwkKBpArDb#m>ym4PcT2Xaj&8%v=B#b|63(z@z{Gasrsd0YG*Z7G_oelRSV8 zz@+-woQ?BSpMU^@sh!C`IsyOZJ_taz|1=O)4|`JplZLXX+2=4!?aZAm06^ByAxT); zIGZ|tmNtgYredbXAd}B#|0)#?9c`Te|5!m3WaDCM=LBE}Fey5knphe;gB$@smd|kk zn7;pG2>|Qo_tOm0b|$9o|5SX+tnB})F#`dBz|Wp21DKRSAm>jL{Yy~!v?>6|#`SMH zUH@e&w*S>UOwwWiZ9ZcYZZ0+;5NN`|ZOYAN#KCR$*>@H*4pX2pi;*EGP=Jq<)r6g$ z-4JMG$id3Z!oq53#%{*N%3){>G&Ex2HenIa{l^JT&W@&rwg~Q7#zrOv+vWyF1_oU4 zq?&>OQiD9q&-nBL*kU*20a9l`)*h@qDZn9_ zfMSFM7aOe*4a}1cQ}mzt@bA6(KR+}6S0n#l`Tttr{|^>G_%~?z59pRRv^9151Q^bL z!Ht5wshzN~vn9w5z|QjTRW8mppZNYyBj$hAC>olZe)~5FRC6*__>bF6|5Q5xxc(i* z{spC?hR%jIAoKr(?LdxCCI9j3|1GYn0JuI`;vcSH`JX7v!T$e-CIf?iaOu{-0GdS| z2nQ4bPn$qMGc{=K>1CGgH0%p91^H)5LSr+@E&O5dt@N;56WALl-yErB6-1jmJ&_R<^h3kh{BK>U#9ij~7bm3ljzM>tM|cZD1QK8t_hKKnmb`jr0VmQT(Q1=%^9+I>C%h>9ghkaD=j{6UfEU_|r8U|L(tkx#k~t{b#@Yqxb*Q zFaJ)6EL@-S;6KyEgw|T(8V8zBZp}8CS`+H-V3h7A?a}T$rJCkYj?Ci0egK&R`GxX+ zaFH3G+Vj&Nm>xuG#ohkRDxUAa$klB@cDGsG)@n*zpe+ObXwW%Lh8Fm#XUa z%_Yr-n#d}~_X4p~@5bVH5IANg=KUO&tcO~)Z}6C7)-U90gpB& z#rd~wS&jYIwGQXaqoZgtJ((dAg1utD)VsYZ2N+2P-_l#HKQI~Q4L2>p{wwX<5}ULX zX-DI>!GV~c!f%LV=?`t@i8opkUxb&&L2_oQI!VYxDEI*^h@TXaPTS4QMi<}jtr#?R zoBtvaxo?BY`*hnZzky4n(>ayc7DHctryq>yS*?W04#Dtssl116r)Bs>kb!KyD)X@w zVB`{#(mvH(T&3DQYv-`m-am~z35ucQz$^iQpRc6H+>iaGTdNk zd(1b*|6ayogOeH;{o8Qk?w-0~ZaI?%Upr1ED$)nnrd;0*4eo-giN-t(AP*{7O!Lst`(0$5vfT|hN$WGO; zXwX&Xl#juMv@giUqPk#U7!r^1a_V%>6vT>H8#`~ZVQODroGV5X3Ih+Jj+bC9dZNOV z@E&b4r>7jka>9%5yD{CV=QbljBDpYu-^IG$Iy#_aZ9s~VHpv3^Q&);gM4~| zr&=uYlMe18LJvO0`zR|$Lp;*Kcc>Du-U3Mhi+ydfm|{(TMS~cF;tA|Oen;b(jv-A1 z&V~9Hup&d`mc4I@!=g{zjAbo=iL&D_#8LSy<&o-;7+3brcHR*&zWvJdr!= zD>kryeEWHJtDJgPDb>EBL=Wc@a{3~SJxwY8P$qiqAPDhd`FNPwVY>i!#g3FGa;@h@ zp`-e(kS2{(SHa-JdhP+{?`FvX<9A{3`Qr%xu*_d0i>@|bOP{f-)eg{6P`hKuF3%eMur&{(iuxv6JbVdVy23*WJ$=ev|4_1Xv z2RG+%B-!AoDrl?^rYDnutp!<-pl}pZa_l74U%^GaREhH)js#B{uYSr=8>F)5UD)GM zL>%}h7WwRZ$o~@ z2yt?46c&o59xeG7NSvlwuRO&iP-AX;kADTh*;q&Zq^MK-nHvGs&RQj|*f#2^7bqk5GY%2~yR_Bc+wEz2(*!gfWJ;)1PD-wdS)sEq4;KPJD4Q71Y=%HB&b9NB_*2MWf20Wv2*Y>gg%TbC)H z)QL?}g-~ueITZ}apiCh4mn5<~jRmnA@4`2@lAC1gNlUyIw#J7{oM?)CeUr&ngJFjq zu+~@<^kWc@wkw&;Pv6t6>P4WN0v(GLj-aI;NGCK>3hEMjitaYW;cc!dVVxIV;@q;< zwRlQ5R2xx)oy5JZ@i1FgBpNR}7m7}=Wsn>-J3B;ZTDAdzJr421d4*o1O&5V*r12|9 zuV4H6CUXgT7A}=gb#{V=K}`$AHEH%7{& zP?$||r((?TCHP^`lBv(LCsFrwE&ZW)B&73L>Kr!>-9np-kc)_}h59O2aziOs-ZK)8 zjd#)Jc&aI4VQXbuF4h&-ENk45cRBwyp4Y}a24a!-vVEiNyF7ucHQd-lqA_mrh(O>am(fHSQSCr1EMD(ik_1!S>ms{b&jxwE zG9jYWwWcQcb{cvV3Gtlo3hxew>Y#ocdFvYf-f{Q#vwSh+kKinaH^kOBDzn2>;X#@& zk}7|&nA5F)TE1b^vjH_N=JtK)OJMr4u^F$-Cy$}gg?F5<6S7cFJA>U25m=+W8BS}GveKj;#uTvTpru)!!8^^Y|VSD3TuHE2vf^IK=r+{gxn z``_ccavtRM$M^OmE{t%61TZapWqi$)bK;t0tC%dWR+;;2tA;@vaGiIX~D^{z(+L#?w-r<-LjZLGnZBd$sdPCgy`M!`^Z;vOYvb?$4ns# z+|M~D-sJ-=mRnfHtD=pMLFTU8-Wp$+^iG0!sD83aK%vV5e19_{v`W(NIbR2(UN;^cG>Zf4Z5Do^zJ)@S2RyKOL2pj|&f^WVX)MBF}j_~49t(nD+ z;Y3hBv3j?&$?wRXQ!{!cdMoqNHnqQ8yqw0-S*2+}<#9gIL))Xm-*SXi#C5}NV(CHL zpc}wm3P%v}!ADj!AzZ#KOueLR^uKX~G15~Ye9#w@nLOBwX86a5nY)`0lNg4cC-I-O z6bCjBrq$hByM&ULUdg%)hAGgV`cqvTRaGnHLlRaSvbDAu`>UmSIx^s?nhwjipM=CQ z#r%?pBas4w9it%juzhB`b51yxU~qFf%7Z7b}TouImyJ~fPR$91?>eVv^ap((+gv;vv0by3k?BYDFm4EgZM+}0lrIFZQ$e&fiAR2 z1mP%BjM3nBWe=sT#ohhuc}f8+2A9D>gqku)-pE7tB zgv0^!%SQGOi8#1)^fUcngbIC4urV?-105MaT!V?ygJT(JqY6nY=Zvguq=Oqk06z#V zjLu9x5<$CG5KZhrANZ%BR(K(0F=&GumTmn#?sV=z!mRAHte&QBNt1Wo!-HfBz@gED zt1BS90sRK#yK5jBzcNqje=}|fqLD9CMSFUJ{$%A zOq@wEjN1ba1<~rh44(H07T=zZd3$+tN`#Upm_^?`!G!+g&b`bFMz0qN_Uz9f#H2s0 zCr?=o@NXzY93DE`iv5rnrl$vUs!eC@!7zaj1$?Ny4ItG&p?B+aku4ME!FtaSA%Z>q zy?tZ~!uCjC6Sd)ghyU2~O~*_YZ&bxN`N(<#<(8Iq^7cd}#1QrjkN$?(-Z_M^cK`zy z_|O$!fqKP8+!icjK}GZeo60rOmp>5<*8OPn%jk9u!n)dO#Q38xh6pkJTIk>dfSo=+ z_%imVxX$MH^dV@6&RbhGqz}%N;o{&s(;fIWh9&gQ zsfu`aG)e0}{+rSDF6MkXNr97gZ9+S`mmz`2R3kibQ)F?WPzbeN}_);*^Y|W z;N}9;qi3qHKymyK?E^ET4DY;^Mc6jwBlZvJB)hr9KiCIjj(X*Ii)aBGH}WH61o&&- z5ck6vq&&mcL8h60NUSp@jD7&@z#1O5!jFCyj|hgt_Sigd8u^vo+(<3I?S1&bj30gk z(u0{zcW)!YkNN#h^{)8581{SwGG*JoL+e|tyhCd0;R(No5-`=pr=owPe*A2B6O_|; zU;7xFn1nZQbx){y>u#y8Dp^Bx zQHbBm-T83&Fk_63Wn$VU#(yD={n!@F(MBC6Gzsls1AzvyZFGs(9kl60&Iel_#SKCo z73gA8W~@i*<_?Gmf$2?@boPDMTIA18#D}M`P!m6{SXK&`l&r~&G_(_C{xV&{7D6qQ zb-L~k)YODgM#YNZ!AQq%GM6J>dI@$tE+W+i*oIuB{2ceX?2W0`@pn4o032*GYjm*? z@pPBe>-W)w-6#r7;1qtXB39&)O$TN0OI~69PEXj!Bz#Ec9XwySM{>Q`XHB<(;IE%@ zK+>*Dy`Z!{-^e=B`pHwF@@0otL>B^WneP0WhL&jtL{tBSsAoEWAG=rPRKrWvbS_Z4 z>|1!fuABX-jVg# zX;hx{`Z5~DZEag^$7(JFeuw$9P#d&V>l}3>_X3>A{mSSL^(IQwWJ9u`mrgQ_)$t6_ zpCG&8=AED|H~TU6(Ohw>@|%{1+Q|5#uX{$98HT-0lsbB{J{!B3`a>vdiO6w21@H_l z)8(h_X~%6`?9?VuH>^Lj%Oi~PXjgrEW+s#(Qw6g};tl{D`I;+TcPbrzz!R?oi=vM`@m^r{WHuMekrUogQTZCTSr2;r>zWrk4?pGp%}(4{4wF< zJP^QO>Q6Kt#^zu)-N!(9W;{j)#;NB0@cVVSKQchiAegy|0j?G9;RYRTBRJ33#dqS> zR$5^vvl~z7%W0LuSK^N-D(;jk&8qX9XUHZl$=w4t4e;X} zTdO+T5xR=^{!N|$lddGSE@+?wQv&LJVjq&y2npw6<|a!l-$=Pz_iNn^#9P)cc`4RH z8@w$a9u@q%zUXCe9TwWK)y!Cjw9&>@s-i@Rd!8ghGa)yF6ps6{@Eq!1c~gJ9urMcU zrBKBDo?x#yEj~oEQ-*Yo+AHs06nnAne~X?o0*(z4F4!`r?F&rHB8Ey-5)xl%`Zf+7 zje}e0a+YujHzlXfldhbVAoS(z%IiOrB{crsFZa1g3TK z7zU&|PiSaXb#5l*vi?vZFHw7PWR`AHKZU-xj=L^`=pvj}X@k)9zC^fK7M@t!@zJDT z6juzI4mR0_)pJr*9oi$dZD_8Eh;zVmG=Zsw!QTiUoXM^%`let3VL|K;SYHt|F@ zerd_J!@w-nb)A!^jU0&*I#3qPMzZDVtSb6eE-9}D9f$s52D-}5eO!+rq=?S* zJSzJ3XR$(5GBsX{&=6Y6q+tx3!B~cb6baKVQI?a2Ll*6WstX0<)+jhdZB5Cm2);ml zQF5LECh}a_2-u7@Ot~Da(ThnkIJ!O7o@H32vA?lunJa?oy=iz9~IREVRUMOixSC zsLFn=p0~O7q?0lXe-Ly1qh0EfC^4?mK2C?4CFVukut}Cm1rT z%cY*V)BV$V_-t>{n(u_r9)}4_ZK$gSTz3#^lPOLUF2hYo@@z=6w?-Rl$_t=pL+5_t zR#iIT{ml~64v#Tgn&>%6H^D#XnqlU+Qf#)t_~j3B(Iksw5Z+XX+75KF!aMQhl_Ix1 zX&xo+USj_NK6f-hYSAM~#ilk)$|7?T4^c9Vk#9p*sZz0Aq$8|qhTo<9iNjPTrUx4@ zo*cey<~Wo4G*G_~zIbn_bu=pl4Z)C(9Na_T3)royap<0>n-|Gbg3eJB;f0tck#>*Sl>qY1@?~YCd+Ir-< zwXl4r8wzEJ|4D?7k?knlvGxjqA30&gnXec2UNv|WQS?5ong_7+PexlM8bfm5athHlWVTr(FZk(6bK{S}=||wQIdS=0s9;0v`+OH)(tk z6IHveXxB&7*cZ2^qpYJbaXZV;ob+VOd709dBDlH^a7PEzDP>wEsbAKBchqUS*#&(= zNMd4mFx42{gqzUfeN^!~JTxtiNEt~Oozj&M^T)H@jV1^sLy{HU`%*Af^KtBs+%n-f zrTGg52OSP{S7CW{vUz)+dO{jThx@W04xOlczNqeu8X;vUIc?9ve9$20PZ?vFe8eB# zWjI)&Q%&U71JsoB2>IQ9`(xnE?x}AoL3a-dY9eRfi54C{Z5=FM!7L5x__n#F)QGOE z??gxEK6NkcY~?OuDgDs0G5wsBn&z2Y_0*4uiS%k0*c7q<Jd;B-PsI)>a z(D&G`F2G|Tr^dL^e2W@8$0paG(gY$~Q*T-7b_;(Kqs@`F(Xm91w2eUS!VC0O_WkW< zzY2IKk67bhPO2r(kL}|zDnU4uq&;ymVf8>J5Wpj+YFw5lc!${{DoYXn8FKVfn(vER zOs&yfw0dk8x8iDlRz|gHD1m>|P~xxQgtLU64WaSqRgSp4l_nJx&sNpd)sN5p68xk| z#o4g%Xc0KIba%m~f!wbD2X;*@e?K33U*XZg#r z8$H81SvZN|S00x>Hbk`jm6O7EE{Kwh(NzlXw1i#pW)l8KLr zeiUlhiZt&*+d1<+3yeB3mou?zpsGJM38G}I%Z?-8 zr{FvY(1YT_je4ZQ(gqnJ*Z1!UF2nK0w?{A7*k*~7C7!)~)JK`MYV9VVgUBSq^bZFJw zwdSwj;j*-qv&I}_tw@tce~A8CYt`Sz!)JZ#9ug($!Uh%OI1F2!w5uf*%#Eb6OKI<+r={9K^7mk2x44%WY#ci(zR>=tka=8qV>y)8+H(8;oCtl zX2@JYoc){~y%mh>(nX-gl6BNe&u#3pj>=VjG6=zboveg%IjXflzGWyw;WHTRl|bOK z@ji0T zsxL;MYr{i=q|->#P1ZqzFG7 zzHMeA1xAzQb)y`9R_FaaRMK5sUA{h4)e&W#_*rN&7&W_f6AF#uP#!qfmmapFChN zW9{``GAe68up`PS{x%e8hYqMOz#{PoUXdg(r(g~@sL{2IlyIfP$Ur^jGa3`#LNU2u z9DH65xg^O(Z|QAj6BtT|`ttQ}%|Zj}yb^|TL*S2!Q-~M^LbJZx82-Y}oKn_?-VG%( z`Rij=w1lCnXTK|6Ch{97RG%n$%4`)IBkCGY^W6V{3Ec9WBbiP7a=Ebb`px!NQ9?Is)@>Of~^1ZM-blLr05h zgSTXYQd0ey9yR^_>7d2eRh=h)^@Y606&VZ7DaL-`@ZIH3X3Sx*qb4Sk%atqE29Nt6 z<4sWorED&hvZ2D6LIXQKppr%QDXU`_Q$g) z1xDDq(GHPk<#Qv=8TIW2_C>Yg@=M+P4OS|BMH|e-iW?4wSk;NX$s87N3W?4TaMP?r zCx3mNvrUwMD)F#z zVpAUlQ$v1_+&M19Hp%ZwY-@9v7xPas0n0nJ0l06RAO2;>P1_RgZFw{8#i#txMh4cB z$KT!q-}{Hr1K&_rM#axVbTcV$Btwl{I%5%odw+T)ZL6FL4=o>5|2$-Zxbu(;o0RxA zhcy3A;WPSc3|n8;iQvSnwrROhgaB*vAirbgiqtUrU6liq8c*08d^iS$!m~RoRnOnX zsFLmC&6lc|4_Uy^=L~U;5b-Pec0F|MkvY(sysC9S;^Tnw~q%%bOj|(i{ zbpeddMqpitumV*Mij+T5LN*oVbQ4mAvB!Dp8$*axBV@qp6ZtYC9PkcLY5Lceut8>GJGw18G^mV{o9k#q4(2{V4FDL&q~sLadhecOR5?%AWxKf*-4XV6 ztzOCUO)0umI_h$H<*&!nZfP?Cz=q_a8g{EphNg?oyfzD8}k ztiM$FjJt!h*hIu@G(>$iz4Z2lG>C}Y;&B55PNP#xGze`pGULOPGgtZM1m22yLau|Z z*TjXuX5+t!q###F6>k$QWCHqL8bQJ3IVuoX8ehX`el@2ol3Gj8Ulr&R*{zlqCkwJb}~kaPNxtK8rzkIM5V64$-N7gO-#h zzjf1C1ae~9EdUDEo66JB@nk5Ci_dZ`Ci$g5Utk=O`R;IURpajg=)Kgzkiw7V5v16? z=5iq%&6}gzt5p$ie__aMFCG=|ibJ&alg4 zv$qKN!#a$%3oMO63E%1`@R+h@lB#_$i&JCXfkJT0N9)?Li!--o|Jv7e_(1xt7JW{` z=FnQ*!IyM%WU(T4euH{wu%2kt;%+fO&5#Oz1$%F34*DD8dr$M$MmzQw2Nczb*_|Bj zRazfA#f`EB@&p7PDh|?c090)E*0ZpQmSafVt_%UMix7Y?Bv)a$0(f9ncX=2QD+#q&!iNn6yV%=tI4Oo4!LaE-%Y}GZFK6W#PzdW?`@5yTU|3 z@YDM<0UYlwtR0Q`(xSAPKWn7Cy&m?#D6?&$cRbDFm|VN-A)-(+?We=#u3TOPieejC z-RG4xjZjX|FZNw7T6)lH_Pf-9K0h@Oimr47j2B=lxwSvFWcavDFLEJT)ek*g^wUvtc@Z#0fC`0cp;n6eGSOHBT= zl!b47KrKYh%T7ZW%~v`UH59)?JIewjqg&EJ2nhVD}kp zsGVckyRW+0+FYRhFqHv~en4BD=dGgR?5j0Fe^9T&s&@CU%X{)7bT;XY0y=j)GMPa5 zBQ&%cgfQwgw#t^*l)<9>=+8}jn)wM*#zrN2=#=O#rqo5hn1DBFG#Y{Jah(=4khX5d z0TaYgiOVDRP5D~gu9dHaC%WLbzBry0InV9Q?mab~hL4z07}c!HzNO#=N)$iw1$C5! zN`2<{bT(3BRXk@B?@G5L+q)KVQmRvq`!)@qR|eUue&>>jh9u)a`ty(!I30F$i(X?H z{Z%_uiS|3vki@gdv*PypFX~*~x;k^4=E4~V$=j^7I5ECD$sG#CZ}NO#2F5BZW#2f7 zi-4T+{XjP=&K*9BlSVc)(ND_EWY6zuOps_6xqK2s+U3PTx}7#Xt4jsQQ=zmZXT9Z- zYdLw%LnCTLaoZBx^?-RAA5$0Ni2Kzr*+u#}wFP=5CsP$>l>D5x^R*Yzo!hN$TsTQV z(oMKYf)F{@$T78&6{AXm!Y5-a;WeI1m68(x#gAA&eMa>#b%IKlHD!IxePj$7H-o4b^o0K3thP!ev&k6 zGQ@WoPRD{yeE(Te^!Lme_7to;pTJC4QqlIgMH;&hKkNPVL?z4)EfK~+vyZ1<9|(V} zHu0OuVBjm`F8;iAsDslA<*9MHL=&xSG*K(hlSaBkj$DGW&&ehF96?NhF+@A21|P4j zgtrZ`l1P$Xfl zPu$ySmTZ-n_tvzgeTF#E*PpJVmKn3Cg_QL9X&qE_uKpNf#N>TnpH33z(S@C>P=lB; zoi$;w9IN0FiE8%~Dz`3;

?T<$|C?l(fo_cF+ZC3NoW)e7(g#m^j=J2n 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%0AwQ(5&Yzv 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 E0}_N}ZvX%Q literal 0 HcmV?d00001 diff --git a/dev/ledger.md b/dev/ledger.md index 3797d16..574dae0 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -118,7 +118,7 @@ The block header contains the following components: - A cryptographic commitment to the block's _transaction sequence_, described below, stored under msgpack key `txn`. - - A cryptographic commitment, using a SHA256 hash function, to the block's _transaction sequence_, described + - A cryptographic commitment, using SHA256 hash function, to the block's _transaction sequence_, described below, stored under msgpack key `txn256`. - The block's _previous hash_, which is the cryptographic hash of the previous @@ -537,7 +537,7 @@ offline as part of applying the block changes to the ledger. # Light Block Header -A light block header is a structure contains subset of fields for Algorand's _block header_ +A light block header is a structure contains a subset of fields from Algorand's _block header_. Light block header contains the following components: - The block's _seed_, under msgpack key `s`. @@ -891,8 +891,8 @@ In particular, the signed weight of a state proof must be: containing block's round number is no greater than the proof's `sprnd` plus $\delta_{SP}/2$. - At least the minimum weight being proven by the proof, - `ProvenWeight, if the containing block's round number is no less than - the proof's `sprnd` plus $\delta_{SP}`. + `ProvenWeight`, if the containing block's round number is no less than + the proof's `sprnd` plus $\delta_{SP}$. - At least $ProvenWeight + (TotalWeight - ProvenWeight) * Offset / (\delta_{SP} / 2)$, if the containing block's round number is the proof's `sprnd` plus $\delta_{SP}/2+Offset$. @@ -1053,14 +1053,14 @@ with the changes described above. Individual transaction signatures cover the original encoding of transactions as standalone. In addtion to _transaction commitment_, each block will also contains _SHA256 transaction commitment_. -It can allow a verifier which does not support SHA512_256 function to verify proofs of membership on Algorand's transcation. +It can allow a verifier which does not support SHA512_256 function to verify proof of membership on transcation. In order to consturct this commitment we use Vector Commitment. The leaves in the Vector Commitment -tree are hashed as $$SHA256("TL", txidSha256, stibSha256)$$. Where txidSha256 and stibSha256 are computed in the following manner: +tree are hashed as $$SHA256("TL", txidSha256, stibSha256)$$. Where:\newline - txidSha256 = SHA256(`TX` || transcation) - txidSha256 = SHA256(`STIB` || signed transaction || ApplyData) -We use SHA256 for creating the internal node of the vector commitment as well. +The vector commitment uses SHA256 for internal nodes as well. A valid transaction sequence contains no duplicates: each transaction in the transaction sequence appears exactly once. We can call the set of these From 17b7adbce8f9e6e9786c233466719be08e07c8f8 Mon Sep 17 00:00:00 2001 From: algoidan Date: Wed, 20 Jul 2022 16:06:26 +0300 Subject: [PATCH 13/21] add sha256 references --- dev/crypto.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev/crypto.md b/dev/crypto.md index 9b340a8..ab57d61 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -98,6 +98,11 @@ Algorand uses this hash function to (1) commit to data for signing and for the Byzantine Fault Tolerance protocol, and (2) rerandomize its random seed. +### SHA512-256 +Algorand uses [SHA-256 algorithm][sha256] to allow verification of Algorand's state and transactions +on environments where SHA512_256 is not supported. + + ### SUBSET-SUM Algorand uses [SUBSET-SUM algorithm][sumhash] which is a quantum-resilient hash function. This function is used by the [Merkle Keystore](merklekeystore) to commit on @@ -465,6 +470,7 @@ if: [abft-spec]: https://github.com/algorand/spec/abft.md [sha]: https://doi.org/10.6028/NIST.FIPS.180-4 +[sha256]: https://datatracker.ietf.org/doc/html/rfc4634 [sumhash]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/sumhash-spec.pdf [ed25519]: https://tools.ietf.org/html/rfc8032 [msgpack]: https://github.com/msgpack/msgpack/blob/master/spec.md From 6bc2a649bf02ba4e6688df5c99a5aeb8ac2c83e2 Mon Sep 17 00:00:00 2001 From: algoidan Date: Tue, 26 Jul 2022 14:45:02 +0300 Subject: [PATCH 14/21] fix comments --- dev/crypto.md | 22 +++++++++++----------- dev/ledger.md | 29 ++++++++++++++++------------- dev/partkey.md | 16 ++++++++-------- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/dev/crypto.md b/dev/crypto.md index ab57d61..c56bac1 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -90,7 +90,7 @@ below specifies each prefix (in quotation marks): ## Hash Functions -### SHA512-256 +### SHA512/256 Algorand uses the [SHA-512/256 algorithm][sha] as its primary cryptographic hash function. @@ -98,7 +98,7 @@ Algorand uses this hash function to (1) commit to data for signing and for the Byzantine Fault Tolerance protocol, and (2) rerandomize its random seed. -### SHA512-256 +### SHA256 Algorand uses [SHA-256 algorithm][sha256] to allow verification of Algorand's state and transactions on environments where SHA512_256 is not supported. @@ -332,15 +332,15 @@ all participants that have signed the message must be greater than The state proof scheme requires a commitment to a dense array of participants, in some well-defined order. In order to grantee this property, Algorand uses Vector Commitment. -Leaf hashing is done in the following manner: \newline +Leaf hashing is done in the following manner: _leaf_ = hash("spp" || _Weight_ || _KeyLifeTime_ || _StateProofPK_) for each online participant. where: -- _Weight_ is a 64-bit integer represents the participant's weight in MicroAlgos +- _Weight_ is a 64-bit, little-endian integer represents the participant's weight in MicroAlgos -- _KeyLifeTime_ is a 64-bit constant integer with value of 256 +- _KeyLifeTime_ is a 64-bit, little-endian constant integer with value of 256 - _StateProofPK_ is a 512-bit represents the participant's merkle signature scheme commitment. @@ -348,14 +348,14 @@ where: ## Signature format Similarly to the participant commitment, the state proof scheme requires a commitment -to a signature array. Leaf hashing is done in the following manner: \newline +to a signature array. Leaf hashing is done in the following manner: _leaf_ = hash("sps" || _L_ || _serializedMerkleSignature_) for each online participant. where: -- _L_ is a 64-bit integer represents the participant's `L` value as described in the technical report. +- _L_ is a 64-bit, little-endian integer represents the participant's `L` value as described in the technical report. - _serializedMerkleSignature_ represents a merkleSignature of the participant [merkle signature binary representation](https://github.com/algorandfoundation/specs/blob/master/dev/partkey.md#signatures) @@ -368,9 +368,9 @@ decoded as an empty string. As a result the vector commitment leaf of this slot As described in the [technical report][compactcert] section IV.A, a state proof contains a pseudorandomly chosen set of signatures. The choice is made using a coin. In Algorand's implementation, the -coin derivation is made in the following manner: \newline +coin derivation is made in the following manner: -_Hin_ = ("spc" || _version_ || _participantCommitment_ || _LnProvenWeight_ || _signatureCommitment_ || _singedWeight_ || _stateproofMessageHash_ ) +_Hin_ = ("spc" || _version_ || _participantCommitment_ || _LnProvenWeight_ || _signatureCommitment_ || _signedWeight_ || _stateproofMessageHash_ ) where: @@ -382,7 +382,7 @@ _LnProvenWeight_ is a 8-bit string represents the value of the $\ln(ProvenWeight _signatureCommitment_ is a 512-bit string represents the vector commitment root on the signature array -_singedWeight_ is a 64-bit integer represents the state proof signed weight +_signedWeight_ is a 64-bit, little-endian integer represents the state proof signed weight _stateproofMessageHash_ is a 256-bit string represents the message that would be verified by the state proof. (it would be the hash result of the state proof message) @@ -443,7 +443,7 @@ A state proof is valid for the message hash, with respect to a commitment to the array of participants, if: -- The vector commitment proofs for the signature and the participant information +- The depth of the vector commitment for the signature and the participant information should be less than or equal to 20. - All falcon signatures should have the same salt version and it should diff --git a/dev/ledger.md b/dev/ledger.md index 574dae0..f165021 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -42,7 +42,7 @@ The Algorand Ledger is parameterized by the following values: Currently defined as 500,000. - $A$, the size of an earning unit. Currently defined as 1,000,000 microAlgos. - - Several parameters for state proofs; namely: + - Several parameters for state proofs; namely: (current values provided in the "State Proof Tracking" section) - $\delta_{SP}$, the number of rounds between state proofs. - $\delta_{SPR}$, the number of $\delta_{SP}$ that the network will try to catch-up with. - $\delta_{SPB}$, the delay (lookback) in rounds for online participant @@ -567,7 +567,7 @@ contains the following components: - Participant commitment used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `v`. - - The $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. + - The $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. This field is calculated based on the total weight of the participants [see state-proof-transaction](#state-proof-transaction) # State Proof Tracking @@ -598,7 +598,7 @@ elements: round $\delta_{SP}$ from the current block. Only blocks whose round number is a multiple of $\delta_{SP}$ have a non-zero `v` field. -- Under key `t`, the total weight of participants in the Vector commitment. +- Under key `t`, the total online stake at round $\delta_{SP}$. The participants committed to by the Vector commitment are chosen in a specific fashion: @@ -621,7 +621,7 @@ specific fashion: calculation more efficient, we choose the top accounts based on a normalized balance. The normalized balance is a hypothetical balance that a given account would need to have at round 0 to achieve its - current balance (without pending rewards) as of the last round at + balance (without pending rewards) as of the last round at which the account was touched (i.e., its pending rewards were added to the account's balance). Specifically, for an account $a$ with raw balance $a_I$ and rewards base $a'_I$, the normalized balance is $a_I * @@ -866,7 +866,8 @@ address, which is the hash of the domain-separation prefix `SpecialAddr` with the string `StateProofSender`. The transaction must not have any signature, must not have any fee, must have an empty note, must not have the rekeying field set, must not have any lease, and must not be part -of a transaction group. +of a transaction group. +State proof transaction verification does not apply any special constrains on the first and last valid parameter. The state proof transaction includes four additional fields: - Under msgpack key `sptype`, the type of the state proof; currently always zero. @@ -883,19 +884,21 @@ expected state proof round in the block header, as described transaction is applied to the state, the next expected state proof round for that type of state proof is incremented by $\delta_{SP}$. To encourage the formation of shorter state proof, the rule for -validity of state proof transactions is dependent on the round -number of the block in which a state proof transaction appears. +validity of state proof transactions is dependent on the first valid `fv` round +number in the transaction. In particular, the signed weight of a state proof must be: - Equal to the full weight of all participants, `TotalWeight`, if the - containing block's round number is no greater than the proof's + first valid round number on the transaction is no greater than the proof's `sprnd` plus $\delta_{SP}/2$. -- At least the minimum weight being proven by the proof, - `ProvenWeight`, if the containing block's round number is no less than - the proof's `sprnd` plus $\delta_{SP}$. - At least $ProvenWeight + (TotalWeight - ProvenWeight) * Offset / (\delta_{SP} / 2)$, - if the containing block's round number is the proof's `sprnd` plus + if the first valid round number on the transaction is the proof's `sprnd` plus $\delta_{SP}/2+Offset$. +- At least the minimum weight being proven by the proof, + `ProvenWeight`, if the first valid round number on the transaction is no less than + the proof's `sprnd` plus $\delta_{SP}$. + +Where `ProvenWeight` = (`TotalWeight` * $f_{SP}$) / 2^32 Authorization and Signatures @@ -1055,7 +1058,7 @@ cover the original encoding of transactions as standalone. In addtion to _transaction commitment_, each block will also contains _SHA256 transaction commitment_. It can allow a verifier which does not support SHA512_256 function to verify proof of membership on transcation. In order to consturct this commitment we use Vector Commitment. The leaves in the Vector Commitment -tree are hashed as $$SHA256("TL", txidSha256, stibSha256)$$. Where:\newline +tree are hashed as $$SHA256("TL", txidSha256, stibSha256)$$. Where: - txidSha256 = SHA256(`TX` || transcation) - txidSha256 = SHA256(`STIB` || signed transaction || ApplyData) diff --git a/dev/partkey.md b/dev/partkey.md index 3fd6ee8..9643959 100644 --- a/dev/partkey.md +++ b/dev/partkey.md @@ -186,20 +186,20 @@ In order to bound verification paths on the tree, the tree's depth is bound to 1 #### Public Commitment -The scheme generates multiple keys for the entire participation period. Given _FirstValidRound_, _LastValidRound_ and an _keyLifeTime_, a key is generated for each _Round_ that holds:\newline - _FirstValidRound_ $\leq$ _Round_ $\leq$ _LastValidRound_ and _Round_ % _keyLifeTime_ = 0\newline +The scheme generates multiple keys for the entire participation period. Given _FirstValidRound_, _LastValidRound_ and an _keyLifeTime_, a key is generated for each _Round_ that holds: + _FirstValidRound_ $\leq$ _Round_ $\leq$ _LastValidRound_ and _Round_ % _keyLifeTime_ = 0 -Currently, _keyLifeTime_ is set to 256.\newline +Currently, _keyLifeTime_ is set to 256. After generating the public keys, the scheme creates a vector commitment using the keys as leaves. -Leaf hashing is done in the following manner: \newline +Leaf hashing is done in the following manner: _leaf_$_{i}$ = hash("KP" || _schemeId_ || _Round_ || _P_$_{k_{i}}$) for each corresponding round. where: -- _schemeId_ is a 16-bit constant integer with value of 0 +- _schemeId_ is a 16-bit, little-endian constant integer with value of 0 - _Round_ is a 64-bit, little-endian integer represents the start round for which the key _P_$_{k_{i}}$ is valid. The key would be valid for all rounds in [_Round_,...,_Round_ + _keyLifeTime_ - 1] @@ -229,7 +229,7 @@ _SignatureBitString_ = (_schemeId_ || _Signature_ || _VerifyingKey_ || _VectorIn where: -- _schemeId_ is a 16-bit constant integer with value of 0 +- _schemeId_ is a 16-bit, little-endian constant integer with value of 0 - _Signature_ is a 12,304-bit string represents a Falcon signature in a CT format. @@ -237,7 +237,7 @@ where: - _VectorIndex_ is a 64-bit, little-endian integer -- _Proof_ is constructed in the following way:\newline +- _Proof_ is constructed in the following way: if _n_ = 16: @@ -266,7 +266,7 @@ A signature _s_ for a message _m_ at round _r_ is valid under the public commitm - The falcon signature _s.Signature_ is valid for the message _m_ under the public key _s.VerifyingKey_ - The proof _s.Proof_ is a valid vector commitment proof for the entry _leaf_ at index _s.VectorIndex_ with respect to - the vector commitment root _pk_ where: \newline + the vector commitment root _pk_ where: - _leaf_ := "KP" || _schemeId_ || _Round_ || _s.VerifyingKey_ From f7dff7e192534bed8264024f9511168508d6bcfa Mon Sep 17 00:00:00 2001 From: algoidan Date: Thu, 28 Jul 2022 16:48:21 +0300 Subject: [PATCH 15/21] top N accounts' total weight -> total online stake --- dev/crypto.md | 2 +- dev/ledger.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/crypto.md b/dev/crypto.md index c56bac1..33072f4 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -338,7 +338,7 @@ _leaf_ = hash("spp" || _Weight_ || _KeyLifeTime_ || _StateProofPK_) for each onl where: -- _Weight_ is a 64-bit, little-endian integer represents the participant's weight in MicroAlgos +- _Weight_ is a 64-bit, little-endian integer represents the total online stake in MicroAlgos - _KeyLifeTime_ is a 64-bit, little-endian constant integer with value of 256 diff --git a/dev/ledger.md b/dev/ledger.md index f165021..9e5ee6f 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -888,7 +888,7 @@ validity of state proof transactions is dependent on the first valid `fv` round number in the transaction. In particular, the signed weight of a state proof must be: -- Equal to the full weight of all participants, `TotalWeight`, if the +- Equal to the total online stake, `TotalWeight`, if the first valid round number on the transaction is no greater than the proof's `sprnd` plus $\delta_{SP}/2$. - At least $ProvenWeight + (TotalWeight - ProvenWeight) * Offset / (\delta_{SP} / 2)$, From 4910403992b13be2e68ad71f3df3f894cff6ce96 Mon Sep 17 00:00:00 2001 From: algoidan <79864820+algoidan@users.noreply.github.com> Date: Thu, 28 Jul 2022 17:10:36 +0300 Subject: [PATCH 16/21] Update dev/crypto.md Co-authored-by: Fabrice Benhamouda --- dev/crypto.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/crypto.md b/dev/crypto.md index 33072f4..3c6739f 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -338,7 +338,7 @@ _leaf_ = hash("spp" || _Weight_ || _KeyLifeTime_ || _StateProofPK_) for each onl where: -- _Weight_ is a 64-bit, little-endian integer represents the total online stake in MicroAlgos +- _Weight_ is a 64-bit, little-endian integer represents the participant's balance in MicroAlgos - _KeyLifeTime_ is a 64-bit, little-endian constant integer with value of 256 From 567211dcb3ec22040d9b9041a9709ce0fcc74ff4 Mon Sep 17 00:00:00 2001 From: algoidan Date: Tue, 2 Aug 2022 16:30:19 +0300 Subject: [PATCH 17/21] update number of reveals --- dev/crypto.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/crypto.md b/dev/crypto.md index 3c6739f..0c3ad68 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -449,7 +449,7 @@ if: - All falcon signatures should have the same salt version and it should by equal to the salt version specified in state proof -- The number of reveals in the state proof should be less than of equal to ????? 1024 ??????? +- The number of reveals in the state proof should be less than of equal to 640 - Using the trusted Proven Weight (supplied by the verifier), The state proof should pass the [SNARK-Friendly Weight Threshold Verification][weight-threshold] check From ed8f3cd0e1563d4ff11da1f2c3d92cb41b5ef037 Mon Sep 17 00:00:00 2001 From: algoidan Date: Tue, 2 Aug 2022 19:23:45 +0300 Subject: [PATCH 18/21] fix some CR comments. --- dev/crypto.md | 35 +++++++++++++++++++++-------------- dev/ledger.md | 4 ++-- dev/partkey.md | 10 +++++----- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/dev/crypto.md b/dev/crypto.md index 0c3ad68..3af5a5f 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -338,11 +338,11 @@ _leaf_ = hash("spp" || _Weight_ || _KeyLifeTime_ || _StateProofPK_) for each onl where: -- _Weight_ is a 64-bit, little-endian integer represents the participant's balance in MicroAlgos +- _Weight_ is a 64-bit, little-endian integer representing the participant's balance in MicroAlgos - _KeyLifeTime_ is a 64-bit, little-endian constant integer with value of 256 -- _StateProofPK_ is a 512-bit represents the participant's merkle signature scheme commitment. +- _StateProofPK_ is a 512-bit string representing the participant's merkle signature scheme commitment. ## Signature format @@ -355,9 +355,9 @@ _leaf_ = hash("sps" || _L_ || _serializedMerkleSignature_) for each online parti where: -- _L_ is a 64-bit, little-endian integer represents the participant's `L` value as described in the technical report. +- _L_ is a 64-bit, little-endian integer representing the participant's `L` value as described in the [technical report][compactcert]. -- _serializedMerkleSignature_ represents a merkleSignature of the participant [merkle signature binary representation](https://github.com/algorandfoundation/specs/blob/master/dev/partkey.md#signatures) +- _serializedMerkleSignature_ representing a merkleSignature of the participant [merkle signature binary representation](https://github.com/algorandfoundation/specs/blob/master/dev/partkey.md#signatures) When a signature is missing in the signature array, i.e the prover didn't receive a signature for this slot. The slot would be @@ -374,20 +374,22 @@ _Hin_ = ("spc" || _version_ || _participantCommitment_ || _LnProvenWeight_ || _s where: -_version_ is a 8-bit constant value of 0 +_version_ is an 8-bit constant with value of 0 -_participantCommitment_ is a 512-bit string represents the vector commitment root on the participant array +_participantCommitment_ is a 512-bit string representing the vector commitment root on the participant array -_LnProvenWeight_ is a 8-bit string represents the value of the $\ln(ProvenWeight)$ with 16 bits of precision [SNARK-Friendly Weight Threshold Verification][weight-threshold] +_LnProvenWeight_ an 8-bit string representing the natural logarithm value $\ln(ProvenWeight)$ with 16 bits of precision, as described in +[SNARK-Friendly Weight Threshold Verification][weight-threshold] -_signatureCommitment_ is a 512-bit string represents the vector commitment root on the signature array +_signatureCommitment_ is a 512-bit string representing the vector commitment root on the signature array -_signedWeight_ is a 64-bit, little-endian integer represents the state proof signed weight +_signedWeight_ is a 64-bit, little-endian integer representing the state proof signed weight -_stateproofMessageHash_ is a 256-bit string represents the message that would be verified by the state proof. (it would be the hash result of the state proof message) +_stateproofMessageHash_ is a 256-bit string representing the message that would be verified by the state proof. (it would be the hash result of the state proof message) -We compute: \newline +We compute: + _R_ = SHAKE256(_Hin_) For every reveal, we squeeze 64-bit string and use rejection sampling @@ -425,9 +427,12 @@ every signature in the state proof. under msgpack key `s`. - A sequence of positions, under msgpack key `pr`. The sequence defines the order of the - participant whose signature is being revealed. i.e \newline + participant whose signature is being revealed. i.e + _PositionsToReveal_ = [IntToInd(coin$_{0}$),...,IntToInd(coin$_{numReveals-1}$)] +where IntToInd and numReveals are defined in the [technical report][compactcert], section IV. + Note that, although the state proof contains a commitment to the signatures, it does not contain a commitment to the participants. @@ -463,7 +468,9 @@ if: - All of the signatures are valid signatures for the message hash. - For every i $\in$ {0,...,numReveals-1} there is a reveal in map denote by _r_$_{i}$, where _r_$_{i}$ $\gets$ T[_PositionsToReveal_[_i_]] - and _r_$_{i}$.Sig.L <= _coin_$_{i}$ < _r_$_{i}$.Sig.L + _r_$_{i}$.Part.Weight + and _r_$_{i}$.Sig.L <= _coin_$_{i}$ < _r_$_{i}$.Sig.L + _r_$_{i}$.Part.Weight. + + T is defined in the [technical report][compactcert], section IV. [ledger-spec]: https://github.com/algorand/spec/ledger.md @@ -478,5 +485,5 @@ if: [falcon]: https://falcon-sign.info/falcon.pdf [deterministic-falcon]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/falcon-deterministic.pdf [vector-commitment]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/merkle-vc-full.pdf -[compactcert]: https://eprint.iacr.org/2020/1568 +[compactcert]: https://eprint.iacr.org/archive/2020/1568/20210330:194331 [weight-threshold]: https://github.com/algorandfoundation/specs/blob/master/dev/cryptographic-specs/weight-thresh.pdf \ No newline at end of file diff --git a/dev/ledger.md b/dev/ledger.md index 9e5ee6f..a9873f1 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -567,7 +567,7 @@ contains the following components: - Participant commitment used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `v`. - - The $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. This field is calculated based on the total weight of the participants [see state-proof-transaction](#state-proof-transaction) + - The value $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. This field is calculated based on the total weight of the participants [see state-proof-transaction](#state-proof-transaction) # State Proof Tracking @@ -719,7 +719,7 @@ A key registration transaction additionally has the following fields: - The _selection public key_ $\spk$, public authorization key of an account's participation keys ($\pk$). - - The _state proof public key_ $\sppk$, public commitment on the account's + - The _state proof public key_ $\sppk$, public commitment to the account's state proof keys ($\sppk$). If $\vpk$ , $\spk$ and $\sppk$ are all unset, the transaction deregisters the account's participation key set, as the result, marks the account offline. diff --git a/dev/partkey.md b/dev/partkey.md index 9643959..207957a 100644 --- a/dev/partkey.md +++ b/dev/partkey.md @@ -177,7 +177,7 @@ And this verified credential is wrapped in a $\Vote$ struct with _Raw Vote_ ## Algorand State Proof Keys ### Algorand's Committable Ephemeral Keys Scheme - Merkle Signature Scheme -Algorand achieves [forward security](https://en.wikipedia.org/wiki/Forward_secrecy) using Merkle Signature Scheme. This scheme consists of using a different ephemeral key for each round in which it will be used. The scheme uses vector commitment to generate commitment on those keys. +Algorand achieves [forward security](https://en.wikipedia.org/wiki/Forward_secrecy) using Merkle Signature Scheme. This scheme consists of using a different ephemeral key for each round in which it will be used. The scheme uses vector commitment to generate commitment to those keys. The private key must be deleted after the round passes in order the completely achieves forward secrecy. The Merkle scheme uses Falcon scheme as the underlying digital signature algorithm. @@ -201,10 +201,10 @@ where: - _schemeId_ is a 16-bit, little-endian constant integer with value of 0 -- _Round_ is a 64-bit, little-endian integer represents the start round for which the key _P_$_{k_{i}}$ is valid. +- _Round_ is a 64-bit, little-endian integer representing the start round for which the key _P_$_{k_{i}}$ is valid. The key would be valid for all rounds in [_Round_,...,_Round_ + _keyLifeTime_ - 1] -- _P_$_{k_{i}}$ is a 14,344-bit string represents the Falcon ephemeral public key. +- _P_$_{k_{i}}$ is a 14,344-bit string representing the Falcon ephemeral public key. - hash: is the SUBSET-SUM hash function as defined in the [Algorand Cryptographic Primitives Specification](Crypto.md) @@ -231,7 +231,7 @@ where: - _schemeId_ is a 16-bit, little-endian constant integer with value of 0 -- _Signature_ is a 12,304-bit string represents a Falcon signature in a CT format. +- _Signature_ is a 12,304-bit string representing a Falcon signature in a CT format. - _VerifyingKey_ is a 14,344-bit string @@ -252,7 +252,7 @@ where: - _n_ is a 8-bit string. -- _digest_$_{i}$ is a 512-bit sumhash result. +- _digest_$_{i}$ is a 512-bit string representing sumhash result. - _zeroDigest_ is a constant 512-bit string with the value 0. From f8a283dcd602aa06e79d837fd8993942abc87d0a Mon Sep 17 00:00:00 2001 From: algoidan Date: Wed, 3 Aug 2022 21:14:56 +0300 Subject: [PATCH 19/21] fix comments --- dev/crypto.md | 13 +++++++++---- dev/ledger.md | 19 +++++++++---------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/dev/crypto.md b/dev/crypto.md index 3af5a5f..18b1843 100644 --- a/dev/crypto.md +++ b/dev/crypto.md @@ -50,7 +50,7 @@ below specifies each prefix (in quotation marks): - "OT1" and "OT2": The first and second layers of keys used for [ephemeral signatures](#ephemeral-key-signature). - "MA": An internal node in a [Merkle tree](#merkle-tree). - - "MB": A bottem leaf in a vector commitment [vector commitment](#vector-commitment). + - "MB": A bottom leaf in a vector commitment [vector commitment](#vector-commitment). - "KP": Is a public key used by the Merkle siganture scheme [Merkle Siganture Scheme](merklesignaturescheme) - "spc": A coin used as part of the state proofs construction. - "spp": Participant's information (state proof pk and weight) used for state proofs. @@ -361,7 +361,7 @@ where: When a signature is missing in the signature array, i.e the prover didn't receive a signature for this slot. The slot would be -decoded as an empty string. As a result the vector commitment leaf of this slot would be the hash of the bottom leaf. +decoded as an empty string. As a result the vector commitment leaf of this slot would be the hash value of the constant domain separator "MB" (the bottom leaf) ## Choice of revealed signatures @@ -388,12 +388,17 @@ _signedWeight_ is a 64-bit, little-endian integer representing the state proof s _stateproofMessageHash_ is a 256-bit string representing the message that would be verified by the state proof. (it would be the hash result of the state proof message) +For short, we refer below to the revealed signatures simply as 'reveals' + We compute: _R_ = SHAKE256(_Hin_) -For every reveal, we squeeze 64-bit string and use rejection sampling -to have a uniform random coin in [0,signedWeight). +For every reveal, +- Extract a 64-bit string from _R_. +- use rejection sampling and extract additional 64-bit string from _R_ if needed + +This would grantee having a uniform random coin in [0,signedWeight). ## State proof format diff --git a/dev/ledger.md b/dev/ledger.md index a9873f1..a2e5213 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -550,24 +550,24 @@ Light block header contains the following components: # Light Block Header Commitment -Light Block Header Commitment for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$] for some number _X_, defined as -the root of a vector commitment whose leaves are light block headers for rounds _X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$ respectively. We use SHA256 hash function to create this vector commitment. +Light Block Header Commitment for rounds (_X_ $\cdot$ $\delta_{SP}$,...,(_X_+1) $\cdot$ $\delta_{SP}$] for some number _X_, defined as +the root of a vector commitment whose leaves are light block headers for rounds _X_ $\cdot$ $\delta_{SP}$,...,(_X_+1) $\cdot$ $\delta_{SP}$ respectively. We use SHA256 hash function to create this vector commitment. # State Proof message -A state proof message for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$] for some number _X_, +A state proof message for rounds (_X_ $\cdot$ $\delta_{SP}$,...,(_X_+1) $\cdot$ $\delta_{SP}$] for some number _X_, contains the following components: - - Light block headers commitment for rounds (_X_$\cdot$$\delta_{SP}$,...,(_X_+1)$\cdot$$\delta_{SP}$], under msgpack key `b`. + - Light block headers commitment for rounds (_X_ $\cdot$ $\delta_{SP}$,...,(_X_+1) $\cdot$ $\delta_{SP}$], under msgpack key `b`. - - First attested round which would be equal to _X_$\cdot$$\delta_{SP}$ + 1, under msgpack key `f`. + - First attested round which would be equal to _X_ $\cdot$ $\delta_{SP}$ + 1, under msgpack key `f`. - - Last attested round which would be equal to (_X_+1)$\cdot$$\delta_{SP}$, under msgpack key `l`. + - Last attested round which would be equal to (_X_+1) $\cdot$ $\delta_{SP}$, under msgpack key `l`. - - Participant commitment used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], + - Participant commitment used to verify state proof for rounds ((_X_+1) $\cdot$ $\delta_{SP}$,...,(_X_+2) $\cdot$ $\delta_{SP}$], under msgpack key `v`. - - The value $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1)$\cdot$$\delta_{SP}$,...,(_X_+2)$\cdot$$\delta_{SP}$], under msgpack key `P`. This field is calculated based on the total weight of the participants [see state-proof-transaction](#state-proof-transaction) + - The value $\ln(ProvenWeight)$ with 16 bits of precision that would used to verify state proof for rounds ((_X_+1) $\cdot$ $\delta_{SP}$,...,(_X_+2) $\cdot$ $\delta_{SP}$], under msgpack key `P`. This field is calculated based on the total weight of the participants [see state-proof-transaction](#state-proof-transaction) # State Proof Tracking @@ -872,8 +872,7 @@ The state proof transaction includes four additional fields: - Under msgpack key `sptype`, the type of the state proof; currently always zero. - Under msgpack key `sprnd`, the last round that this state proof attest to. - - Under msgpack key `sp`, the state proof fields as defined in the state proof format subsection - of the cryptographic primitive specification document. + - Under msgpack key `sp`, the state proof fields as defined in the [state proof format](https://github.com/algorandfoundation/specs/blob/master/dev/crypto.md#state-proof-format). - Under msgpack key `spmsg`, a structure that compose the state proof message, whose hash is being attested by the state proof. This structure defined [above](#state-proof-message) From a61e156eb0ee77ea102c93f80eb3c11242bd3a6a Mon Sep 17 00:00:00 2001 From: algoidan Date: Thu, 4 Aug 2022 14:08:14 +0300 Subject: [PATCH 20/21] rephrase the normalized balance desc --- dev/ledger.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/dev/ledger.md b/dev/ledger.md index 12db070..4b6260d 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -619,14 +619,19 @@ specific fashion: computing the top $N_{SP}$ accounts by their algo balance is difficult in the presence of pending rewards. Thus, to make this top-$N_{SP}$ calculation more efficient, we choose the top accounts based on a - normalized balance. The normalized balance is a hypothetical balance - that a given account would need to have at round 0 to achieve its - balance (without pending rewards) as of the last round at - which the account was touched (i.e., its pending rewards were added - to the account's balance). Specifically, for an account $a$ with raw - balance $a_I$ and rewards base $a'_I$, the normalized balance is $a_I * - RewardUnit / (a'_I + RewardUnit)$. + normalized balance. normalized balance, denoted below by $n_I$. + The normalized balance is a hypothetical balance: Consider an account $I$ with current balance $a_I$. If an account had balance $n_I$ in the genesis block, and did not perform any transactions since then, then its balance by the current round (when rewards are included) will be $a_I$, except perhaps due to rounding effects. + In more detail, let $r$ be the last round in which a transaction touched account $I$ (and therefore all pending rewards were added to it). Consider the following quantities, as defined in the [Account State](#account-state): + + - The raw balance $a_I$ of account $I$ at round $r$ is its total balance. + - The rewards base $a'_I$ is meant to capture the total rewards that were allocated to all accounts upto round $r$, expressed as a fraction of the total stake (with limited precision as described below). + + Given these two quantities, the normalized balance of an online account $I$ is $a_I/(1+a'_I)$. For example, if the total amount of rewards distributed upto round $r$ is 20% of the total stake, then the normalized balance is $a_I/1.2$. + + To limit the required precision in this calculation, the system uses a parameter $ru$ that specifies the rewards-earning unit, namely accounts only earn rewards for a whole number of $ru$ microAlgos. (Currently $ru=1,000,000$, so the rewards-earning unit is one Algo.) + + The parameter $a'_I$ above is an integer such that $a'_I/ru$ is the desired fraction, rounded down to precision of $1/ru$. The normalized balance is them computed as $n_I = \lfloor a_I \cdot ru / (a'_I + ru) \rfloor$. # Transactions From b3634449f898bc7a4e024081ac199670cfa5fa5d Mon Sep 17 00:00:00 2001 From: algoidan Date: Thu, 4 Aug 2022 23:09:50 +0300 Subject: [PATCH 21/21] fix comment --- dev/ledger.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/ledger.md b/dev/ledger.md index 4b6260d..5ea94a0 100644 --- a/dev/ledger.md +++ b/dev/ledger.md @@ -619,19 +619,19 @@ specific fashion: computing the top $N_{SP}$ accounts by their algo balance is difficult in the presence of pending rewards. Thus, to make this top-$N_{SP}$ calculation more efficient, we choose the top accounts based on a - normalized balance. normalized balance, denoted below by $n_I$. + normalized balance, denoted below by $n_I$. The normalized balance is a hypothetical balance: Consider an account $I$ with current balance $a_I$. If an account had balance $n_I$ in the genesis block, and did not perform any transactions since then, then its balance by the current round (when rewards are included) will be $a_I$, except perhaps due to rounding effects. In more detail, let $r$ be the last round in which a transaction touched account $I$ (and therefore all pending rewards were added to it). Consider the following quantities, as defined in the [Account State](#account-state): - - The raw balance $a_I$ of account $I$ at round $r$ is its total balance. + - The raw balance $a_I$ of account $I$ at round $r$ is its total balance on that round. - The rewards base $a'_I$ is meant to capture the total rewards that were allocated to all accounts upto round $r$, expressed as a fraction of the total stake (with limited precision as described below). Given these two quantities, the normalized balance of an online account $I$ is $a_I/(1+a'_I)$. For example, if the total amount of rewards distributed upto round $r$ is 20% of the total stake, then the normalized balance is $a_I/1.2$. To limit the required precision in this calculation, the system uses a parameter $ru$ that specifies the rewards-earning unit, namely accounts only earn rewards for a whole number of $ru$ microAlgos. (Currently $ru=1,000,000$, so the rewards-earning unit is one Algo.) - The parameter $a'_I$ above is an integer such that $a'_I/ru$ is the desired fraction, rounded down to precision of $1/ru$. The normalized balance is them computed as $n_I = \lfloor a_I \cdot ru / (a'_I + ru) \rfloor$. + The parameter $a'_I$ above is an integer such that $a'_I/ru$ is the desired fraction, rounded down to precision of $1/ru$. The normalized balance is computed as $n_I = \lfloor a_I \cdot ru / (a'_I + ru) \rfloor$. # Transactions