Руководство по созданию собственного кошелька
Для обеспечения совместимости кошельков Aptos необходимо следующее:
Мнемоника - набор слов, из которых можно вывести закрытые ключи учетных записей
Dapp API - точки входа в кошелек для поддержки доступа к идентичности, управляемой кошельком
Ротация ключей - обработка отношений вокруг мнемоник и восстановление учетных записей в разных кошельках
Мнемоника
Хотя кошелек Petra рекомендует использовать 1 мнемонику <-> 1 учетную запись, мы понимаем, что некоторые кошельки могут захотеть поддерживать 1 мнемонику <-> n учетных записей, поступающих из других сетей. Чтобы поддержать оба этих случая, мы используем производный путь BIP44 для мнемоник к учетным записям.
Создание учетной записи Aptos
Сгенерируйте мнемонику, используя что-то вроде BIP39
Получите master seed из этой мнемоники с помощью BIP39
Используйте производный путь BIP44 для получения адреса учетной записи (например,
m/44'/637'/0'/0'/0'
).
В случае с Petra мы всегда будем использовать путь
m/44'/637'/0'/0'/0'
, поскольку у нас 1 мнемоника <-> 1 учетная запись
Поддержка 1 мнемоники <-> N кошельков учетных записей
Опять же, потому что парадигма 1 мнемоника <-> n учетных записей не очень хорошо подходит для ротации ключей. В настоящее время мы не рекомендуем этот подход. Но для поддержки импорта такого типа учетных записей мы будем следовать этому стандарту.
Аналогично вышеуказанным шагам 1-3
Используйте производный путь BIP44 для получения закрытых ключей (например, m/44'/637'/i'/0'/0'), где i - индекс учетной записи.
Теперь выполним итерацию i, пока не получим все учетные записи, которые пользователь хочет импортировать
Мы не хотим итерировать до бесконечности, чтобы проверить, существуют ли учетные записи в сети. Если во время итерации учетная запись не существует, мы будем продолжать итерацию в течение постоянного лимита
address_gap_limit
(пока 10), чтобы узнать, есть ли другие учетные записи. Если учетная запись найдена, мы продолжим итерацию в обычном режиме.
т.е.
Dapp API
Сообщение форума с обсуждением Будут некоторые apis, которые могут добавить определенные кошельки, но должно быть несколько apis, которые являются стандартными для всех кошельков. Это облегчит массовое внедрение и облегчит жизнь разработчикам dapp.
connect()
,disconnect()
, иisConnected()
account()
signAndSubmitTransaction(transaction: EntryFunctionPayload)
signMessage(payload: SignMessagePayload)
Проверка событий (
onAccountChanged(listener)
,onNetworkChanged(listener)
)
connect(), disconnect(), isConnected()
Важно, чтобы dapps не могли отправлять запросы в кошелек, пока пользователь не подтвердит, что хочет видеть эти запросы.
connect()
предложит пользователювозвратить
Promise<PublicAccount>
disconnect()
позволяет пользователю прекратить предоставление доступа к dapp, а также помогает dapp в управлении состояниемвозвратить
Promise<void>
isConnected()
возможность делать запросы к кошельку для получения текущего состояния соединениявозвратить
Promise<boolean>
account()
Должен быть подключен dapp может запросить текущий подключенная учетная запись, чтобы получить адрес или открытый ключ.
account()
без предложения пользователювозвратить
Promise<PublicAccount>
signAndSubmitTransaction(transaction: EntryFunctionPayload)
Мы будем генерировать транзакцию из полезной нагрузки (простой JSON) с помощью sdk, а затем подписывать и отправлять ее на ноду кошелька.
signAndSubmitTransaction(transaction: EntryFunctionPayload)
предложит пользователю ввести транзакцию, которую он подписываетвозвратить
Promise<PendingTransaction>
signMessage(payload: SignMessagePayload)
Чаще всего эта функция используется для подтверждения личности, но есть и несколько других возможных вариантов использования. Вы можете заметить, что некоторые кошельки других сетей просто предоставляют интерфейс для подписи произвольных строк. Это может быть чревато атаками типа "man-in-the-middle", подписанием строковых транзакций и т.д.
Типы:
signMessage(payload: SignMessagePayload)
запрашивает у пользователяpayload.message
должен быть подписанвозвратить
Promise<SignMessageResponse>
Пример: signMessage({nonce: 1234034, message: "Welcome to dapp!", address: true, application: true, chainId: true })
В результате будет создано полное сообщение (FullMessage), которое будет подписано и возвращено в качестве подписи:
Проверка событий (в процессе выполнения)
Ротация ключей (в процессе выполнения)
Отображение было реализовано, но интеграция sdk находится в процессе. Это будет обновлено в ближайшее время.
Last updated