IoTA区块链 链接 功能实现

  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生成的时候并非如此,所以本区块链生成方法过于简单,可能生成的结果与现实情况相去甚远。

  改进:在一开始多加入几个初始块,使用更有效的区块验证选择算法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值