Bitcoin Forum
May 30, 2024, 11:55:50 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Как парсить listtransactions <account> <count> <from>  (Read 1165 times)
Tonako (OP)
Newbie
*
Offline Offline

Activity: 26
Merit: 0


View Profile
April 08, 2014, 02:40:07 PM
 #1

Первый раз встречаю такой вид сортировки данных
listtransactions <account> <count> <from>

Пишу модуль для интернет магазина, как мне проверять оплату пользователей?

По крону делать запрос listtransactions "33492" 500 ?

или как-то иначе? подскажите пожалуйста
 пока не могу понять как реализовать занесение в БД входящий платежей
rPman
Legendary
*
Offline Offline

Activity: 1120
Merit: 1069


View Profile WWW
April 09, 2014, 06:24:53 AM
 #2

В базу записывай транзакции (идентифицируй по txid и учитывай количество подтверждений) в цикле постранично запрашивая транзакции до тех пор, пока не встретим транзакцию, уже записанную в базе.
Code:
// далее $saved_txs определен для простоты, но это не переменная а база данных
while(!isset($saved_txs[$tx.txid])||(!$saved_txs[$tx.txid].isCompleted&&$saved_txs[$tx.txid].conformation<MIN_TX_CONF))
{
  ... // запрос следующей $tx входящей транзакции из результата listtransactions, если список закончился, запрашиваем следующую страницу listtransaction, увеличив from на размер count
  ... // помним, что в процессе загрузки данных могут появиться новые транзакции, к сожалению кошелек не предоставляет механизмов по обработке таких ситуаций, особенно если скорость их появления больше размера count
  $saved_txs[$tx.txid]=$tx; // тут будет сложнее, для обработки сложных транзакций на несколько адресов
  .... // обрабатываем транзакции
  $saved_txs[$tx.txid].isCompleted=false;
  // сохраняем список новых не обработанных транзакций
  $todo[$tx.txid]=true;
}

foreach($todo as $txid=>$t)
{
  ... // обрабатываем транзакцию
  $saved_txs[$tx.txid].isCompleted=true;
}
Код будет немного сложнее, так как listtransactions для сложных транзакций (входящие, на несколько адресов кошелька) вернет несколько записей, по одной на каждый входящий адрес. Для этого можно либо хитро хранить транзакции, либо формировать свой идентификатор транзакции, например из txid и address

Опрос кошелька нужно делать не по крону, а настроив калбак в кошельке на нахождение нового блока или входящую транзакцию
Code:
  -blocknotify=<cmd>     Execute command when the best block changes (%s in cmd is replaced by block hash)
  -walletnotify=<cmd>    Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)

Здесь не может находиться ваша реклама Smiley
Protect a future of bitcoin, use p2pool
Donation in BTC: 19fv5yYtfWZ9jQNjx2ncmu1TTrvg5CczZe
Tonako (OP)
Newbie
*
Offline Offline

Activity: 26
Merit: 0


View Profile
April 10, 2014, 03:29:23 PM
 #3

Код будет немного сложнее, так как listtransactions для сложных транзакций (входящие, на несколько адресов кошелька) вернет несколько записей, по одной на каждый входящий адрес. Для этого можно либо хитро хранить транзакции, либо формировать свой идентификатор транзакции, например из txid и address
тут я не понял

а в чем тут проблема? можно подробне, в чем тут может возникнуть проблема?

я вообще не собираюсь заморачиваться, если есть новый txid значит буду добавлять транзу в свою БД
rPman
Legendary
*
Offline Offline

Activity: 1120
Merit: 1069


View Profile WWW
April 11, 2014, 07:04:51 PM
 #4

listtransactions возвращает список с не уникальными txid (например для таких https://blockchain.info/tx/17369a70b1a10878b1887767bea519afd3e0bc53ca384137d8480113d88ce0db ) для каждого исходящего адреса находящегося в кошельке (адреса кстати тоже не уникальны и могут повторяться в одной транзакции).

Т.е. хранить информацию о транзакции нужно как минимум со списком этих адресов (а не одним адресом).

Здесь не может находиться ваша реклама Smiley
Protect a future of bitcoin, use p2pool
Donation in BTC: 19fv5yYtfWZ9jQNjx2ncmu1TTrvg5CczZe
Tonako (OP)
Newbie
*
Offline Offline

Activity: 26
Merit: 0


View Profile
April 13, 2014, 02:54:59 AM
Last edit: April 13, 2014, 03:08:39 AM by Tonako
 #5

rPman, спасибо огромное за этот момент. Я не обращал внимания что такое может быть.

Подскажи пожалуйста как мне реализовтаь для теста приход средств с нескольких адресов на мой адрес?
чтобы я наглядно увидел как bitcoind выводит список таких танзакций и как мне их обрабатывать

или сразу так вопрос задам, по этой транзакции https://blockchain.info/tx/17369a70b1a10878b1887767bea519afd3e0bc53ca384137d8480113d88ce0db

я так понимаю там было 10 приходов с одним txid

вот вопрос, как обрабатывать все эти 10 приходов, что в них уникального чтобы по несколько раз их в БД не заносить?

мой скрипт по планам будет делать так
1. кроном запускается, получает допустим список из 50 транзакий из bitcoind
2. каждую транзакцию проверяет в БД на наличие, ищет txid - если его нет создает главную запись о транзакции
3. далее скрипт находит опять транзакцию с тем же txid, проверяет в БД, находит главную запись, добавляет запись вторичного типа, так же у главной записи обновляет значение суммы

вот теперь не пойму как сделать проверку чтобы  по несколько раз не зачислять приходы((
Tonako (OP)
Newbie
*
Offline Offline

Activity: 26
Merit: 0


View Profile
April 13, 2014, 03:38:14 AM
 #6

еще вопрос, что за массив walletconflicts в транзакции ? какие там данные могут быть?
rPman
Legendary
*
Offline Offline

Activity: 1120
Merit: 1069


View Profile WWW
April 13, 2014, 05:38:02 AM
 #7

Про walletconflicts - не знаю.
Как обрабатывать транзакции, читай мое первое сообщение в теме
Про 'приход 10' - предпоследнее.
Для тестов создай транзакцию командой sendmany. Нет деннег - намайни за часок блок одной видеокартой в тестовой сети.

Здесь не может находиться ваша реклама Smiley
Protect a future of bitcoin, use p2pool
Donation in BTC: 19fv5yYtfWZ9jQNjx2ncmu1TTrvg5CczZe
yurm
Full Member
***
Offline Offline

Activity: 216
Merit: 100


View Profile
April 15, 2014, 03:20:48 PM
 #8

еще вопрос, что за массив walletconflicts в транзакции ? какие там данные могут быть?
walletconflicts — это список хэшей malleable транзакций. Например, отправили вы куда-то энную сумму и получили один хэш, а в блокчейн попал другой хэш той же по сути транзакции. Оба этих хэша будут выдаваться listtransactions, а в walletconflicts они будут ссылаться друг на друга. У меня такое было один раз. При приёме монет скорее всего будет то же самое, если до кошелька аналогично дойдут разные хэши одной транзакции.

BTC donation:1DPUVJWeN2CNgJvRx5MtbsYWnFsKHxXWrc
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!