Я использую bitcoinj (реализация Java). Я прочитал много ответов здесь, но ни один из них не отвечает на мой вопрос. Как получить адрес отправителя с помощью bitcoinj?
У меня есть переменная транзакции tx. Я могу получить его хэш, я также использовал это: https://blockchain.info/tx/myTXhash , и он показал мне транзакции. Проблема даже не в том, что сеть показывает мне отправителя.
НО: если я использую этот сгенерированный файл .wallet и открою его с помощью мультибита (биткойн-кошелька), я смогу увидеть там, под транзакциями, от кого были отправлены деньги. Это означает, что есть способ получить адрес отправителя, но КАК?
РЕДАКТИРОВАТЬ: я ошибся, multibit не знает, от кого пришли деньги, я просто был сбит с толку, потому что он показал мне, что они были отправлены по правильному адресу (но это было настроено мной в args).
Но есть ли возможность как-то получить сообщение от клиента, чтобы узнать, он ли отправил деньги?
Для справки в будущем: в биткойне 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 с эквивалентной информацией:
Однако извлечь эту информацию при просмотре необработанной транзакции непросто, поскольку адреса встроены в скрипт.
Матьё
Ондрей 'zatokar' Токар