Author

Topic: Как парсить listtransactions <account> <count> <from> (Read 1169 times)

full member
Activity: 216
Merit: 100
еще вопрос, что за массив walletconflicts в транзакции ? какие там данные могут быть?
walletconflicts — это список хэшей malleable транзакций. Например, отправили вы куда-то энную сумму и получили один хэш, а в блокчейн попал другой хэш той же по сути транзакции. Оба этих хэша будут выдаваться listtransactions, а в walletconflicts они будут ссылаться друг на друга. У меня такое было один раз. При приёме монет скорее всего будет то же самое, если до кошелька аналогично дойдут разные хэши одной транзакции.
legendary
Activity: 1120
Merit: 1069
Про walletconflicts - не знаю.
Как обрабатывать транзакции, читай мое первое сообщение в теме
Про 'приход 10' - предпоследнее.
Для тестов создай транзакцию командой sendmany. Нет деннег - намайни за часок блок одной видеокартой в тестовой сети.
newbie
Activity: 26
Merit: 0
еще вопрос, что за массив walletconflicts в транзакции ? какие там данные могут быть?
newbie
Activity: 26
Merit: 0
rPman, спасибо огромное за этот момент. Я не обращал внимания что такое может быть.

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

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

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

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

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

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

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

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

я вообще не собираюсь заморачиваться, если есть новый txid значит буду добавлять транзу в свою БД
legendary
Activity: 1120
Merit: 1069
В базу записывай транзакции (идентифицируй по txid и учитывай количество подтверждений) в цикле постранично запрашивая транзакции до тех пор, пока не встретим транзакцию, уже записанную в базе.
Code:
// далее $saved_txs определен для простоты, но это не переменная а база данных
while(!isset($saved_txs[$tx.txid])||(!$saved_txs[$tx.txid].isCompleted&&$saved_txs[$tx.txid].conformation{
  ... // запрос следующей $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=     Execute command when the best block changes (%s in cmd is replaced by block hash)
  -walletnotify=    Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)
newbie
Activity: 26
Merit: 0
Первый раз встречаю такой вид сортировки данных
listtransactions

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

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

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