From 7257ae0bf26f85082c5a5a5ed505a55d49c0d2ac Mon Sep 17 00:00:00 2001 From: kaotisk Date: Fri, 31 Mar 2023 02:30:11 +0300 Subject: Fixed ZblockValidator an ZchainValidator --- api/validators/ZchainValidator/index.js | 87 +++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 api/validators/ZchainValidator/index.js (limited to 'api/validators/ZchainValidator') diff --git a/api/validators/ZchainValidator/index.js b/api/validators/ZchainValidator/index.js new file mode 100644 index 0000000..90cdb35 --- /dev/null +++ b/api/validators/ZchainValidator/index.js @@ -0,0 +1,87 @@ +/* + * To verify a block we simply put it on `enter`. `enter` will crawl + * the zchain that is connected to the zblock we got. If it fails for + * any reason we can check `logfollow` for that. + */ + +const { spawn } = require("child_process"); +const fs = require("fs"); +const config = require("../../config.js"); +console.log(config); + +/* + * Adds a latest given zblock to a file. + * + * Returns: + * - error if error + * - success: + * - adds the entry to the file + * - returns the whole file to the client + * + */ +function addEntriesToFile(entry,res){ + var data = JSON.parse(fs.readFileSync(config.pairsFile)); + + var duplicate_entry = 0; + data.forEach(a=>{ + if ( a.zblock === entry.zblock ){ + duplicate_entry = 1; + res.send({errno:"already there"}); + } + }); + + if ( duplicate_entry === 0 ) { + var all = [entry]; + for (var i = 0; i < data.length; i++){ + all[i+1] = data[i]; + } + var json = JSON.stringify(all); + fs.writeFile(config.blocksFile, json, 'utf8', finished); + function finished(err) { + console.log('finished writing file'); + } + res.send(json); + } +} +/* + * After validation went through we examine the return code + * of the application that run the test. + * + * Returns : + * - errno on failure + * - on success we process with addEntriesToFile() + * + */ +function continuethings(exitcode,sh,res){ + if (exitcode === 0){ + var entry = {zblock:sh}; + addEntriesToFile(entry,res); + } else { + res.send({errno:"Invalid data"}); + } +} +/* + * We send the data tested and the exit code to continuethings() + * + */ +module.exports = (ch, res) => { + const command = spawn("ak-enter",["-n",ch]); + response_string = ""; + command.stdout.on("data", data => { + response_string = response_string + data; + console.log(`${data}`); + }); + + command.stderr.on("data", data => { + console.log(`stderr: ${data}`); + }); + + command.on('error', (error) => { + console.log(`error: ${error.message}`); + }); + + command.on("close", code => { + console.log(`child process exited with code ${code}`); + continuethings(code,ch,res); + }); +}; -- cgit v1.2.3