Блокчейн, смарт-контракты… Это просто или сложно?
В случае с хранением информации в базе данных, злоумышленник может получить тем или иным способом доступ и внести изменения, чтобы завладеть денежными средствами.
Ему не нужно изменять всю базу данных, а подменить только часть данных хранящихся в базе. В случае с блокчейном нужно будет изменить всю цепочку блоков с данными, что будет сделать крайне сложно.
По тем или иным причинам могут произойти какие — либо изменения в данных и без злого умысла — сбой в электропитании, выход из строя оборудования и прочее.
Как это работает?
Итак, есть данные и их нужно защитить от нежелательных изменений. Информация может быть любая — транзакции денежных средств, перемещение посылок, билеты на самолёт и т.д.
Информацию (данные) мы будем делить на части (блоки) и будем выстраивать цепочку этих блоков.
В нашем примере будут хранится данные о денежных транзакциях.
Создадим первый блок.
Так как блок первый в нём будут хранится только данные и номер блока.
Данные в блоке будут содержать размер всего выпуска криптовалюты и номер первого кошелька, на котором они все находятся на начальном этапе.
Для наглядности можно сформировать массив данных, состоящий из хэша и номера кошелька.
Хэш — функцию будем использовать не 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.
$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 '
';
?>