Реальная история.
Я уже слышу крики "Satoshi предназначал Bitcoin blockchain для передачи только Bitcoin" и тому подобное, но еще раз я просто предоставляя инструмент, который вы можете использовать или не использовать по своему усмотрению. Существует также не blockchain более безопасным, чем Bitcoin, и я боюсь, что blockchain специально с целью POA никогда не может зацепиться и никогда не будет достаточно защищена от мощных adverseries. Во всяком случае, я не вижу, этот метод используется на ежедневной основе, многие так не будет представлять большой риск перегрузки сети, особенно учитывая необходимость сборов сделки.
Пыльник, это Баш скрипт, который позволяет создавать и верификацию Bitcoin POA.
Это требует оригинальный клиент Bitcoin работает как демон для создания POA и dbdump.py Гэвин Андресен (в
https://github.com/gavinandresen/bitcointools/tree/45f5c0030ac9a121fff504b0ffd27efc27423bde) для подтверждения.
#! / Bin / Баш
#bitpoa: Bitcoin blockchain Based доказательство подлинности
#Author: Wolciph
#Public домен, используйте на свой страх и риск
набор -e
#config:
интерактивная = 1
hashAlgo = sha256
сумма = 0.00000001
плата = 0,0001
KeyType = рк
InfoFile = 'info.poa'
bitcoind = ~ / bitcoind
bitcoinDir = ~ / .bitcoin /
DBDump = ~ / bitcointools / dbdump.py
CD "$ (Имя_директории "$ 0")"
. addrgen.so.bash
#. bitpoa.conf
CD - >/ DEV / нуль
_tries = 5
get_transaction_block () # (TXID)
{
#workaround для доступа блока сделки:
местные с = $ ($ bitcoind getblockcount)
местный б = $ ($ bitcoind gettransaction $ 1 |
Grep -m1 '"подтверждения" :»|
СЕПГ -r «s /^.*"подтверждения" :. ([0-9] *) * $ / \ 1 / г ';
[[$ {PIPESTATUS [@]} = '0 0 0']])
местные c2 = $ ($ bitcoind getblockcount)
если (($ c2 == $ с)); Затем эхо $ ((с - Ь + 1))
Элиф ((_tries > 0)); затем ((_tries--)); get_transaction_block
еще
эхо "Не удается получить стабильную blockcount. Подождите, пока ваш blockchain не вверх \
на сегодняшний день, и повторите попытку." >&2
вернуться 2
фи
}
get_field () # (поле)
{
Grep -m1 "^ $ 1:" | СЕПГ -r "s / ^ $ 1: $ / \ 1 / г (*)."
[[$ {PIPESTATUS [@]} = '0 0']]
}
check_pipes () {[[ "$ {PIPESTATUS [@]}" = ~ ^ 0 (\ 0) * $]]; }
помощь ="bitpoa Bitcoin blockchain доказательство подлинности инструмента:
Примеры:
Эти задачи требуют сервер Bitcoin быть активным:
Создание: $ 0 -cf document.txt -i -a info.poa sha256 -A 0,00000001
Нахождение блока: $ 0 -b -i info.poa
Эта задача требует Bitcoin сервера, который будет остановлено:
Верификация: $ 0 -vf document.txt -i info.poa
Команды:
-с, --create: создать и отправить _amount_ монеты на новый адрес
-б, --find-блок: найти блок, в котором новая транзакция является
заполнить информационный файл
-v, --verify: проверить АПО
-е, --file =: Файл из которого следует создать хэш
-я, --info-файл =: Информация о файле для чтения или записи информации для проверки АПО
-ч, --hash: не хэш файла (для использования, если она уже есть хэш)
-а, --algo =: алгоритм хеширования; использует OpenSSL
-у, --assume-да: не подскажет, прежде критические операции, неинтерактивного
-s, --secret-ключ: использовать хэш в секретном ключе (НЕ ВЫПОЛНЕНО)
-А, --amount =: количество Bitcoins для отправки (будут потеряны навсегда !!!)
-F, --fee =: плата за сделку
"
# ------------------
КЛЮЧ = $ (Getopt -o cvbf: я: ха: YA: F: \
--долго создавать, проверять, найти-блок, файл:, инфо-файл:, хэш, алго: предположим, да, помощь, сумма, плата \
-N "$ 0" - "$ @")
если [$? ! = 0]; то эхо "Нагрузочный. Используйте --help для помощи." >&2; Выход 1; фи
Eval набор - "$ КЛЮЧ"
в то время как верно; делать
дело "$ 1" в
-с | --create) действие = создать; сдвиг;;
-v | --verify) действие = проверить; сдвиг;;
-б | --find-блок) действие = findBlock; сдвиг;;
-е | --file файл) ="$ 2"; Shift 2 ;;
-я | --info-файл) InfoFile ="$ 2"; Shift 2 ;;
-ч | --hash) хэш = 1 ;; #The файл cointains хэш
-| --algo) hashAlgo ="$ 2"; Shift 2 ;; # Первый раунд (с последующим ripemd160)
-у | --assume-да) интерактивный = 0; сдвиг;;
-s | --secret-ключ) KeyType = ск; сдвиг;;
-| --amount) сумма = $ 2; Shift 2 ;;
-F | --fee) txfee = $ 2; Shift 2 ;;
--помощь) Printf "% s" "$ помощь" >&2; Выход 0 ;;
--) сдвиг; ломать;;
*) Эхо "Недопустимый аргумент: $ 1. Используйте --help для помощи." >&2; Выход 1 ;;
ESAC
сделанный
[-n "$ 1" ] && {эхо "Неизвестный дополнительный аргумент: $ 1" >&2; Выход 1; }
[-z "$ действие" ] && -b)» >&2; Выход 1;
если [[$ действие = findBlock]]; тогда
TXID ="$ (Get_field TXID < $ InfoFile)"
Блок = $ (get_transaction_block $ TXID)
Printf "% S \ п" "блок: $ блок" >> $ InfoFile
выход 0
фи
если [[ "$ хэш" = '1']]; тогда
хэш = $ (кот "$ файл")
еще
хэш = $ (кот "$ файл" | OpenSSL dgst - $ hashAlgo гекс; [[$ {PIPESTATUS [@]} = '0 0']];) ||
{эхо "Ошибка при хэширования с помощью $ hashAlgo. Выход." >&2; Выход 1; }
фи
если [[$ KeyType = рк]]; тогда
ч = $ (XXD -p -r <<< "$ хэш" | OpenSSL dgst -rmd160)
адрес = $ ($ hash160ToAddress ч)
еще
выход 1
#use хэш в качестве затравки для ПСЧ?
фи
если [[$ действие = 'создать']]; тогда
Printf "% S \ п% s \ п% s \ п" "Файл: $ файл" "алго: $ hashAlgo" "адрес: $ адрес" > $ InfoFile
CMD ="$ Bitcoind -paytxfee = $ txfee sendtoaddress $ адрес $ сумма"
если [[$ интерактивный = '1']]; тогда
эхо "Внимание: $ сумма Bitcoins будет потеряна навсегда." >&2
Printf '% s \ п% s \ п% s \ п' "Следующая команда собирается быть отправлены в Bitcoin демона:"\
"$ CMD" "Убедитесь, что он работает. Продолжить? (Г / л)" >&2
прочитать г
[[ "$ г" = ~ ^ У (а?) $]] || выход 0
фи
Эхо -n 'TXID:' >> $ InfoFile
Eval $ CMD >> $ InfoFile
если [[$ интерактивный = '1']]; тогда
Printf "% S% s \ п" «Теперь вы должны ждать, что сделка будет» \
"интегрированы в новый блок перед запуском $ 0 -b [...]" >&2
фи
Элиф [[$ действие = 'проверить']]; тогда
address2 ="$ (Get_field адрес < $ InfoFile)"
если [[ "$ address2" знак равно "$ адрес" ]]; тогда
Printf "% S \ п" "FAILURE: Адрес неверен (должно быть $ адрес)!" >&2
выход 5
фи
блок = $ (get_field блок < $ InfoFile)
blockInfo ="$ ($ DBDump --block = $ блок)"
если ! (Grep -m1 "Публичных: $ адрес" <<< "$ blockInfo"); тогда
эхо "FAILURE: адрес является правильным, но не отображается в данном блоке!" >&2
выход 6
фи
эхо "Адрес правильно и был опубликован в blockchain около:"
Grep -m1 '^ Время:' <<< "$ blockInfo" | СЕПГ -r 's / Время: Нонс (*.). * $ / \ 1 /'
фи
Примеры использования:
Эти задачи требуют сервер Bitcoin быть активным:
Создание: ./bitpoa.bash -cf document.txt -i -a info.poa sha256 -A 0,00000001
Нахождение блока: ./bitpoa.bash -b -i info.poa
(Для создания, второй шаг должен быть взят, чтобы найти блок сделки, с тем чтобы ускорить проверку)
Эта задача требует Bitcoin сервера, который будет остановлено:
Проверка: ./bitpoa.bash -vf document.txt -i info.poa