IoTA区块链是最新一代(2019)的区块链,一个区块由两个前驱区块验证,由网络节点生成交易,交易会生成区块,再将这些区块统一成链接验证加入原区块链。
本文实现了 将新区块加入原有区块链的功能。详见代码。
/*
Catalpeak 版权所在,盗版必究
*/
#ifndef MAIN_H
#define MAIN_H
#include <iostream>
#include <time.h>
#include <String.h>
#include <vector>
using namespace std;
class IoTACode {
private :
int codeHeader;
string date;
int tradeId;
bool status;
bool legel;
string sender;
string receiver;
string contentName;
double price;
// Construction
// Setter & Getter
// Function
public :
IoTACode (int _codeHeader
, string _date
, int _tradeId
, bool _status
, bool _legel
, string _sender
, string _receiver
, string _contentName
, double _price)
:
codeHeader (_codeHeader)
, date (_date)
, tradeId (_tradeId)
, status (_status)
, legel (_legel)
, sender (_sender)
, receiver (_receiver)
, contentName (_contentName)
, price (_price)
{
}
int test () {cout << codeHeader << endl;}
};
// DAG is Directed acyclic graphs
typedef vector <vector <int> > DAG;
void InitDAG (vector <vector <int> > &);
void addIoTACode (vector <vector <int> > &);
#endif // MAIN_H
/*
Catalpeak 版权所在,盗版必究
*/
#include "main.h"
DAG dag;
// @brief This for effective, record finding the beginning of verify code
int verifyCodeBegin = 0;
IoTACode m_IoTACode = IoTACode (1, "2019-7-3", 1, true, true, "Alice", "Bob", "Trade", 100.0);
int main()
{
InitDAG (dag);
addIoTACode (dag);
while (1) {
int i;
cin >> i;
if (i == 0) {
break;
}
addIoTACode (dag);
}
return 1;
}
void InitDAG (vector <vector <int> > & vec) {
vector <int> v;
v.push_back (0);
v.push_back (0);
dag.push_back (v);
dag.push_back (v);
//cout << dag.size ();
}
void addIoTACode (vector <vector <int> > & vec) {
// Create a new row then insert into DAG
vector <int> v;
for (int icount = 0; icount < vec.size () + 1; icount++) {
v.push_back (0);
}
// Alter exist column ---- plus 0 to each col
for (int icount = 0; icount < vec.size (); icount++) {
vec [icount].push_back (0);
}
// Alter v into DAG as a row
vec.push_back (v);
// Now the new vector has been built, choose this block's verify
for (int icount = verifyCodeBegin; icount < vec.size (); icount++) {
int sum = 0;
for (int jcount = verifyCodeBegin + 1; jcount < vec.size (); jcount++) {
//cout << "icount = " << icount << " " << "jcount = " << jcount << endl;
sum += vec [icount][jcount];
}
if (sum >= 2) {
verifyCodeBegin = icount + 1;
}
}
/**/
if (verifyCodeBegin + 1 <= vec.size ()) {
vec [verifyCodeBegin][vec.size () - 1] = 1;
vec [verifyCodeBegin + 1][vec.size () - 1] = 1;
} else {
// ERROR Transboundary
cout << "ERROR! Array Transboundary in addIoTACode ()" << endl;
}
/**/
for (int icount = 0; icount < vec.size (); icount++) {
for (int jcount = 0; jcount < vec.size (); jcount++) {
cout << vec[icount][jcount] << " ";
}cout << endl;
}/**/
}
这个功能实现还是十分简单的,随便就能写出来,但是和网络仿真结合,生成新的交易加入就还需考虑。
不足:本文生成的区块链,验证仅仅是最简单的贪心算法实现,真正IoTA生成的时候并非如此,所以本区块链生成方法过于简单,可能生成的结果与现实情况相去甚远。
改进:在一开始多加入几个初始块,使用更有效的区块验证选择算法。