Как получить адрес отправителя с биткойнами (без дубликатов)?

Я использую bitcoinj (реализация Java). Я прочитал много ответов здесь, но ни один из них не отвечает на мой вопрос. Как получить адрес отправителя с помощью bitcoinj?

У меня есть переменная транзакции tx. Я могу получить его хэш, я также использовал это: https://blockchain.info/tx/myTXhash , и он показал мне транзакции. Проблема даже не в том, что сеть показывает мне отправителя.

НО: если я использую этот сгенерированный файл .wallet и открою его с помощью мультибита (биткойн-кошелька), я смогу увидеть там, под транзакциями, от кого были отправлены деньги. Это означает, что есть способ получить адрес отправителя, но КАК?

РЕДАКТИРОВАТЬ: я ошибся, multibit не знает, от кого пришли деньги, я просто был сбит с толку, потому что он показал мне, что они были отправлены по правильному адресу (но это было настроено мной в args).

Но есть ли возможность как-то получить сообщение от клиента, чтобы узнать, он ли отправил деньги?

Вы имеете в виду получение биткойн-адреса, с которого были отправлены деньги, или как-то получить имя?
Да, я имею в виду биткойн-адрес, с которого были отправлены деньги. Или каким-то другим способом, как проверить, пришли ли деньги от этого человека. Рассматривайте это как кошелек, который постоянно получает деньги, но мне нужно проверить, не поступают ли они от тех, кто хочет получить доступ в Интернете.

Ответы (2)

Для справки в будущем: в биткойне J (версия Java) адреса ввода/вывода транзакций находятся в объектах TransactionInput и TransactionOutput.

Например: для транзакции tx:

List<TransactionInput> inputs = tx.getInputs();
List<TransactionOutput> outputs = tx.getOutputs();

for(TransactionOutput out : outputs){
    System.out.println(out.getAddressFromP2PKHScript(params));
    System.out.println(out.getAddressFromP2SH(params));
}

for(TransactionInput in : inputs){
    System.out.println(in.getFromAddress());
}

Имейте в виду, что некоторые транзакции могут не иметь входного адреса. Вот описание метода getFromAddress() на github:

Удобный метод, который возвращает адрес отправителя этого ввода путем анализа файла scriptSig. Понятие «адрес отправителя» в биткойнах четко не определено, и вы не должны предполагать, что отправители транзакции могут получить монеты на тот же адрес, который они использовали для подписи (например, это неверно для общих кошельков).

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

https://blockchain.info/tx/c6cb02e70442275ffb7b35cc8a9416323ff7e01b5378abc20ae7f5b6e7617884

Большая зеленая стрелка показывает перевод с одного адреса (1B898F2tcWHX1LZWWfD21FRzqWrtXLocXN) на 2 других. Программно вы можете использовать API, который возвращает JSON с эквивалентной информацией:

https://api.blockcypher.com/v1/btc/main/txs/c6cb02e70442275ffb7b35cc8a9416323ff7e01b5378abc20ae7f5b6e7617884

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