Пояснительная записка к электронному журналу с использованием технологии Блокчейн, Приложение


В последней части самое важное из кода проекта.

blockchainData.js

const config = require('./config.json');

const db = require("./database");

const viz = require("viz-world-js");

async function runActions() {

let result\_create = await db.createTables();

console.log(result\_create);

}

async function processCustom(timestamp, custom\_body) {

let json = JSON.parse(custom\_body.json);

const table\_id = json.table;

const data = json.data;

let lactors = await db.getData("lactors", "login",
custom\_body.required\_regular\_auths\[0\]);

if (lactors\[0\].login === custom\_body.required\_regular\_auths\[0\] &&
table\_id === 'assessments' || table\_id === 'lesson\_topics') {

let res = await db.addData(table\_id, data);

console.log(res);

} else if (custom\_body.required\_regular\_auths\[0\] ===
config.metodist) {

let res = await db.addData(table\_id, data);

console.log(res);

}

}

async function processBlock(bn) {

console.log("обработка блока",bn)

const block = await viz.api.getBlockAsync(bn);

for(let tr of block.transactions) {

for(let operation of tr.operations) {

const \[op, opbody\] = operation;

switch(op) {

case "custom":

if(opbody.id === 'istr-i52') {

await processCustom(block.timestamp, opbody);

}

break;

default:

//неизвестная команда

}

}

}

}

let bn = 0;

async function run() {

const props = await viz.api.getDynamicGlobalPropertiesAsync();

bn = bn || props.last\_irreversible\_block\_num;

for(; bn \< props.last\_irreversible\_block\_num; bn++){

await processBlock(bn);

}

}

runActions();

setInterval(() 😕> run(), 3000);

database.js

const config = require('./config.json');

const mysql = require('mysql');

let connection = mysql.createPool({

host : config.db\_host,

user : config.db\_login,

password : config.db\_password,

database : config.db\_name,

connectionLimit: 30

});

function addData(table\_id, data) {

return new Promise((resolve, reject) 😕> {

connection.query('insert INTO ' + table\_id + ' SET ?', data, (error,
result, fields) 😕> {

if(error) {

reject(error);

} else {

resolve(result);

}

});

});

}

function getData(table\_id, filde, value) {

return new Promise((resolve, reject) 😕> {

connection.query('SELECT \* FROM \' + table\_id + '\ WHERE \' + filde

  • '\ = ' + value, (error, results, fields) 😕> {

if(error) {

reject(error);

} else {

resolve(results);

}

});

});

}

function createTables() {

let sql = "CREATE TABLE IF NOT EXISTS \[lactors\] (id integer NOT NULL
AUTO\_INCREMENT, login text); CREATE TABLE IF NOT EXISTS \[disciples\]
(id integer NOT NULL AUTO\_INCREMENT, login text); CREATE TABLE IF NOT
EXISTS \[lessons\] (id integer NOT NULL AUTO\_INCREMENT, name text,
lactors text); CREATE TABLE IF NOT EXISTS \[lesson\_topics\] (id integer
NOT NULL AUTO\_INCREMENT, date date, lesson text, topics text); CREATE
TABLE IF NOT EXISTS \[assessments\] (id integer NOT NULL
AUTO\_INCREMENT, date date, lesson text, disciple text, assessment
integer).";

return new Promise((resolve, reject) 😕> {

connection.query(sql, (error, result) 😕> {

if(error) {

reject(error);

} else {

resolve(result);

}

});

  });

}

module.exports.addData = addData;

module.exports.getData = getData;

module.exports.createTables = createTables;

index.php

\<?php

require 'functions.php';

$page >

\<\!DOCTYPE html\>

\<html\>

\<head\>

\

\<\!--\[if lt IE 9\]\>\<>\</script\>\<\!\[endif\]--\>

\<title\>\< ?\> | Электронный журнал с использованием
технологии Блокчейн\</title\>

\

\

\

\</script\>

\</script\>

\<>\</script\>

\</script\>

\<style\>

/\ Eric Meyer's CSS Reset \/

html, body, div, span, applet, object, iframe,

h1, h2, h3, h4, h5, h6, p, blockquote, pre,

a, abbr, acronym, address, big, cite, code,

del, dfn, em, img, ins, kbd, q, s, samp,

small, strike, strong, sub, sup, tt, var,

b, u, i, center,

dl, dt, dd, ol, ul, li,

fieldset, form, label, legend,

table, caption, tbody, tfoot, thead, tr, th, td,

article, aside, canvas, details, embed,

figure, figcaption, footer, header, hgroup,

menu, nav, output, ruby, section, summary,

time, mark, audio, video {

margin: 0;

padding: 0;

border: 0;

font-size: 100%;

font: inherit;

vertical-align: baseline;

}

/\ HTML5 display-role reset for older browsers \/

article, aside, details, figcaption, figure,

footer, header, hgroup, menu, nav, section {

display: block;

}

body {

line-height: 1;

}

ol, ul {

list-style: none;

}

blockquote, q {

quotes: none;

}

blockquote:before, blockquote:after,

q:before, q:after {

content: '';

content: none;

}

table {

border-collapse: collapse;

border-spacing: 0;

}

/\ End of Eric Meyer's CSS Reset \/

article, aside, details, figcaption, figure, footer, header, hgroup,
main, nav, section, summary {

display: block;

}

body {

font: 12px/18px Arial, sans-serif;

}

/\ Begin of styles for the demo (you can remove them) \/

a.expand {

width: 90px;

display: block;

margin: 10px 0 0;

}

a.expand:hover {

height: 500px;

}

/\ End of of styles for the demo \/

.wrapper {

min-width: 400px;

max-width: 1920px;

margin: 0 auto;

}

/\* Header

\-----------------------------------------------------------------------------\*/

.header {

height: 150px;

background: \#FFE680;

}

/\* Middle

\-----------------------------------------------------------------------------\*/

.middle {

border-right: 250px solid \#FFACAA;

position: relative;

}

.middle:after {

display: table;

clear: both;

content: '';

}

.container {

width: 100%;

float: left;

overflow: hidden;

margin-right: -100%;

}

.content {

padding: 0 20px;

}

/\* Right Sidebar

\-----------------------------------------------------------------------------\*/

.right-sidebar {

float: right;

margin-right: -250px;

width: 250px;

position: relative;

background: \#FFACAA;

}

/\* Footer

\-----------------------------------------------------------------------------\*/

.footer {

height: 100px;

background: \#BFF08E;

}

\</style\>

\</head\>

\<body\>

\

\

\<h1\>Электронный журнал с использованием технологии Блокчейн\</h1\>

\<h2\>\< ?\>\</h2\>

\</header\>\<\!-- .header--\>

\<nav\>\<ul\>

\<li\>\<a href="/web"\>Главная\</a\>\</li\>

\<li\>\<a href="index.php?page=lactors"\>Преподаватели\</a\>\</li\>

\<li\>\<a href="index.php?page=lessons"\>Предметы\</a\>\</li\>

\<li\>\<a href="index.php?page=disciples"\>Ученики\</a\>\</li\>

\<li\>\<a href="index.php?page=lesson\_topics"\>Темы
предметов\</a\>\</li\>

\<li\>\<a href="index.php?page=assessments"\>Оценки
учеников\</a\>\</li\>

\<li\>Добавление:

\<ul\>\<li\>\<a href="add.php?data=lactors"\>Преподавателя\</a\>\</li\>

\<li\>\<a href="add.php?data=lessons"\>Предмет\</a\>\</li\>

\<li\>\<a href="add.php?data=disciples"\>Ученика\</a\>\</li\>

\<li\>\<a href="add.php?data=lesson\_topics"\>Темы
предметов\</a\>\</li\>

\<li\>\<a href="add.php?data=assessments"\>Оценку
ученика\</a\>\</li\>\</ul\>\</li\>

\</ul\>\</nav\>

\

\<\!-- \<a href="\#" id="test"\>tsrt\</a\> --\>

\

\<main class=">

\<h1 class=">Электронный журнал с использованием технологии
Блокчейн.

Для отображения данных авторизуйтесь и перейдите на одну из страниц в
меню. Если вы уже авторизовались: есть ссылка "выйти", просто
выберите пункт меню для начала работы с журналом.\</h1\>

\</main\>\<\!-- .content --\>

\</div\>\<\!-- .container--\>

\<aside class=">

\<form id="unblock\_form"\>

\<p\>\

\<p\>\<input id="th

is\_login"\>\</p\>

\<p\>\

\<p\>\<input id="this\_posting"\>\</p\>

\<p\>\<input id="isSavePosting"\> Сохранить логин и
Постинг ключ\</p\>

\\</p\>

\</form\>

\</div\>

\</aside\>\<\!-- .right-sidebar --\>

\</div\>\<\!-- .middle--\>

\

\Создатель сервиса: \< target="\_blank"\>Незрячий
программист Денис скрипник\</a\>\</p\>

\</footer\>\<\!-- .footer --\>

\</div\>\<\!-- .wrapper --\>

\<script\>

if (localStorage.getItem('login') && localStorage.getItem('PostingKey'))
{

viz\_login = localStorage.getItem('login');

posting\_key = sjcl.decrypt(viz\_login + '\_postingKey',
localStorage.getItem('PostingKey'));

$('\#unblock\_form').css("display", "none");

$('\#delete\_posting\_key').css("display", "block");

jQuery("\#delete\_posting\_key").html('\<>Выйти\</a\>\</p\>');

ajaxSend(viz\_login);

} else if (sessionStorage.getItem('login') &&
sessionStorage.getItem('PostingKey')) {

viz\_login = sessionStorage.getItem('login');

posting\_key = sjcl.decrypt(viz\_login + '\_postingKey',
sessionStorage.getItem('PostingKey'));

$('\#unblock\_form').css("display", "none");

$('\#delete\_posting\_key').css("display", "block");

jQuery("\#delete\_posting\_key").html('\<>Выйти\</a\>\</p\>');

ajaxSend(viz\_login);

} else {

$('\#delete\_posting\_key').css("display", "none");

$('\#unblock\_form').css("display", "block");

}

\</script\>

\</body\>

\</html\>

Послесловие:

Хочу обратить внимание на то, что код мог измениться, т.к. проектом занимался и после защиты диплома.


Всё

Благодарю за внимание. С вами был незрячий автор, программист и делегат @denis-skripnik. До встречи в новых постах.


Comments 3


Фонд БОД сделал репост.
Ваше творчество в ленте.
Наша лента в telegram.
)
Вы являетесь участником проекта БОД, поэтому все ваши посты
размещаются в ленте репостов фонда. Если не желаете получать
апвот фонда и этот комментарий, ставьте тег nobod.
07.08.2019 17:01
0

Здравствуйте, @denis-skripnik. Вы получили 100% апвот от UPRomo за сожженные GBG. Продвигали сей пост в очереди: @denis-skripnik.
Сервис прибавил к вашему посту примерно 124.655 GBG.

Инструкция по сжиганию для продвижения или задвигания постов.

Соглашение об использовании UPRomo.


Делегируйте СГ сервису UPRomo и способствуйте уменьшению количества GBG, что поможет выйти из кризиса, возобновить GBG и восстановить его цену, равную 1 МГ золота.

12.08.2019 13:29
0