Диплом: Применение технологии блокчейн для создания криптографических токенов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
12
университета но Беркли, на но базе которого но была разработана но первая версия
но данной СУБД). но Важная особенность но Berkeley db в но том, что это
но встраиваемая БД но реализованная в но виде библиотеки. Тем но самым не
но требуется отдельное но поднятие сервера но СУБД для её но работы. Так как
но Berkeley db но является NoSQL но хранилищем (хранит но записи вида: но ключ
но значение) достигается но высокая производительность при но работе с но данными,
которые но можно извлечь по но ключу[6].
Общий но вид транзакции но описан в но официальной спецификации
но протокола: [7]
Таблица но 1 Общий вид но транзакции в но блокчейне Биткоин
Field
но Size
Description но
Data но type
Comments но
4 но
version но
int32_t но
Transaction но data format но version (note, но this is но signed)
0 но or 2
flag но
optional
но uint8_t[2]
If но present, always но 0001, and но indicates the но presence of но witness data
1+ но
tx_in но count
var_int но
Number но of Transaction но inputs (never но zero)
41+ но
tx_in но
tx_in[] но
A но list of 1 or но more transaction но inputs or но sources for но coins
1+ но
tx_out но count
var_int но
Number но of Transaction но outputs
9+ но
tx_out но
tx_out[] но
A но list of 1 or но more transaction но outputs or но destinations for но coins
0+ но
tx_witnesses
но
tx_witness[] но
A но list of но witnesses, one for но each input; но omitted if flag но is omitted но above
4 но
lock_time но
uint32_t но
The но block number or но timestamp at но which this но transaction is но unlocked:
Value но
Description но
0 но
Not но locked
< но 500000000
Block но number at но which this но transaction is но unlocked
>=
но 500000000
UNIX но timestamp at но which this но transaction is
но unlocked
If но all TxIn но inputs have но final (0xffffffff) но sequence numbers но then lock_time is
но irrelevant. Otherwise, the но transaction may not be но added to a но block until но after
lock_time но (see NLockTime). но
Каждая но транзакция содержит в но себе следующие но значения:
1. Уникальный но идентификатор транзакции но (txid).
2. Количество но средств пересылаемых в но транзакции (amount).
3. Размер но комиссии за но транзакцию (Fee).
4. Количество но подтверждений сетью но транзакции (confirmations).
5. Время но создания транзакции в но формате timestamp но (time).
6. Адрес но отправителя.
13
7. Адрес но получателя.
8. Тип но транзакции: отправка но средств, генерация но новых средств
но (эмиссия).
Адрес но кошелька это но уникальный идентификатор но внутри системы
для но получения и но отправки средств, но содержащий около 33
но алфавитно-цифровых символов. но Технически представляет но собой 160-
битный хэш от но открытого ключа но ECDSA ключевой но пары. Адрес но может
содержать все но буквенно-цифровые символы но латинского алфавита, но кроме 0,
O, I (i но большое), l (L но маленькое). Адреса но кошельков не но попадают в
но блокчейн до тех но пор, пока на но данный адрес не но происходит поступление.
но Можно создавать но неограниченное количество но адресов кошелька но локально,
в но систему попадёт но только адрес, но через который но была проведена но хотя бы
но одна транзакция[8].
Биткойны но могут быть но переданы любому, кто но сообщит корректный
но биткойн-адрес или но открытый ключ. Для но передачи биткойнов но текущий
владелец но создаёт новую но транзакцию, которая но помимо указаний о
но количестве передаваемых но биткойнов содержит но подписанный инициатором
хеш но предыдущей транзакции, по но которой биткойны но были получены.
но Предыдущая транзакция но становится «входом» но текущей транзакции. но Также
указывается но публичный ключ или но биткойн-адрес нового но получателя
(«выход»)[2].
14
Рисунок но 2 Упрощённая но структура последовательных но транзакций с но одним входом и
но одним выходом
Транзакция но широковещательным запросом по но открытым каналам без
но шифрования отправляется в но сеть. Остальные но узлы сети, но прежде чем
но принять транзакцию к но обработке, проверяют но подписи. Правильность
но подписи свидетельствует, что но инициатор действительно но является
владельцем но секретного ключа для но адреса «выхода».
Транзакции но поддерживают произвольное но количество «входов»
но (ссылок на но предыдущие транзакции, в том но числе в но пользу разных но адресов)
и «выходов» но (указания о но получателях). Значения со но всех «входов»
но суммируются, и но сумма распределяется по «выходам»[1].
Рисунок но 3 Примеры но множественных входов и но выходов в но транзакциях
Особенностью но протокола является но невозможность взять но лишь
некоторую но часть биткойнов из «входа». но Если на но адрес было но передано 2
но биткойна одной но транзакцией, то при но следующей операции с но указанием
15
этой но транзакции в но качестве «входа» но автоматически будет но подразумеваться
передача 2 но биткойнов. Однако их но можно распределить на но несколько
«выходов», но один из но которых может но указывать на но этот же но адрес, то но есть
часть но биткойнов будут но переданы самому но себе («сдача»)[1].
1.3.2. но Блок транзакций
Блок но транзакций представляет но собой контейнер, в но который
производится но запись новых но транзакций в но системе и но заголовка,
содержащего но основную информацию о но блоке: хэш но блока, хэш
но предыдущего блока, хэш но транзакций (вошедших в но данный блок). но Именно
появление такого но объекта как но блок составляет основу но технологии
блокчейн. но Блоки хранят но транзакции, а но также информацию, но которая
позволяет но создавать цепочку но блоков. Достигается это но наличием
информации о но хэше предыдущего но блока в но заголовке нового
но генерируемого блока[6].
Общий но вид блока но описан в но официальной спецификации
но протокола:[7]
Таблица но 2 Общий вид но блока в но блокчейне Биткоин
Description
но
Data
но type
Comments но
version но
int32_t но
Block но version information но (note, this is но signed)
prev_block но
char[32] но
The но hash value of the но previous block но this particular но block
references
merkle_root
но
char[32] но
The но reference to a но Merkle tree но collection which is a но hash of all
но transactions related to но this block
timestamp но
uint32_t но
A но Unix timestamp но recording when но this block was но created
(Currently но limited to но dates before the но year 2106!)
bits но
uint32_t но
The но calculated difficulty но target being но used for но this block
nonce но
uint32_t но
The но nonce used to но generate this но block… to но allow variations of
the но header and но compute different но hashes
txn_count но
var_int но
Number но of transaction но entries
txns но
tx[] но
Block но transactions, in но format of но "tx" command
16
version но — версия но блока
prev_block но — хэш но предыдущего блока но (parent block)
merkle_root но —хэш всех но транзакций в но блоке
timestamp но — дата и но время создания но блока
bits, но nonce —эти но параметры используются при но майнинге
txn_count, но txns — но число транзакций в но блоке и их но список
Первые но шесть параметров но (все кроме но txn_count и но txns) образуют
но заголовок блока но (header). Именно хэш но заголовка называют но хэшем блока, то
но есть сами но транзакции непосредственного но участия в но хэшировании не
но принимают. Вместо но этого они но заносятся в но особую структуру — но дерево
Меркла[9].
Дерево но Меркла — это но структура данных, но также известная как
но бинарное дерево но хэшей. В но случае Bitcoin оно но строится следующим
но образом:
1. Сначала но считаются хэши но всех транзакций в но блоке hash_A =
но SHA256(SHA256(A))
2. Потом но считаются хэши от но суммы хэшей но транзакций hash_AB =
но SHA256(SHA256(hash_A + но hash_B))
3. Точно но также считаются но хэши от но суммы получившихся но хэшей
hash_ABCD = но SHA256(SHA256(hash_AB + но hash_CD)) и но далее по
но рекурсии. Так как но дерево бинарное, то на но каждом шаге но должно быть
но четное число но элементов. Поэтому но если, например, у нас но только три
но транзакции, то но последняя транзакция но просто дублируется:
17
Рисунок но 4 Дерево но Меркла
4. Процесс но продолжается до тех но пор, пока не но получится один
но единственный хэш — он и но называется merkle_root но (третье поле в но header
блока)
Если но изменить хотя бы но одну транзакцию, то но merkle_root также
но изменится. Поэтому но такая структура но данных позволяет но обеспечить
"неподделываемость" но транзакций в но блоке. Для но проверки достаточно
но посчитать merkle_root но самостоятельно и но сравнить его с но тем, что но записан в
но header блока.
Транзакция но считается завершённой и но достоверной
(«подтверждённой»), но когда проверены её но формат и но подписи, и но когда сама
но транзакция объединена в но группу с но несколькими другими и но записана в
но специальную структуру — блок. но Содержимое блоков но может быть
но проверено, так как но каждый блок но содержит информацию о но предыдущем
блоке. Все но блоки выстроены в но одну цепочку, но которая содержит
но информацию обо но всех совершённых но когда-либо операциях в но базе. Самый
но первый блок в но цепочке — первичный но блок (англ. genesis но block) —
18
рассматривается как но отдельный случай, так как у но него отсутствует
но родительский блок[10].
В но системе Биткойн но первой транзакцией в но блоке всегда но указывается
получение но комиссии, которая но станет наградой но пользователю за но созданный
блок[1]. но Далее идёт но список транзакций, но сформированный из но очереди
транзакций, ещё не но записанных в но предыдущие блоки. но Критерий отбора из
но очереди задаёт но майнер самостоятельно. Это не но обязательно должна но быть
хронология по но времени. Например, но могут включаться но только операции с
но высокой комиссией или с но участием заданного но списка адресов. но Транзакции,
кроме но начисления комиссии за но создание блока, но содержат внутри но параметра
input но ссылку на но транзакцию с но предыдущим состоянием но данных (в но системе
Биткойн, но например, даётся но ссылка на ту но транзакцию, по но которой были
но получены расходуемые но биткойны). Операции по но передаче майнеру
но комиссии за но создание блока не но имеют «входных» но транзакций, поэтому в
но данном параметре но может указываться но любая информация.
Созданный но блок будет но принят остальными но пользователями, если
но числовое значение но хеша заголовка но равно или но меньше определённого
но целевого числа, но величина которого но периодически корректируется. Так как
но результат хеширования но функции SHA-256 но считается необратимым, на
но данный момент нет но алгоритма получения но желаемого результата, но кроме
случайного но перебора. Если хеш не но удовлетворяет условию, то в но заголовке
изменяется но параметр nonce и хеш но пересчитывается. Обычно но требуется
большое но количество пересчётов. но Когда вариант но найден, узел но рассылает
полученный но блок другим но подключенным узлам, но которые проверяют но блок.
Если но ошибок нет, то но блок считается но добавленным в но цепочку и но следующий
блок но должен включить в но себя его но хеш[1].
Сложность
За но требование к но хешам блоков но отвечает специальный но параметр,
называемый «сложность». Так как но вычислительные мощности но сети
19
непостоянны, но этот параметр но пересчитывается клиентами но сети через
но каждые 2016 но блоков таким но образом, чтобы но поддерживать среднюю
но скорость формирования но блокчейна на но уровне 2016 но блоков в две но недели.
Таким но образом, 1 но блок должен но создаваться примерно раз в но десять минут.
На но практике, когда но вычислительная мощность но сети растёт —
но соответствующие временные но промежутки короче, а но когда снижается —
но длиннее[12]. Перерасчёт но сложности с но привязкой ко но времени возможен
но благодаря наличию в но заголовках блоков но времени их но создания. Оно
но записывается в но Unix-формате по но системным часам но автора блока но (если блок
но создается в но пуле, то по но системным часам но сервера этого но пула).
но Рисунок но 5 Логарифмический но график сложности но майнинга.
Изменение но сложности вычислений не но влияет на но надёжность сети
но Биткойн и но требуется лишь для но того, чтобы но система генерировала но блоки
почти с но постоянной скоростью, не но зависящей от но вычислительной
мощности но участников сети[11].
20
1.3.3. но Цепочка блоков
Блоки но одновременно формируются но множеством «майнеров».
но Удовлетворяющие критериям но блоки отправляются в но сеть, включаясь во все
но репликации распределённой но базы блоков. но Регулярно возникают но ситуации,
когда но несколько новых но блоков в но разных частях но распределённой сети
но называют предыдущим но один и тот же но блок, то но есть цепочка но блоков может
но ветвиться. Специально или но случайно можно но ограничить ретрансляцию
но информации о но новых блоках но (например, одна из но цепочек может
но развиваться в но рамках локальной но сети). В но этом случае но возможно
параллельное но наращивание различных но ветвей.
В но каждом из но новых блоков но могут встречаться как но одинаковые
транзакции, так и но разные, вошедшие но только в но один из но них. Когда
но ретрансляция блоков но возобновляется, майнеры но начинают считать но главной
цепочку с но учётом уровня но сложности хеша и но длины цепочки. При но равенстве
сложности и но длины предпочтение но отдаётся той но цепочке, конечный но блок
которой но появился раньше.
но Транзакции, вошедшие но только в но отвергнутую ветку (в том но числе по
но выплате вознаграждения), но теряют статус но подтверждённых. Если это
но транзакция по но передаче биткойнов, то она но будет поставлена в но очередь и
но затем включена в но очередной блок. но Транзакции получения но вознаграждения
за но создание отсечённых но блоков не но дублируются в но другой ветке, то но есть
«лишние» но биткойны, выплаченные за но формирование отсечённых но блоков,
не но получают дальнейших но подтверждений и «утрачиваются»[1].
21
Рисунок но 6 Основная но последовательность блоков но (чёрные) является но самой длинной от
но начального (зелёный) до но текущего. Побочные но ветви (фиолетовые) но отсекаются.
Таким но образом, цепочка но блоков содержит но историю владения, с
но которой можно но ознакомиться, например, на но специализированных
сайтах[13].
Блокчейн но формируется как но непрерывно растущая но цепочка блоков с
но записями обо но всех транзакциях. но Копии базы или её но части одновременно
но хранятся на но множестве компьютеров и но синхронизируются согласно
но формальным правилам но построения цепочки но блоков. Информация в но блоках
не но шифрована и но доступна в но открытом виде, но но отсутствие изменений
но удостоверяется криптографически но через хэш-цепочки[1] но (элемент
цифровой но подписи).
База но публично хранит в но незашифрованном виде но информацию о но всех
транзакциях, но подписываемых с но помощью асимметричного но шифрования.
Для но предотвращения многократной но траты одной и той же но суммы
используются но метки времени, но реализованные путём но разбиения БД на
но цепочку специальных но блоков, каждый из но которых, в но числе прочего,
но содержит в но себе хеш но предыдущего блока и но свой порядковый но номер.

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран