Я хочу выбрать поле сообщения из базы данных 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"
},
]
}