Записать в блокчейн биткоина можно не только финансовые операции, но и практически любые данные. Записанные в блокчейн биткоина данные становятся общедоступными и их практически невозможно удалить или изменить. Эту особенность можно использовать например для создания децентрализованных сайтов, которые не поддаются никакой блокировке.
С помощью библиотеки blockchaindata-lib запись и чтение данных в блокчейне можно организовать буквально в несколько строк кода.
Библиотека blockchaindata-lib написана на node.js. Исходный код с примерами доступен на гитхаб github.com/3s3s/blockchaindata-lib. Чтобы добавить библиотеку в ваш проект, достаточно выполнить в консоли одну команду
Для работы с блокчейном, необходимо настроить RPC доступ к кошельку биткоина или совместимого с биткоином форка (Litecoin, Dogecoin и т.п.). По умолчанию blockchaindata-lib будет пытаться обращаться к серверу RPC по следующим реквизитам:
Умолчания можно изменить библиотечной функцией
Таким образом, чтобы работать с библиотекой, первым делом нужно запустить тестовый кошелек биткоина:
С указанными выше настройками, кошелек запустится в тестовой сети биткоина.
В биткоине запрещены транзакции в которых нет никаких трат. Поэтому перед тем, как что-то записать в блокчейн биткоина, обязательно придется пополнить свой кошелек. Биткоины для тестовой сети можно получить бесплатно, если поискать в гугле что-то вроде «bitcoin testnet faucet». Когда кошелек пополнен, можно наконец записывать данные.
Библиотека имеет несколько функций для записи данных:
В принципе, что эти функции делают — понятно из названия. Результат выполнения функций — объект
Рассмотрим пример использования:
Если этот код выполнится без ошибок, то в консоль будет выведен хэш транзакции. По этому хэшу можно будет прочитать данные.
Для того, чтобы читать записанные ранее в блокчейн данные, вам необходимо знать только хэш транзакции. Кошелек при этом может быть пустой, то есть если хотите только читать данные, то пополнять кошелек не обязательно.
Пример кода
Если этот код сработает без ошибок, то в консоль будет выдан текст html страницы, которую я ранее уже сохранил в блокчейне.
В блокчейне можно например сохранить статический сайт. Этот сайт практически невозможно будет удалить или каким-то образом заблокировать. Однако чтобы читать такой сайт, нужен будет дополнительный софт: новый браузер или расширение для браузера.
Расширение для браузера это самое простое решение. Пример такого расширения можно посмотреть здесь github.com/3s3s/blockchaindata
Скачать и установить это расширение для Firefox можно здесь: yadi.sk/d/a3xM9BCepP4nBw
После установки Firefox будет перехватывать и обрабатывать ссылки на сайты в формате
Например такая ссылка будет работать http://tbtc/8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5
Библиотека blockchaindata-lib сжимает данные перед помещением их в блокчейн с помощью алгоритма deflate, поэтому данный метод особенно эффективен для записи текстовых документов. В ходе тестирования мне удавалось записать в блокчейн до 70 кб сжатых данных. Хотя ограничений на размер входящих данных нет, ошибки на больших массивах данных появляются из-за внутренней реализации кода биткоина.
При записи данных в блокчейн, нужно так же учитывать финансовую составляющую. Чтение и запись данных в тестовой сети биткоина с помощью библиотеки blockchaindata-lib это просто и бесплатно. Однако если вы захотите писать данные в рабочую сеть биткоина, то вам нужно будет учесть ненулевую цену биткоина.
С помощью библиотеки blockchaindata-lib запись и чтение данных в блокчейне можно организовать буквально в несколько строк кода.
Инструменты
Библиотека blockchaindata-lib написана на node.js. Исходный код с примерами доступен на гитхаб github.com/3s3s/blockchaindata-lib. Чтобы добавить библиотеку в ваш проект, достаточно выполнить в консоли одну команду
npm install blockchaindata-lib
Для работы с блокчейном, необходимо настроить RPC доступ к кошельку биткоина или совместимого с биткоином форка (Litecoin, Dogecoin и т.п.). По умолчанию blockchaindata-lib будет пытаться обращаться к серверу RPC по следующим реквизитам:
адрес: http://127.0.0.1:18332
пользователь: rpc_btc_test
пароль: rpc_btc_password_test
Умолчания можно изменить библиотечной функцией
updateNetwork(url, user, password)
Таким образом, чтобы работать с библиотекой, первым делом нужно запустить тестовый кошелек биткоина:
- Скачать кошелек биткоина (или совместимого форка.)
- Создать файл ~/.bitcoin/bitcoin.conf (или в windows %APPDATA%/Bitcoin/bitcoin.conf)
- В файле bitcoin.conf записать следующие настройки
testnet=1 server=1 rpcbind=127.0.0.1 rpcallowip=127.0.0.1 rpcuser=rpc_btc_test rpcpassword=rpc_btc_password_test txindex=1
- Сохранить изменения в bitcoin.conf и запустить bitcoind (или в windows bitcoin-qt.exe)
- Дождаться синхронизации блокчейна
С указанными выше настройками, кошелек запустится в тестовой сети биткоина.
Запись данных
В биткоине запрещены транзакции в которых нет никаких трат. Поэтому перед тем, как что-то записать в блокчейн биткоина, обязательно придется пополнить свой кошелек. Биткоины для тестовой сети можно получить бесплатно, если поискать в гугле что-то вроде «bitcoin testnet faucet». Когда кошелек пополнен, можно наконец записывать данные.
Библиотека имеет несколько функций для записи данных:
SaveTextToBlockchain( dataString )
SaveJSONToBlockchain( objectJSON )
SaveFileToBlockchain( data )
В принципе, что эти функции делают — понятно из названия. Результат выполнения функций — объект
{result: <true | false>, message: <string>, txid: <string>}
Рассмотрим пример использования:
'use strict';
const blockchaindata = require('blockchaindata-lib')
async function test1()
{
try {
//Сохраняем текст в блокчейне
const ret1 = await blockchaindata.SaveTextToBlockchain("Этот текст будет сохранен в блокчейне");
if (ret1.result == false) throw new Error("SaveTextToBlockchain failed, message: "+ret1.message);
console.log("SaveTextToBlockchain success! txid="+ret1.txid+"\n--------------------------")
}
catch (e) {
console.log(e.message)
}
}
test1();
Если этот код выполнится без ошибок, то в консоль будет выведен хэш транзакции. По этому хэшу можно будет прочитать данные.
Чтение данных
Для того, чтобы читать записанные ранее в блокчейн данные, вам необходимо знать только хэш транзакции. Кошелек при этом может быть пустой, то есть если хотите только читать данные, то пополнять кошелек не обязательно.
Пример кода
'use strict';
const blockchaindata = require('blockchaindata-lib');
async function test2()
{
//Читаем данные из блокчейна
try {
const savedObject = await blockchaindata.GetObjectFromBlockchain("8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5");
if (savedObject.type == 'error') throw new Error(savedObject.message)
if (savedObject.type == 'text')
console.log(Buffer.from(savedObject.base64, 'base64').toString('utf8'));
else
console.log(savedObject.base64);
}
catch(e) {
console.log(e.message)
}
}
test2();
Если этот код сработает без ошибок, то в консоль будет выдан текст html страницы, которую я ранее уже сохранил в блокчейне.
Где применить?
В блокчейне можно например сохранить статический сайт. Этот сайт практически невозможно будет удалить или каким-то образом заблокировать. Однако чтобы читать такой сайт, нужен будет дополнительный софт: новый браузер или расширение для браузера.
Расширение для браузера это самое простое решение. Пример такого расширения можно посмотреть здесь github.com/3s3s/blockchaindata
Скачать и установить это расширение для Firefox можно здесь: yadi.sk/d/a3xM9BCepP4nBw
После установки Firefox будет перехватывать и обрабатывать ссылки на сайты в формате
http://tbtc/<txid>
Например такая ссылка будет работать http://tbtc/8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5
Эффективность
Библиотека blockchaindata-lib сжимает данные перед помещением их в блокчейн с помощью алгоритма deflate, поэтому данный метод особенно эффективен для записи текстовых документов. В ходе тестирования мне удавалось записать в блокчейн до 70 кб сжатых данных. Хотя ограничений на размер входящих данных нет, ошибки на больших массивах данных появляются из-за внутренней реализации кода биткоина.
При записи данных в блокчейн, нужно так же учитывать финансовую составляющую. Чтение и запись данных в тестовой сети биткоина с помощью библиотеки blockchaindata-lib это просто и бесплатно. Однако если вы захотите писать данные в рабочую сеть биткоина, то вам нужно будет учесть ненулевую цену биткоина.