Может ли децентрализованное приложение поддерживать метамаску, а также другие средства хранения ключей?

Я использую Metamask для хранения ключей в своем децентрализованном приложении. Насколько я понимаю, приложение Metamask вводит объект web3 и самостоятельно обрабатывает все функции подписи, где это необходимо. Но Metamask в настоящее время поддерживает только chrome и firefox (насколько мне известно), а плагин firefox все еще имеет некоторые проблемы (я получаю странные ошибки, и плагин иногда зависает). Я не уверен, есть ли поддержка Android. Поэтому я хочу, чтобы была альтернативная возможность использовать либо метамаску, либо подписывать все, запрашивая у пользователя ключ. Я не знаю, как сделать последнее и возможно ли это сделать в одном приложении.

Ответы (3)

Если вы будете следовать рекомендациям по совместимости при разработке для MetaMask , весьма вероятно, что ваше децентрализованное приложение будет также корректно работать с альтернативами MetaMask, такими как Mist, Parity Browser, Toshi и SpaceSuit.

Запрашивать у пользователей ключ можно (например, EtherDelta предоставляет пользователям эту возможность), но это также очень плохая привычка учить своих пользователей (EtherDelta была взломана некоторое время назад, и у пользователей, которые сделали это, был украден их эфир).

В качестве альтернативы можно сделать интерфейс ваших смарт-контрактов достаточно простым, чтобы прямой вызов контрактов (через что-то вроде MyEtherWallet или консоли Truffle) не сбивал с толку.

Использование метамаски — это только один из способов сделать это. Вы также можете использовать MIST или любой другой кошелек, поддерживающий web3. Хотя использование метамаски делает работу быстро. Если вы можете предоставить мне более подробную информацию о том, что именно делает ваше приложение, я могу дать вам более конкретное решение.

Я имею в виду, могу ли я легко выполнить процесс подписания приложения, не отказываясь от «децентрализованного» механизма. Я думаю о непосредственном использовании инфуры вместо использования метамаски. Я понимаю использование развернутого узла, который выполняет infura, но я не могу понять процесс подписания. Я не хочу хранить ключ пользователя.

Это то, что вам нужно:

https://github.com/MetaMask/провайдер-движок

Вы можете позволить пользователю с метамаской по-прежнему подключаться, ИЛИ позволить пользователю ввести закрытый ключ, чтобы ввести этот новый web3.

Я сделал мобильное приложение и настольное приложение из веб-приложения, использующего этот код, и они работают плавно.