Перейти к содержимому

loga's блог

  • записи
    3
  • комментариев
    10
  • просмотра
    41 644

Записи в этом блоге

loga

Довольно необычная концепция биткоина по видимому способствует появлению сервисов с не менее оригинальной концепцией.

 

bittit

 

bittit_sample.png

 

Адрес: https://bittit.info/

Так же сервис доступен в сети tor по адресу http://ejz7kqoryhqwosbk.onion/

 

Торговая площадка для продажи изображений. Имеется два раздела, один для обычных картинок, другой для порнографии. Также с недавнего времени в режиме тестирования работает с текстами, видео и tar-архивами.

 

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

 

При аплоаде картинки вы указываете ваш bitcoin-адрес для оплаты, сумму в которую вы оцениваете ваше изображение, размер самой маленькой стороны первью, а так же опционально можете указать ваш контактный e-mail, комментарий и ID альбома. После аплоада и модерации изображение выставляется на сайте в уменьшенном до указанного при аплоаде размера виде. После того как через blockexplorer будет зафиксирована оплата всей суммы то в публичный доступ будет выложен оригинал картинки, тоесть сумму надо указывать не для каждого покупателя в отдельности а ту, за которую вы бы согласились выложить файл в общий доступ. Поскольку сервис не имеет доступа к вашему кошельку то любую транзакцию на указанный адрес посчитает оплатой, следовательно адрес нужно указывать уникальный для каждого файла и не используемый больше нигде.

 

Сервис зарабатывает на рекламе и продаже верификаций за 5 евро.

 

Bets of Bitcoin

 

betsofbitcoin_sample.png

 

Адрес: http://betsofbitco.in/

 

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

 

Как это работает? Да очень просто! Предположим вы считаете что через неделю-две состоится вторжение инопланетян на землю. Вам нужно создать событие с датой события (то время, когда можно будет окончательно убедится в том, произошло событие или нет) через две недели и датой дедлайна (времени до которого будут приниматься ставки) через неделю. Удовольствие это платное и стоит 0.1 BTC. Потом это событие будет отображаться в публичном списке и все желающие, в том числе и вы, смогут сделать ставку на то, произойдет это событие или нет. Минимальная сумма ставки так же 0.1 BTC, сумма всех ставок за то что это событие произойдет и за то, что это событие не произойдет отображается зеленым и красным соответственно.

 

Спустя две недели, когда станет ясно, лежит белый дом в руинах или нет, те, кто был прав, получат свои деньги назад в полном объеме а так же часть ставок проигравших. 5% от суммы проигравших получит автор события, 5% уйдет в виде комиссии сервису, 45% распределится пропорционально размерам ставок выигравших, 45% пропорционально времени до дедлайна в момент ставки.

loga

bitcoind и с чем его едят

У биткоина есть как графический интерфейс именумеый bitcoin-qt так и консольный, bitcoind. Если первый удобен для использования человеком, то без текствого довольно сложно сделать интернет магазин или какой-либо иной сервис, принимающий биткоины в качестве оплаты. О нем и пойдет речь.

 

Для работы нужно запустить один экземпляр bitcoind в качестве демона, чтобы он работал в качестве полноценного узла сети и отдавать ему команды с помощью еще одной копии bitcoind. Взаимодействие между ними происходит по JSON-RPC через 8332й tcp порт. Для того чтобы они узнавали и доверяли друг другу нужно задать rpcpassword, который прописывается в файле ~/.bitcoin/bitcoin.conf как rpcpassword=blah-blah-blah. Если у вас нет такого файла то его нужно создать. Туда же можно прописать и другие параметры из тех, что указываются при запуске демона.

 

Полный список параметров можно получить запустив bitcoind с ключем --help или -?, вот пример того, что мы увидим в ответ:

Bitcoin version 0.5.2-beta

Usage:
 bitcoind [options]                     
 bitcoind [options] <command> [params]  Send command to -server or bitcoind
 bitcoind [options] help                List commands
 bitcoind [options] help <command>      Get help for a command
Options:
 -conf=<file>       Specify configuration file (default: bitcoin.conf)
 -pid=<file>        Specify pid file (default: bitcoind.pid)
 -gen               Generate coins
 -gen=0             Don't generate coins
 -min               Start minimized
 -datadir=<dir>     Specify data directory
 -timeout=<n>       Specify connection timeout (in milliseconds)
 -proxy=<ip:port>   Connect through socks4 proxy
 -dns               Allow DNS lookups for addnode and connect
 -port=<port>       Listen for connections on <port> (default: 8333 or testnet: 18333)
 -maxconnections=<n>  Maintain at most <n> connections to peers (default: 125)
 -addnode=<ip>      Add a node to connect to
 -connect=<ip>      Connect only to the specified node
 -noirc             Don't find peers using internet relay chat
 -nolisten          Don't accept connections from outside
 -nodnsseed         Don't bootstrap list of peers using DNS
 -banscore=<n>      Threshold for disconnecting misbehaving peers (default: 100)
 -bantime=<n>       Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
 -maxreceivebuffer=<n>  Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)
 -maxsendbuffer=<n>  Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)
 -upnp              Attempt to use UPnP to map the listening port
 -paytxfee=<amt>    Fee per KB to add to transactions you send
 -daemon            Run in the background as a daemon and accept commands
 -testnet           Use the test network
 -debug             Output extra debugging information
 -logtimestamps     Prepend debug output with timestamp
 -printtoconsole    Send trace/debug info to console instead of debug.log file
 -rpcuser=<user>    Username for JSON-RPC connections
 -rpcpassword=<pw>  Password for JSON-RPC connections
 -rpcport=<port>    Listen for JSON-RPC connections on <port> (default: 8332)
 -rpcallowip=<ip>   Allow JSON-RPC connections from specified IP address
 -rpcconnect=<ip>   Send commands to node running on <ip> (default: 127.0.0.1)
 -keypool=<n>       Set key pool size to <n> (default: 100)
 -rescan            Rescan the block chain for missing wallet transactions

SSL options: (see the Bitcoin Wiki for SSL setup instructions)
 -rpcssl                                  Use OpenSSL (https) for JSON-RPC connections
 -rpcsslcertificatechainfile=<file.cert>  Server certificate file (default: server.cert)
 -rpcsslprivatekeyfile=<file.pem>         Server private key (default: server.pem)
 -rpcsslciphers=<ciphers>                 Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
 -?                 This help message

Вот описание некоторых из них:

-conf - позволяет задать файл конфигурации отличный от ~/.bitcoin/bitcoin.conf

-pid - указать файл, в который будет писаться pid процесса демона

-gen - после старта начать майнить биткоины (он это будет пытаться делать на cpu, что крайне неэффективно)

-gen=0 - не майнить биткоины (если в файле конфигурации указано иное)

-datadir= - использовать вместо ~/.bitcoin/ указанный путь

-timeout= - таймаут tcp соединения

-proxy=<ip:port> - соединятся через указанный SOCKS4 прокси-сервер, например через tor

-port= - использовать указанный порт вместо 8333

-maxconnections= - ограничить число одновременных соединений, по умолчанию 125

-addnode= - так же подключится и к указанному узлу, тут полезно указать адреса пулов для ускорения транзакций, можно использовать несколько раз

-connect= - подключится только к указанному узлу, полезно, если вы хотите загрузить блоки с другого компьютера в локальной сети не загружая интернет-канал

-noirc - не использовать irc для поиска узлов и анонса собственного адреса (например irc запрещен хостингом, что встречается довольно часто)

-nolisten - не принимать входящие соединения

-nodnsseed - не использовать DNS для поиска узлов

-upnp - Пытаться использовать UPnP для того чтобы пробросить порт. Полезно, если вы заначены роутером, использующим внешний ip и поддерживающим UPnP. Не нужно, если вы имеете внешний ip напрямую и не имеет смысла, если ваш роутер не имеет внешнего ip.

-paytxfee= - установить размер комиссию (в биткоинах), собственная логика клиента имеет приоритет над этим значением

-daemon - запускаться в фоне

-testnet - использовать тестовую сеть

-debug - писать отладочную информацию

-logtimestamps - снабжать лог временными метками

-printtoconsole - использовать stdout вместо debug.log

-rpcuser= и -rpcpassword - имя пользователя и пароль для JSON-RPC, как для лемона так и для клиента

-rpcport= - использовать для JSON-RPC порт, отличный от 8332

-rpcallowip= - разрешить принимать команды с указанного ip, по умолчанию команды принимаются только с 127.0.0.1, можно использовать несколько раз

-rpcconnect= - отправлять команды на указанный узел а не на 127.0.0.1

-keypool= - сгенерировать указанное количество ключей при старте, по умолчанию - 100

-rescan - перечитать цепочку блоков, полезно если у вас поврежден blkindex.dat или есть зависшие транзакции в кошельке

Так же в 0.6 версии появилась довольно полезная опция -blocknotify=, которая запускает указанную команду при получении нового блока, например для обработчика платежей.

 

Большую часть перечисленных параметров можно указывать и в bitcoin.conf.

 

При работе в режиме демона клиент использует множество "виртуальных" аккаунтов, для каждого из которых ведет свой учет баланса. Такая логика может существенно упростить создание какого-либо сервиса, поскольку достаточно привязать пользователей сервиса к аккаунтам bitcoind. Баланс на аккаунте может быть как положительным так и отрицательным. Аккаунт, используемый по умолчанию - "" (пустая строка).

 

После запуска демона должно пройти какое-то время, чтобы он проинициализировался и начал ожидать команд. Список команд, которые можно отдать демону, можно получить, запустив bitcoind с аргументом help (без --). Вот пример вывода:

backupwallet <destination>
encryptwallet <passphrase>
getaccount <bitcoinaddress>
getaccountaddress <account>
getaddressesbyaccount <account>
getbalance [account] [minconf=1]
getblockcount
getconnectioncount
getdifficulty
getgenerate
gethashespersec
getinfo
getmemorypool [data]
getnewaddress [account]
getreceivedbyaccount <account> [minconf=1]
getreceivedbyaddress <bitcoinaddress> [minconf=1]
gettransaction <txid>
getwork [data]
help [command]
keypoolrefill
listaccounts [minconf=1]
listreceivedbyaccount [minconf=1] [includeempty=false]
listreceivedbyaddress [minconf=1] [includeempty=false]
listsinceblock [blockid] [target-confirmations]
listtransactions [account] [count=10] [from=0]
move <fromaccount> <toaccount> <amount> [minconf=1] [comment]
sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]
sendmany <fromaccount> {address:amount,...} [minconf=1] [comment]
sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]
setaccount <bitcoinaddress> <account>
setgenerate <generate> [genproclimit]
settxfee <amount>
signmessage <bitcoinaddress> <message>
stop
validateaddress <bitcoinaddress>
verifymessage <bitcoinaddress> <signature> <message>

Описание некоторых комманд:

backupwallet - сделать резервную копию wallet.dat

encryptwallet - зашифровать кошелек (необратимо!)

getaccount - Узнать, какому аккаунту принадлежит указанный адрес. Пареметр - bitcoin адрес, результат - строка с именем аккаунта.

getaddressesbyaccount - Вывести список адресов, принадлежащих указанному аккаунту. Параметр - имя аккаунта, результат - список bitcoin-адресов в формате JSON.

getaccountaddress - Сгенерировать еще один адрес для указанного аккаунта. Параметр - имя аккаунта, результат - строка с bitcoin-адресом.

getbalance - Вывести баланс аккаунта для указанного количества подтверждений. Первый необязательный параметр - имя аккаунта, второй необязательный параметр - количество подтверждений, результат - положительное или отрицательное число c 8ю знаками после точки.

getblockcount - Вывести текущее колиечество блоков. Результат - целое число.

getconnectioncount - Вывести текущее количество соединений. Результат - целое число.

getdifficulty - Вывести текущую сложность. Результат - число с 8ю знаками после точки.

getgenerate - Вывести состояние генерации. Результат - true или false.

getinfo - Вывести ряд текущих параметров в виде JSON-массива.

getnewaddress - Сгенерировать еще один адрес для указанного аккаунта. Параметр - имя аккаунта, результат - строка с bitcoin-адресом.

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

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

gettransaction - Вывести информацию по транзакции.

help - Вывести список доступных комманд или описание команды, если она указана аргументом.

listaccounts - Вывести список аккаунтов с балансом на них. Результат - JSON-массив.

listreceivedbyaccount - Вывести JSON-массив с аккантами, общим количеством принятых на них средств без учета отправленных и количеством подтверждений.

listreceivedbyaddress - Тожесамое, но с детализацией по bitcoin-адресам.

listtransactions - Вывести список транзакций в JSON формате.

move - Перевести средства с одного аккаунта на другой без осуществления транзакции в сети.

sendfrom - Отправить сресдва с указанного аккаунта.

sendmany - Отправить сресдва с указанного аккаунта на множество адресов.

sendtoaddress - Отправить средства с аккаунта по умолчанию.

setaccount - Сделать адрес принадлежащим аккаунту.

setgenerate - Включить/выключить генерацию блоков. Параметр - true или false, не возвращает ничего.

settxfee - Установить комиссию.

signmessage - Подписать сообщение, полезно для подтверждения принадлежности адреса.

stop - Остановить демон. До полной остановки должно пройти какое-то время.

validateaddress - Проверить правильность адреса. Так же возвращает аккаунт, которому он принадлежит, если таковой имеется.

verifymessage - Проверить подпись сообщения.

loga

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

 

Довольно сильно на скорость загрузки влияет скорость жесткого диска, поскольку база блоков и их индекс хранится на нем и с ними часто проводятся операции чтения/записи во время загрузки блоков. Чтобы снизить обращения к диску мы будем использовать файловую систему tmpfs, которая хранит файлы в памяти и только при ее нехватке сбрасывает их части в своп. Такой подход позволяет значительно ускорить работу с файлами, но недостатком этой файловой системы является полная потеря данных при отмонтировании или отключении питания, поэтому нам понадобится бекап.

 

Итак мы имеем стандартный клиент и linux в качестве операционной системы.

 

1. Для начала перенесем все файлы из ~/.bitcoin в какой-нибудь другой каталог:

$ mkdir ~/bitcoin-backup
$ mv ~/.bitcoin/* ~/bitcoin-backup

 

2. Под рутом смонтируем в каталог клиента файловую систему tmpfs размером 5Gb (нужно чтобы сумма свободного места в свопе и оперативной памяти была не меньшей этого значения и туда помещались все файлы клиента):

# mount none -t tmpfs /home/user/.bitcoin/ -o size=5G

 

3. Делаем копию бекапа обратно в ~/.bitcoin:

$ cp ~/bitcoin-backup/* -r ~/.bitcoin

 

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

 

5. Закрыв синхронизированный клиент скопируем обновившиеся файлы в бекап

$ cp ~/.bitcoin/* ~/bitcoin-backup/ -r

 

6. Отмонтируем файловую систему tmpfs (все данные на ней будут потеряны, но мы ведь их скопировали предварительно), опять же под рутом:

# umount /home/user/.bitcoin

 

7. И перенесем файлы бекапа обратно в рабочую директорию клиента:

$ mv ~/bitcoin-backup/* ~/.bitcoin/

 

8. После этого запускаем клиент и работаем как обычно.

 

Если в процессе дозагрузки блоков произошло внезапное отключение питания то не стоит расстраиваться, нужно просто повторить все шаги начиная со 2го.

×