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

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

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

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

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

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

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

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

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

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

20473f8e0b43dbbf75446162778959e7.jpg

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

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

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

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

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

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

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

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

a3172af926a1f9fab0760e5a5f2ea7be.jpg

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

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

121867e15527e023b2498ede6b602050.jpg

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

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

3fbcb1a12a657472c4c754778fca361d.jpg

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

9977b68c3813e7c01c87c2f75bcaa538.jpg

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

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

da1ab48e82d2afdcb36488e94fc93925.jpg

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

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

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

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

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

41f6f00f8121e3ef5a19395733583b88.jpg

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

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

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

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

1822d67615a71b3e4fb1181a818b984e.jpg

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

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

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

$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 '
';
var_dump($output);
echo '
'; ?>

© Habrahabr.ru