как мне программно узнать, есть ли в этом телефоне кошелек, по крайней мере, с определенной произвольной суммой биткойнов?

пример использования: у меня есть приложение A, поддерживающее биткойны, которое затем хотело бы инициировать запрос платежа в биткойнах, который будет выполнен биткойн-кошельком на телефоне через механизм BIB20/bitcoin: URL. Вместо того, чтобы генерировать запрос на оплату напрямую и немедленно для произвольного количества биткойнов, существует ли способ фактически спросить биткойн-кошелек, есть ли в нем хотя бы N биткойнов?

спасибо, Джон из Kimbrough Software

Хотя это может и не быть вашим намерением, вы, по сути, спрашиваете, как написать вредоносное ПО. Сколько денег у кого-то в кошельке, это не дело другого приложения, поэтому я не верю, что есть кошельки, которые раскрывают это. Это похоже на то, как универмаг просматривает ваш бумажник или сумочку, когда вы входите в дверь. Это вторжение, а не респектабельный поступок.
я в корне не согласен с этим. вы ошибочно полагаете, что я не спрашивал разрешения на эту информацию. я рад зарегистрировать приложение с первым запросом на это разрешение. запрос на оплату N биткойнов и наблюдение за тем, как он терпит неудачу, сродни знанию этого факта, и это можно сделать с помощью BIP20, но неаккуратно.
Как бы то ни было, но я до сих пор не знаю ни одного приложения-кошелька, позволяющего другим приложениям запрашивать эту информацию. Скорее всего, это из соображений безопасности. Ваше приложение не должно нести ответственность за проверку того, может ли пользователь позволить себе покупку, прежде чем пытаться выставить счет пользователю.
это должно быть основной особенностью функциональности кошелька, что разрешенные пользователи знают о нем различные разрешенные факты.
на мой взгляд, эта новая парадигма цифрового манипулирования деньгами, которую представляет биткойн, должна включать в себя возможность заменить то, что раньше делали люди, алгоритмами, имеющими соответствующие разрешения и работающими с кошельками. Например, кошельки HD, в частности, могут отражать корпоративную структуру. Сказать что-то вроде «ваше приложение не должно нести ответственность за знание этих фактов о месте, где объект хранит все свои ключи», является чрезмерным ограничением. Я хотел бы быть в состоянии знать, есть ли у отдела в моей компании профицит или дефицит.
Вы можете найти это неуместным, но, учитывая первоначальную аналогию, я хочу добавить, что если вы позвоните в банк и спросите, есть ли у человека достаточно средств для покрытия чека, который человек выписал вам, банк скажет вам да или нет. Когда я руководил бизнесом, я делал это, чтобы предотвратить депонирование чека, в результате которого с меня взимали комиссию за недостаточность средств, если чек человека возвращался. Похоже, что-то подобное будет и с биткойнами, тем более, что я обычно не знаю людей, с которыми обмениваюсь монетами.

Ответы (2)

Это невозможно, по замыслу. Как сказал Джестин, баланс кошелька не касается других приложений.

В кошельке Android, который вы поддерживаете (кстати!) Я вижу, что файл моего кошелька зашифрован. Однако мой кошелек не запрашивает пароль для расчета истории транзакций и баланса (только «Безопасность > Восстановить кошелек» когда-либо запрашивает пароль). Таким образом, кошелек — это пользовательский процесс, который может вычислить мой баланс. В принципе, почему другой пользовательский процесс не может добиться того же, реплицируя тот же код и читая те же файлы?
Черт, мой кошелек также может тратить монеты без установки «расходного PIN-кода». Итак, вот пользовательский процесс, который имеет доступ к моим личным ключам, не спрашивая у меня пароль.... Теперь я очень запутался :(
Хорошо, теперь я чувствую себя лучше из комментария Ника Оделла ниже. Я предполагаю, что при восстановлении кошелька код получает закрытые ключи из файла кошелька и сохраняет их в той или иной форме в файл, который принадлежит приложению кошелька (и который не может быть читается другим пользовательским процессом)
В Android приложения изолированы друг от друга. Таким образом, другое приложение не может получить доступ к файлу кошелька, даже если он не зашифрован.

Это определенно возможно. Если ваше приложение работает с правами root, оно может получить доступ к файлам кошельков биткойн-кошельков, которые обычно имеют фиксированные имена файлов и заголовки файлов. Недостатком этого подхода является то, что если в вашем программном обеспечении есть уязвимость, кто-то может украсть биткойны у ваших клиентов и установить вредоносное ПО.

Как еще это можно сделать? Биткойн-кошелек может реализовать API, чтобы приложения на одном телефоне могли запрашивать баланс биткойнов. Определенно есть аргумент в пользу того, чтобы сделать это возможным. Я бы не стал сравнивать это с обыском кошелька при входе в универмаг — это больше всего похоже на то, как DigitalOcean берет с меня цент и отменяет списание, чтобы проверить, действительна ли моя кредитная карта, прежде чем сдать мне серверы в аренду.

Как говорит Андреас Шильдбах, это намеренно не реализовано. (Обратите внимание, что Шильдбах является сопровождающим этого кошелька Android и одним из участников BitcoinJ, который многие кошельки Android используют за кулисами.) Почему вам не нужна эта функция? Одна из причин заключается в том, что многие приложения поддерживаются рекламой/сбором данных. Если бы этот API был доступен, многие приложения, которым не нужно иметь эту информацию, запросили бы ее. Вы можете себе представить, что эти компании будут продавать наборы данных, которые включают адреса электронной почты и балансы биткойнов — основной эффект этой функции будет заключаться в том, чтобы добавить еще один вектор для фишинга пользователей биткойнов.

спасибо Ник; вдумчивый ответ. Метафора с кошельком работает, когда речь идет о личных финансах, но, конечно, шатается, когда вы рассматриваете корпоративный контекст. Я думаю, что аргумент в пользу отсутствия API со временем будет побежден преимуществами наличия этого API в кошельках. Довольно скоро мы позволим алгоритмам участвовать в моделировании расходов от нашего имени, как корпораций, так и частных лиц. Аргумент о том, что многие современные приложения насилуют содержимое вашего телефона, не лишает законной силы хорошее использование других приложений для получения доступа к вашим контактам.
@KimbroughSoftware Моя интуиция подсказывает, что большинство людей не ищут кошелек для своей корпорации — они ищут кошелек для себя. Если они хотят что- то для своей корпорации, им лучше подойдет такой кошелек, как BitGo, а не кошелек Android. Я имею в виду, что, если парень, держащий деньги, сбежит с ними? Что, если он уронит свой телефон в лужу и уничтожит активы на миллионы долларов? И, конечно же, если вы хотите, чтобы кто-то мог проверить содержимое HD-кошелька без возможности его потратить, вы можете дать ему xpub.
согласен, но неизбежное существование этого API не зависит от Android, я думаю. и метафора «кошелька» изменится, как только мы поймем, что одна часть программного обеспечения, такая как кошелек, не может внутренне содержать весь творческий потенциал валютного алгоритма, который, вероятно, появится в ближайшие годы. кошелек в настоящее время является ключевым хранителем с ручным входом пользователя в значимые границы человеческих транзакций. Когда мы соглашаемся с тем, что наш ручной кошелек «платит» за что-то, мы соглашаемся с алгоритмом поиска N подходящих UXTO. Я полагаю, что в конце концов эта идея обобщает более богатый API-интерфейс опекуна.
@NickODell Я не понимаю, почему приложение должно запускаться от имени пользователя root. Мой файл wallet.dat (скажем) в биткойн-ядре принадлежит пользователю, что мне не хватает?
@SvenWilliamson Android сегментирует файлы по приложениям, чтобы одно приложение не могло просматривать файлы другого. Будучи root, вы можете игнорировать эту защиту.