Блокчейн, смарт-контракты… Это просто или сложно? +2


В случае с хранением информации в базе данных, злоумышленник может получить тем или иным способом доступ и внести изменения, чтобы завладеть денежными средствами.

Ему не нужно изменять всю базу данных, а подменить только часть данных хранящихся в базе. В случае с блокчейном нужно будет изменить всю цепочку блоков с данными, что будет сделать крайне сложно.

По тем или иным причинам могут произойти какие - либо изменения в данных и без злого умысла – сбой в электропитании, выход из строя оборудования и прочее.

Как это работает?

Итак, есть данные и их нужно защитить от нежелательных изменений. Информация может быть любая – транзакции денежных средств, перемещение посылок, билеты на самолёт и т.д.

Информацию (данные) мы будем делить на части (блоки) и будем выстраивать цепочку этих блоков.

В нашем примере будут хранится данные о денежных транзакциях.

Создадим первый блок.

Так как блок первый в нём будут хранится только данные и номер блока.

Данные в блоке будут содержать размер всего выпуска криптовалюты и номер первого кошелька, на котором они все находятся на начальном этапе.

Для наглядности можно сформировать массив данных, состоящий из хэша и номера кошелька.

Хэш – функцию будем использовать не SHA 256, а «по проще» MD5, просто получаемый хэш с помощью этой функции лучше читаем человеком (он короче), чем SHA 256.

Хэш первого кошелька будет c4ca4238a0b923820dcc509a6f75849b (это цифра 1).

Объём выпуска нашей криптовалюты 1 млн.

В блок поместим номер блока (цифру 1) и будем нумеровать блоки последовательно (1, 2, 3, …).

Это всё, что будет храниться в нашем первом блоке и хэш первого блока будет таким: 45d04629fc2f54182ba55aad029152ae.

Второй блок будет содержать данные о транзакциях, хэш блока № 1 и соответственно свой номер блока «2».

Данные о транзакциях будут содержать номер транзакции, кошелёк, того кто перечисляет криптовалюту, кошелёк кому будет перечислена криптовалюта и сколько будет перечислено.

Данные в блоке

Третий и последующие блоки будет построены по аналогии со вторым.

Таким образом мы получим следующую цепочку блоков.

Изменение в любом из блоков повлечёт изменения его собственного хэша и хэша всех последующих блоков.

В случае изменения хэш сумм блоков необходимо принять соответствующие меры, чтобы не навредить хранящимся данным (сохранить неизменность данных), чтобы средства остались у тех, у кого они должны быть.

Один из таких способов — это отвергнуть цепочку, с которой начинается несоответствие, а включённые в них транзакции признать недействительными.

Смарт - контракт

Что такое смарт-контракт и как он работает?

Как и в обычном контракте для совершения сделки (приобретения или отчуждения чего-либо) необходимо выполнить определённые условия и произвести определённые действия.

Предположим, стороне 1 (первый контрагент) необходимо продать криптовалюту и купить рубли, и есть другая сторона (контрагент 2), кто хочет продать рубли и купить криптовалюту.

Чтобы состоялась сделка (контракт был исполнен) необходимо выполнение определённых условий, то есть необходим алгоритм, который проверяет эти условия для того, чтобы прошла транзакция в следствии которой контрагент 1 получит определённую сумму рублей по определённому курсу, а другой контрагент (2) криптовалюту в соответствующем объёме и по соответствующему курсу (установленному курсы, например криптовалютной биржей).

Прежде чем совершить сделку одного лица с другим (контрагентов 1 и 2) необходимо проверить есть ли у контрагента 1 необходимое количество криптовалюты для совершения сделки, уплаты комиссии, налогов, и есть ли у контрагента 2 необходимая сумма рублей для совершения сделки, уплаты комиссии, налогов и пр.

Необходимо также проверить, что у контрагента продающего криптовалюту должен быть счёт для зачисления рублей, а у контрагента покупающего криптовалюту должен быть рублёвый счёт.

На счета могут быть наложены ограничения, например по размеру суммы и это нужно тоже проверить.

Если такие условия выполняются (условий может быть больше), то необходимое количество средств у контрагентов должно быть зарезервировано, а после их резервирования должна совершиться транзакция в результате которой продавец криптовалюты получит на свой рублёвый счёт рубли, а продавец рублей получит на свой криптовалютный счёт криптовалюту.

Выполнение условий контролируют по обычному контракту сами стороны (участники сделки) или третьи стороны, например сотрудниками банка, юристами и т.д., что бывает стоит не дёшево и затрачивается на эти процедуры много времени.

В случае со смарт – контрактами выполнение условий контролируется по созданному для этого алгоритму без участия человека в автоматическом режиме (вычислительными машинами) и на это уходит значительно меньше времени, чем при совершении сделки по обычному контракту.

PHP код для совершения операции продажи криптовалюты (ETH) и покупки рублей на бирже exmo.me.

<?php

//exmo.me

$key = 'K-9………';
$secret = 'S-6…………';

$mt = explode(' ', microtime());
$NONCE = $mt[1] . substr($mt[0], 2, 6);

$url = "https://api.exmo.com/v1.1/order_create";

$req = array(
	"nonce"=>$NONCE,
	"pair"=>"ETC_RUB",
	"quantity"=>0.01, //объём
	"price"=>449.0754, //цена
	"type"=>"buy",
);

$post_data = http_build_query($req, '', '&');

$sign = hash_hmac('sha512', $post_data, $secret);

$headers = array(
	'Sign: ' . $sign,
	'Key: ' . $key,
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$output = curl_exec($ch);
$output = json_decode($output, true);

echo '<pre>';
var_dump($output);
echo '</pre>';

?>




К сожалению, не доступен сервер mySQL