Как запросить данные из MySql в блоки блокчейна? - PullRequest
2 голосов
/ 26 апреля 2020

Я хочу выбрать поле сообщения из базы данных MySql и поместить его в поле данных в блоках в цепочке «блокчейн». Я пытался закодировать, но Blocks не получает сообщение от MySQL.

Я хочу построить цепочку блоков, используя node.js, какой датчик подключен к майнерам. Новые данные от датчика передаются всем майнерам, после чего каждый майнер сохраняет эти данные локально в пуле (я использовал базу данных mysql в качестве пула). Майнеры должны выбирать данные из пула для создания блоков. Я запутался, как заставить майнеров выбирать данные из mysql и помещать их в функцию конструктора.

мой код:

const SHA256 = require("crypto-js/sha256");
var mysql = require('mysql');
var result = '';

var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "password",
    database: "mqttbc"
});

class Block{
    constructor(timestamp, data, previousHash = '') {
      this.previousHash = previousHash;
      this.timestamp = Date.now();
      this.data = data;
      this.hash = this.calculateHash();
    }

    calculateHash() {
        return SHA256(this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();
    }

    selectData(){

            con.connect(function(err) {
            if (err) throw err;
            con.query('select message from mempool', function (err, rows, fields) {
            if (err) throw err;
            result = rows[0];
            //console.log('result is : ', result);
        });    
        });

        return result; 
    }
}


class Blockchain {
    constructor() {
        this.chain = [this.createGenesisBlock()];
    }

    createGenesisBlock() {
        return new Block("01/01/2017", "Genesis block", "0");
    }

    getLatestBlock() {
        return this.chain[this.chain.length - 1];
    }

    addBlock(newBlock){

        // The new block needs to point to the hash of the latest block on the chain.
      newBlock.previousHash = this.getLatestBlock().hash;

        // Calculate the hash of the new block
      newBlock.hash = newBlock.calculateHash();

      newBlock.data = newBlock.selectData();

        // Now the block is ready and can be added to chain!
        this.chain.push(newBlock);
    }

}

let savjeeCoin = new Blockchain();
savjeeCoin.addBlock(new Block(result));
console.log(savjeeCoin);

вывод:

Blockchain {
  chain: [
    Block {
      previousHash: '0',
      timestamp: 1587920820049,
      data: 'Genesis block',
      hash: '386f270b159b32138c6497ef973b175876e0eadb10bbf081032707626cf351c3'
    },
    Block {
      previousHash: '386f270b159b32138c6497ef973b175876e0eadb10bbf081032707626cf351c3',
      timestamp: 1587920820050,
      data: '',
      hash: '0aae63135a01bd0ecceeacf58edba60a3b7eedb2aab20b605124072eada1fea6'
    }
  ]
}

Как сделать так, чтобы данные из mysql go блокировались в блокчейне?

вывод должен выглядеть примерно так:

{
    "chain": [
        {
            "previousHash": "0",
            "timestamp": "06/04/2020",
            "data": "Genesis block",
            "hash": "67445b2ce9ccaa2704e67f0f16c1f86353932e5cadfd68c820e1162ce46fc42d"
        },
        {
            "previousHash": "67445b2ce9ccaa2704e67f0f16c1f86353932e5cadfd68c820e1162ce46fc42d",
            "timestamp": "06/04/2020",
            "data": {
                "result": 100
            },
            "hash": "22f796eed4801ad61e14e7353a1f05c70708ea65d53d835b996ad455cb56ff8f"
        },
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...