# EconLedger: A Proof-of-ENF Consensus Based Lightweight Distributed Ledger for IoVT Networks
## 4 PoENF: A Proof-of-ENF Consensus Protocol
### Basic Notation  
Table 1 describes relevant notation used in PoENF model. To model sequential events in synchronous consensus rounds, a set of subsequential slots are used to define \(Epoch\), which is represented as \(sl_{E}=\{sl_{1},sl_{2},...,sl_{t}\}\), where \(0\leq t\leq R\), and epoch size \(R\) is a value of multiple unit slot \(sl\). A _validator_\(v_{i}\in V\) (\(V\subseteq U\)) is a valid node that is qualified for being selected as a PoENF committee member. We define _Dynasty_ to represent current PoENF committee, which is denoted as \(D=\{(pk_{1},c_{1}),(pk_{2},c_{2}),...,(pk_{k},c_{k})\subseteq V\}\), where \(0\leq k\leq K\), and \(K\) is the PoENF committee size. We use \(\mathcal{H}(\cdot)\) to denote a predefined collision-resistant hash function that outputs hash string \(h\in\{0,1\}^{\lambda}\). Before introducing key features and components in the PoENF consensus protocol, several basic definitions are introduced as following. \begin{table}
\begin{tabular}{c c} \hline \hline
**Symbol** & **Description** \\ \hline \(sl_{E}\) & Epoch including sequential order of time slot \\ \hline \(D\) & Dynasty represents current PoE committee \\ \hline \(tx\) & A transaction broadcasted by the node of network \\ \hline \(B\) & A block proposed by the validator in current Dynasty \\ \hline \(\mathcal{C}\) & Distributed ledger maintained by the consensus network \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Relevant basic notation. Figure 2: The illustration of block and off-chain data structure. **Definition 1**. : _Transaction is used to save data that are launched by a node \(u_{i}\) for recording on the distributed ledger, and its structure is represented as \(tx=\{tx\_hash,pk_{i},T_{stamp},data,\sigma_{i}\}\), where the parameters are the following:_  
* \(tx\_hash\) _is a_ \(\lambda\)_-bit-length hash string of transaction_ \(tx\)_, which is calculated by_ \(\mathcal{H}(pk_{i},T_{stamp}\)_, data);_
* \(pk_{i}\) _is sender's public key;_
* \(T_{stamp}\) _is time stamp of generating transaction;_
* _data is the information_ \(d\in\{0,1\}^{*}\) _enclosed by the transaction, such as swarm_hash or any byte strings;_
* \(\sigma_{i}\) _is a signature_ \(RSA.sign_{sk_{i}}(tx\_hash,pk_{i},T_{stamp},data)\) _signed by the sender's private key_ \(sk_{i}\)_._  
**Definition 2**. : _Block is a basic data unit that encapsulates valid transactions and is always appended on the chain head. A block generated at slot \(sl_{t}\) (\(t\in 1,2,3,..\)) by validator \(v_{j}\) is represented by \(B_{i}=(pre\_hash,height,mt\_root,tx\_list,sl_{t},pk_{i},\sigma_{i})\), where the parameters are the following:_  
* \(pre\_hash\) _is a_ \(\lambda\)_-bit-length hash string of previous Block_ \(B_{i-1}\)_, which is calculated by_ \(\mathcal{H}\)__\((pre\_hash,height,mt\_root,tx\_list,sl_{t-1})\)_;_
* _height is the height of current block in blockchain (ledger);_
* \(mt\_root\) _is a root hash of a Merkle tree of_ \(tx\_list\)_;_
* \(tx\_list\) _is an orderly transactions list_ \([tx_{1},tx_{2},...,tx_{n}]\)_;_
* \(sl_{t}\) _is a block created time stamp at the round_ \(sl_{t}\)_;_
* \(pk_{j}\) _is public key of validator_ \(v_{j}\)_;_
* \(\sigma_{j}\) _is a signature_ \(RSA.sign_{sk_{j}}(pre\_hash,height,mt\_root,tx\_list,sl_{t},pk_{j})\) _signed by validator_ \(v_{j}\)_._  
We define a special block called _Genesis Block_ that is represented as \(B_{0}=(pre\_hash=0\), \(height=0,sl_{0}=0,init\_D)\), where \(init\_D\) is the initial dynasty. Therefore, all on-chain data on the distributed ledger are organized as an ordered sequence of blocks starting from \(B_{0}\). **Definition 3**. : _Blockchain (Distributed Ledger) is a partial order of blocks that is represented as \(\mathcal{C}=B_{0}\to B_{1}\rightarrow...\to B_{n-1}\to B_{n}\) indexed by strictly increasing slots \(sl_{t}\).