Introduction
-
Decentralization. There is no the third party authorities to provide any authentication. Moreover, any node may become some hospital’s server if the node and the hospital wish. Besides, data is stored at the blockchain, rather than cloud servers.
-
Secure data storage. On the one hand, every transaction’s publicly verifiable data must be verified by all record-nodes before the transaction is included in the blockchain. On the other hand, we suggest that MIStore adopts the Practical Byzantine Fault-tolerance (PBFT) to be the consensus scheme of the blockchain, and all related data is stored at the blockchain. Due to PBFT’s property of tamper-resistance, data, which has been included by record-nodes in the blockchain, cannot be modified or deleted by anyone. Due to the above two points, it provides high credibility to all users. Therefore, once a transaction has been included in the blockchain, all its publicly verifiable data is credible.
-
Threshold. For instance, a hospital performs a (t, n)-threshold MIStore protocol among a patient, an insurance company and n servers. Firstly, the hospital store confidential data in the blockchain. Secondly, the servers cannot learn anything from the data if more than n − t servers are honest. Thirdly, after the insurance company sends a query to the blockchain, if he can collect t correct responses to the query, then he can obtain his desired result. Finally, anyone (including the insurance company) cannot learn anything with less than t responses.
-
Verifiable. Key data stored at the blockchain is verifiable. Specifically,
-
Anyone can verify whether the verification key is valid.
-
Any server can verify whether his core-share is correctly computed by the corresponding hospital.
-
The insurance company can verify whether responses are correctly computed by corresponding servers, respectively.
-
Patient may verify whether his spending data is correctly processed by corresponding hospital.
-
-
Efficient verification. Key data is recorded in the transaction’s payload, and most of key data is publicly verifiable. Therefore, record-nodes can help other nodes to verify payloads’ data before the transactions are recorded in the blockchain. Consequently, once a transaction has been recorded in the blockchain, the transaction’s publicly verifiable data is credible. After that, the transaction’s receiver needs not to perform the verifications performed by record-nodes. Moreover, the receiver just needs to perform very little verification that can be performed only by him. In this way, it significantly reduces users’ verifying computations, and receivers just perform some simple and few computations, rather than complex and massive computations.
-
Efficient homomorphic computation. According to insurance company’s query, servers can perform homomorphic multiplications and additions on their shares, and then generate responses. Moreover, the homomorphic computations calculated by servers are efficient additions and multiplications of finite field.
Background
System setting and model
Blockchain network and cryptographic keys
Assumptions
An overview of MIStore
MIStore
Transaction and block
Transaction header | |
Hash | The transaction’s hash value |
Block number | Block containing the transaction |
Order | The transaction’s number in the block |
Timestamp | Creation time of the transaction |
Sender | Sender’s ID |
Receiver | Receiver’s ID |
Signature | Sig{the transaction’s hash value} |
Payload: Data | |
data1, data2, ⋯, datan |
Block header | |
Name | Description |
Version | Block version number |
Hash | The block’s hash value |
Parent hash | The previous block’s hash value |
Difficulty | The proof-of-work target difficulty |
Timestamp | Creation time of the block |
Merkle root | The root of Merkle Tree of transactions |
Nonce | A random counter for proof-of-work |
Block body: Transactions | |
Transaction1, Transaction2⋯, Transactionn |
-
The transaction’s inputs have not been used previously.
-
The transaction’s signature is valid.
-
The sum of input coins is equal to the sum of output coins.
Construction of MIStore
Symbol | Description |
---|---|
g
| The generator of a cyclic group \(\mathbb {}\) |
e
| The bilinear map, e: \(\mathbb {G} \times \mathbb {G} \rightarrow \mathbb {G}\) |
\(\mathbb {F}_{p}\)
| The finite field with character p |
I
D
H
| The hospital’s ID |
S
r
i
| The i-th servers’ IDs |
I
D
I
| The insurance company’s ID |
\(ID_{T_{i}}\)
| The transaction Ti’s ID |
I
D
P
| The patient’s ID |
VK
| The verification key |
{pkH, skH} | The hospital’s key pair |
{pki, ski} | The i-th server’s key pair, for i from 1 to n |
{pkI, skI} | The insurance company’s key pair |
d
i
| The i-th plaintext message protected by n servers |
{CFi,1, CFi,2, Chi} | The i-th server’s core-share |
R
e
s
p
i
| The i-th server’s respnse |
-
Step 1: Initialization. Hospital randomly samples two polynomials F1(x) and F2(x) of degree t − 1 over \(\mathbb {F}_{p}\) as the following polynomials:$$F_{1}(x)=a_{t-1}x^{t-1}+a_{t-2}x^{t-2}+{\cdots} +a_{1}x+s_{core,1}, $$where \(s_{core,1},s_{core,2},a_{1},\cdots ,a_{t-1},d_{1},\cdots ,d_{t-1}\in \mathbb {F}_{p}\), at− 1≠ 0 and dt− 1≠ 0. Let$$F_{2}(x)=d_{t-1}x^{t-1}+d_{t-2}x^{t-2}+{\cdots} +d_{1}x+s_{core,2}, $$$$f_{1}(x)=a_{t-1}x^{t-1}+a_{t-2}x^{t-2}+\cdots+a_{1}x, $$Then, we have F1(x) = f1(x) + score,1 and F2(x) = f2(x) + score,2. Hospital computes$$f_{2}(x)=d_{t-1}x^{t-1}+d_{t-2}x^{t-2}+\cdots+d_{1}x. $$After that, hospital randomly samples l(x) of degree t − 1 from \(\mathbb {F}_{p}[x]\) as follow:$$f_{1}(x)f_{2}(x)=q_{2t-2}x^{2t-2}+q_{2t-3}x^{2t-3}+\cdots+q_{2}x^{2}. $$Let$$l(x)=c_{t-1}x^{t-1}+c_{t-2}x^{t-2}+{\cdots} +c_{1}x. $$Then hospital generates a verification key VK as follow:$$h(x)=f_{1}(x)f_{2}(x)-l(x)=b_{2t-2}x^{2t-2}+b_{2t-3}x^{2t-3}+\cdots+b_{1}x. $$where g is a base point of 256-bit Barreto-Naehrig curve (BN-curve) [25]. For i from 1 to n, hospital does as follows:$$\begin{array}{@{}rcl@{}} \mathit{VK} &=& \{g,g^{a_{t-1}},\cdots,g^{a_{1}},g^{s_{core,1}},g^{d_{t-1}},\cdots,g^{d_{1}},g^{s_{core,2}},\\ && g^{b_{2t-2}}, \cdots,g^{b_{1}},g^{c_{t-1}},\cdots,g^{c_{1}}\}, \end{array} $$Then, the hospital generates a initialize-transaction Tinitialize as follows:
-
Compute CFi,1 = F1(Sri), CFi,2 = F2(Sri) and Chi = h(Sri). {CFi,1, CFi,2, Chi} is Serveri’s core-share.
-
Encrypts CFi,1, CFi,2, Chi with Serveri’s public key pki into \(C_{CF_{i,1}}=Enc_{pk_{i}}(CF_{i,1})\), \(C_{CF_{i,2}}=Enc_{pk_{i}}(CF_{i,2})\) and \(C_{Ch_{i}}=Enc_{pk_{i}}(Ch_{i})\) via ECIES. Only Serveri can decrypt them since only Serveri has the corresponding secret key ski.
-
Compute commitments \(CM_{CF_{i,1}}=g^{CF_{i,1}}\), \(CM_{CF_{i,2}}=g^{CF_{i,2}}\) and \(CM_{Ch_{i}}=g^{Ch_{i}}\). The commitments will be used in later verifications without obtaining CFi,1, CFi,2 and Chi.
×After that, the hospital sends the Tinitialize to blockchain network. -
-
Step 2: Record-nodes verify Tinitialize. Honest record-nodes will verify all new initialize-transactions before appending them at the blockchain. For instance, when an honest record-node receives the Tinitialize, he will verify its verification key (VK) at first, and then verify other data with the VK. If Tinitialize passes the verifications, then the record-node accepts the Tinitialize and writes it in his local block, otherwise, he will reject the Tinitialize. The verifications are described as follows:If any data cannot pass corresponding verification, then the record-node rejects the Tinitialize.
-
First, verify the verification key VK. The record-node verifies whether polynomials f1(x), f2(x), h(x) and l(x), committed in verification key, are well-formed. Specifically, the record-node does as follows:
-
Randomly sample a number \(x_{0}\in \mathbb {F}_{p}\).
-
Compute$$\begin{array}{@{}rcl@{}} g_{1}&=&(g^{a_{t-1}})^{x_{0}^{t-1}}(g^{a_{t-2}})^{x_{0}^{t-2}}{\cdots} (g^{a_{1}})^{x_{0}}\\ &=& g^{a_{t-1}x_{0}^{t-1}+a_{t-2}x_{0}^{t-2}+{\cdots} +a_{1}{x_{0}}}\\ g_{2}&=&(g^{d_{t-1}})^{x_{0}^{t-1}}(g^{d_{t-2}})^{x_{0}^{t-2}}{\cdots} (g^{d_{1}})^{x_{0}}\\ &=& g^{d_{t-1}x_{0}^{t-1}+d_{t-2}x_{0}^{t-2}+{\cdots} +d_{1}{x_{0}}}\\ g_{3}&=&(g^{b_{2t-2}})^{x_{0}^{2t-2}}(g^{b_{2t-3}})^{x_{0}^{2t-3}}{\cdots} (g^{b_{1}})^{x_{0}}\\ &=& g^{b_{2t-2}x_{0}^{2t-2}+b_{2t-3}x_{0}^{2t-3}+{\cdots} +b_{1}x_{0}}\\ g_{4}&=&(g^{c_{t-1}})^{x_{0}^{t-1}}(g^{c_{t-2}})^{x_{0}^{t-2}}{\cdots} (g^{c_{1}})^{x_{0}}\\ &=& g^{c_{t-1}x_{0}^{t-1}+c_{t-2}x_{0}^{t-2}+{\cdots} +c_{1}x_{0}} \end{array} $$
-
Ifthen the record-node accepts that f1(x), f2(x), h(x) and l(x) satisfy relationships and forms mentioned at Step 1. Otherwise he rejects the Tinitialize and stops his verifications.$$e(g_{1},g_{2})=e(g_{3}g_{4},g), $$
-
-
Second, verify commitments \(CM_{CF_{i,1}}\), \(CM_{CF_{i,2}}\), \(CM_{Ch_{i}}\), i from 1 to n. Specifically, the record-node computes as follows:
-
Compute$$\begin{array}{@{}rcl@{}} {CF}_{i,1}^{*} &=& (g^{a_{t-1}})^{Sr_{i}^{t-1}}{\cdots} (g^{a_{1}})^{Sr_{i}}(g^{s_{core,1}})\\ {CF}_{i,2}^{*} &=& (g^{d_{t-1}})^{Sr_{i}^{t-1}}{\cdots} (g^{d_{1}})^{Sr_{i}}(g^{s_{core,2}})\\ {Ch}_{i}^{*} &=& (g^{b_{2t-2}})^{Sr_{i}^{2t-2}}{\cdots} (g^{b_{1}})^{Sr_{i}} \end{array} $$
-
Ifthen the record-node accepts that \(CM_{CF_{i,1}}\), \(CM_{CF_{i,2}}\) and \(CM_{Ch_{i}}\) are correctly computed by the hospital, otherwise he rejects the Tinitialize and stop his verifications.$$ {CF}_{i,1}^{*} = CM_{CF_{i,1}}, {CF}_{i,2}^{*} = CM_{CF_{i,2}} \text{ and } {Ch}_{i}^{*} = CM_{Ch_{i}}, $$(1)
-
-
-
Step 3: Servers verify core-shares. i from 1 to n, when the Serveri sees the Tinitialize at the blockchain, the server may perform the following computations:
-
Decrypt \(C_{CF_{i,1}}\), \(C_{CF_{i,2}}\) and \(C_{Ch_{i}}\). Then he obtains CFi,1, CFi,2 and Chi.
-
Ifthen the server accepts that the Tinitialize is valid, otherwise he can send his evidences \(\text {ID}_{T_{initialize}}\), CFi and Chi to the hospital’s smart contract. After that, the server can obtain a amount of reward.$$CM_{CF_{i,1}}=g^{CF_{i,1}},CM_{CF_{i,2}}=g^{CF_{i,2}}\textrm{ and }CM_{Ch_{i}}=g^{Ch_{i}}, $$
-
-
Step 4: Record. After seeing the Tinitialize at the blockchain, the hospital may generate record-transactions. Moreover, let da1, da2, ⋯, dam denote the patient’s spending records. The each spending record has a unique invoice number, \({\text {ID}}_{invoice}^{i}\). However, they belong to the same initialize-transaction Tinitialize. Without loss of generality, we assume that the hospital generates two record-transactions (T1 and T2), and the patient’s spending records are da1, da2, da3, da4. Then, i from 1 to 4, hospital randomly divides dai into dai = ddi,1ddi,2. Then, the hospital computesThen, it generates transactions T1, T2 as follows:$$\mathsf{s}_{i,1} = \mathsf{dd}_{i,1} - \mathsf{s}_{core,1}, \mathsf{s}_{i,2}=\mathsf{dd}_{i,2}-\mathsf{s}_{core,2}. $$×After that, the hospital sends T1, T2 to blockchain network.
-
Step 4.5: Patient verifies spending records. The patient knows the true spending records da1, da2, da3, da4. After seeing the transactions T1 and T2 at the blockchain, he can verify the correctness of his spending data of T1 and T2. Specifically, he verify whether the following equations are correct, i from 1 to 4.If the above equation holds for each i from 1 to 4, then the patient considers that his spending data is correctly processed by the hospital. Otherwise, he will consider that the hospital is dishonest and send the evidences to the hospital’s smart contract to get a certain number of reward.$$e(g^{\mathsf{da}_{i}},g)=e(g^{s_{core,1}}g^{\mathsf{s}_{i,1}},g^{s_{core,2}}g^{\mathsf{s}_{i,2}}) $$
-
Step 5: Query. When the insurance company wants to get a sum of spending records related to the initialize-transaction Tinitialize, he may send a query-transaction Tquery containing ID\(_{T_{\mathit {initialize}}}\) to the blockchain network. The Tquery is described as follows:×When the query-transaction is appended at the blockchain, it means that insurance company wants to know the sum of all spending records of the patient corresponding to ID\(_{T_{initialize}}\) until now.
-
Step 6: Respond. After the Tquery has presented at blockchain. If a server wishes to respond the query, then he will generate a response according to the Tquery. After that, the server will secretly send his response to the insurance company via a respond-transaction Trespond. If insurance company collets at least t responses correctly computed by corresponding servers, then insurance company can recover the correct sum of spending records related to the IDinitialize. To introduce the process, without loss of generality, we assume that the t servers are Server1, Server2, ⋯ , Servert and they wish to respond the Tquery. According to Tquery, the servers can obtain s1,1, s1,2, s2,1, s2,2, s3,1, s3,2, s4,1, s4,2 which are recorded in T1 and T2. First, i from 1 to t, the Serveri computes as follows:Then Serveri encrypts Respi into$$\mathit{Resp}_{i} = \sum\limits_{j = 1}^{4} (CF_{i,1} + s_{j,1})(CF_{i,2}+s_{j,2})-4\cdot Ch_{i}. $$with insurance company’s public key pkI. Then Serveri computes a commitment of Respi as follow:$$C_{\mathit{Resp}_{i}} = Enc_{pk_{I}}(\mathit{Resp}_{i}) $$After that, Serveri generates a respond-transaction \({T}_{\mathit {respond}}^{i}\), containing \(\text {ID}_{T_{initialize}}\), \(CM_{\mathit {Resp}_{i}}\) and \(C_{\mathit {Resp}_{i}}\). The Trespond can be described as follow:$$CM_{\mathit{Resp}_{i}} = g^{\mathit{Resp}_{i}}. $$×Overall, servers Server1, Server2, ⋯, Servert will generate \(C_{\mathit {Resp}_{1}}\), \(C_{\mathit {Resp}_{2}}\), ⋯, \(C_{\mathit {Resp}_{t}}\) and \(CM_{\mathit {Resp}_{1}}\), \(CM_{\mathit {Resp}_{2}}\), ⋯, \(CM_{\mathit {Resp}_{t}}\). Then, Server1, Server2, ⋯, Servert generate transactions \({T}_{\mathit {respond}}^{1}\), \({T}_{\mathit {respond}}^{2}\), ⋯, \({T}_{\mathit {respond}}^{t}\), respectively. Because only the insurance company has the corresponding secret key skI, so only the insurance company can decrypt \(C_{\mathit {Resp}_{1}}\), \(C_{\mathit {Resp}_{2}}\), ⋯, \(C_{\mathit {Resp}_{t}}\). After that, the servers send \({T}_{\mathit {respond}}^{1}\), \({T}_{\mathit {respond}}^{2}\), ⋯, \({T}_{\mathit {respond}}^{t}\) to the blockchain network.
-
Step 7: Record-nodes verify \({T}_{\mathit {respond}}^{1}\), \({T}_{\mathit {respond}}^{2}\), ⋯, \({T}_{\mathit {respond}}^{t}\). After receiving the respond-transactions \({T}_{\mathit {respond}}^{1}\), \({T}_{\mathit {respond}}^{2}\), ⋯, \({T}_{\mathit {respond}}^{t}\), a record-node may verify validations of their \(CM_{\mathit {Resp}_{1}}\), \(CM_{\mathit {Resp}_{2}}\) and \(CM_{\mathit {Resp}_{t}}\). Specifically, i from 1 to t, the record-node performs as follows:
-
Compute$$g^{CF_{i}} = (g^{a_{t-1}})^{Sr_{i}^{t-1}} {\cdots} (g^{a_{1}})^{Sr_{i}} (g^{a_{0}}) = g^{a_{t-1}Sr_{i}^{t-1}+\cdots+a_{1}Sr_{i}+s_{core}} $$$$g^{Ch_{i}}=(g^{b_{2t-2}})^{Sr_{i}^{2t-2}}{\cdots} (g^{b_{1}})^{Sr_{i}}=g^{b_{2t-2}Sr_{i}^{2t-2}+\cdots+b_{1}Sr_{i}} $$
-
With s1,1, s1,2, s2,1, s2,2, s3,1, s3,2, s4,1, s4,2 and the bilinear map e, the record-node further computes$$\begin{array}{@{}rcl@{}} E_{i} &=& e(g^{CF_{i,1}}g^{\mathsf{s}_{1,1}},g^{CF_{i,2}}g^{\mathsf{s}_{1,2}})\\ && \times e(g^{CF_{i,1}}g^{\mathsf{s}_{2,1}},g^{CF_{i,2}}g^{\mathsf{s}_{2,2}})\\ && e(g^{CF_{i,1}}g^{\mathsf{s}_{3,1}},g^{CF_{i,2}}g^{\mathsf{s}_{3,2}})\\ && \times e(g^{CF_{i,1}}g^{\mathsf{s}_{4,1}},g^{CF_{i,2}}g^{\mathsf{s}_{4,2}}) \end{array} $$
-
Ifthen the record-node considers that \(CM_{\mathit {Resp}_{i}}\) is valid.$$E_{i}/e(g^{Ch_{i}},g^{4})=e(CM_{\mathit{Resp}_{i}},g), $$
-
-
Step 8: Recover. Because the \({T}_{\mathit {respond}}^{1}\), \({T}_{\mathit {respond}}^{2}\), ⋯, \({T}_{\mathit {respond}}^{t}\) present at the blockchain, it means that the transactions pass all previous all verifications. Therefore, the insurance company just needs to perform the final verification that can by performed only by him. That is, i from 1 to t, the insurance company decrypts \(C_{\mathit {Resp}_{i}}\) and then obtain Respi. Ifthen insurance company accepts that the Respi is correctly computed by Serveri. Otherwise he rejects the response and can send his evidences ID\(_{T_{\mathit {respond}}}\) and Respi to the Serveri’s smart contract, and then insurance company can obtain a amount of reward. If all the t responses pass the verifications, then the insurance company uses lagrange interpolation to reconstruct a polynomial as follow:$$CM_{\mathit{Resp}_{i}}=g^{\mathit{Resp}_{i}}, $$Finally, the insurance company calculates \(\tilde {F}(0)\) that is the desired result.$$\tilde{F}(x) = \sum\limits_{i = 1}^{t} \mathit{Resp}_{i} \prod\limits_{j = 1,j\neq i}^{t} \frac{x-Sr_{j}}{Sr_{i}-Sr_{j}}. $$
Performance evaluation
Prototype system setting
Processing time of cryptographic schemes
Scheme | Time cost |
---|---|
BN-curve Point Mul | 29.569 ms |
BN-curve Point Add | 0.236 ms |
Pairing | 84.651 ms |
Field Add | 0.071 μ s |
Field Mul | 0.531 μ s |
Secp256k1-curve ECDSA Sign | 4.425 ms |
Secp256k1-curve ECDSA Verify Sig | 9.137 ms |
Secp256k1-curve ECIES Encryption | 8.745 ms |
Secp256k1-curve ECIES Decryption | 4.367 ms |
Block Interval | 15.2 s |
Generating transactions
Payload | Content | Size |
---|---|---|
Payload of \({T}_{\mathit {initialize}}^{1}\) | A verification key | 512 bytes |
Payload of \({T}_{\mathit {initialize}}^{2}\) | 3 IDs, 9 encrypted messages | 960 bytes |
Payload of \({T}_{\mathit {initialize}}^{3}\) | 9 commitments | 576 bytes |
Payload of Trecord | 1 to 7 arrays of spending data | 128-896 bytes |
Payload of Tquery | 1 ID | 32 bytes |
Payload of Trespond | A hospital’s ID, a encrypted response, a commitment | 192 bytes |
Operation on transaction | Computations | Time cost |
---|---|---|
Hospital generates a \({T}_{\mathit {initialize}}^{1}\) | 1S + 7PM | 212.209 ms |
Hospital generates a \({T}_{\mathit {initialize}}^{2}\) | 1S + 9E | 83.931 ms |
Hospital generates a \({T}_{\mathit {initialize}}^{3}\) | 1S + 9PM | 271.347 ms |
Hospital generates a Trecord | 1S + 14FA | 5.226 ms |
Insurance company generates a Tquery | 1S | 5.226 ms |
Server generates a Trespond | 1S + 5FM + 12FA + 1E + 1PM | 43.543 ms |
Record-node verifies a \({T}_{\mathit {initialize}}^{1}\) | 1V + 5PM + 2PA | 157.454 ms |
Record-node verifies a \({T}_{\mathit {initialize}}^{2}\) | 1V | 9.137 ms |
Record-node verifies a \({T}_{\mathit {initialize}}^{3}\) | 1V + 15PM + 9PA | 454.796 ms |
Record-node verifies a Trecord | 1V | 9.137 ms |
Record-node verifies a Tquery | 1V | 9.137 ms |
Record-node verifies a Trespond | 1V + 2PM + 10PA + 5Pairing | 494.361 ms |
Server verifies a \({T}_{\mathit {initialize}}^{2}\) | 3D+ + 3PM | 101.807 ms |
Insurance company verifies a Trespond | 1D + 1PM | 33.936 ms |
Insurance company recovers the result | 4FA + 4FM | < 0.005 ms |
Verifying transactions
-
All transactions’ signatures are publicly verifiable data that can be verified by record-nodes. Therefore, if a transaction has appeared at the blockchain, then the transaction’s signature is credible, and others need not to verify the signature.
-
Except signatures, the payloads of initialize-transaction and respond-transaction have public verifiable data that can be verified by record-nodes. Specifically, they are the initialize-transaction’s verification key, commitments of core-shares and commitments of responses. Consequently, if an initialize-transaction (or a query-transaction) has appeared at the blockchain, then its publicly verifiable data is credible. Therefore, the transaction’s receiver need not to verify the public verifiable data.
-
Because all transactions are stored by some centralized nodes, so storages might be modified or deleted by the centralized nodes.
-
All related users must independently verify all public verifiable data including the verification key and commitments.
-
Servers and insurance company might be heavier than the blockchain-based system. Therefore, some computations and operations cannot be processed efficiently, even cannot be performed.
Comparative item | Time cost of pure MIStore | Time cost of blockchain-based MIStore | |||||
---|---|---|---|---|---|---|---|
Hospital | Server | IC | Hospital | Server | IC | Record-node | |
Verifying \({T}_{\mathit {initialize}}^{1}\) | 0 ms | 157.4 ms | 157.4 ms | 0 ms | 0 ms | 0 ms | 157.4 ms |
Verifying \({T}_{\mathit {initialize}}^{2}\) | 0 ms | 110.9 ms | 9.1 ms | 0 ms | 101.8 ms | 0 ms | 9.1 ms |
Verifying \({T}_{\mathit {initialize}}^{3}\) | 0 ms | 454.7 ms | 454.7 ms | 0 ms | 0 ms | 0 ms | 454.7 ms |
Verifying Trecord | 0 ms | 9.1 ms | 9.1 ms | 0 ms | 0 ms | 0 ms | 9.1 ms |
Verifying Tquery | 0 ms | 0 ms | 9.1 ms | 0 ms | 0 ms | 0 ms | 9.1 ms |
Verifying Trespond | 0 ms | 0 ms | 528.2 ms | 0 ms | 0 ms | 33.9 ms | 494.3 ms |
Blockchain performance evaluation
Transaction | Size |
---|---|
\({T}_{\mathit {initialize}}^{1}\)
| 820 bytes |
\({T}_{\mathit {initialize}}^{2}\)
| 1268 bytes |
\({T}_{\mathit {initialize}}^{3}\)
| 884 bytes |
T
r
e
c
o
r
d
| 436-1204 bytes |
T
q
u
e
r
y
| 340 bytes |
T
r
e
s
p
o
n
d
| 500 bytes |
Transaction | Transaction fee |
---|---|
\({T}_{\mathit {initialize}}^{1}\)
| 0.0001 ETH |
\({T}_{\mathit {initialize}}^{2}\)
| 0.0001 ETH |
\({T}_{\mathit {initialize}}^{3}\)
| 0.0001 ETH |
T
r
e
c
o
r
d
| 0.00001 ETH |
T
q
u
e
r
y
| 0.00006 ETH |
T
r
e
s
p
o
n
d
| 0.00003 ETH |