Анатомия метамаски

С момента запуска в 2016 году MetaMask приобрела 30 миллионов активных пользователей в месяц по состоянию на март 2022 года. Он имеет глобальную базу пользователей с повышенным участием из США, Филиппин, Бразилии, Германии и Нигерии.

MetaMask является одним из незаменимых приложений сообщества Ethereum, именем нарицательным, которое инициировало и сформировало криптографический опыт многих. С NFT, играми и DAO, привлекающими большие волны новых пользователей в Web3, кошельки продолжают оставаться фундаментальным строительным блоком в экосистеме — они являются сердцем и центром всех взаимодействий между пользователями и блокчейном.

Этот пост будет посвящен механике блокчейн-аккаунтов и MetaMask, с перекосом в сторону Ethereum. Но если вас интересуют истоки и бизнес-аспекты этого, у The Generalist есть очень подробный рассказ об этом. Информация в этом посте была собрана из таких источников, как книга Mastering Ethereumстатьи поддержки MetaMask и документация Ethereum Homestead. Поэтому, если вы заинтересованы в погружении глубже, эти места полны драгоценных деталей.

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

Начиная с принципов

Прежде чем мы поговорим о самой MetaMask, давайте сначала углубимся в некоторые основополагающие концепции, которые лежат в ее основе.

Счета

Учетные записи являются основным примитивом блокчейна. В Ethereum есть 2 типа учетных записей: внешние учетные записи и контрактные учетные записи.

Каждая учетная запись определяется открытым ключом и закрытым ключом. Открытый ключ является производным от закрытого ключа, и все учетные записи в блокчейне упорядочены по их адресам (открытым ключам).

Давайте разберем 2 типа счетов и их характеристики:

Внешние учетные записи

  1. Иметь эфирный баланс
  2. Может отправлять транзакции (т.е. передачи или срабатывание кода смарт-контракта)
  3. Контролируются закрытыми ключами
  4. Нет связанного кода

Контрактные счета

  1. Реальный смарт-контракт с эфирным балансом
  2. Имеет связанный код
  3. Выполнение кода инициируется транзакциями или сообщениями, полученными от других контрактов или счетов.

Каждое действие на Ethereum инициируется внешней учетной записью.

Почему мы говорим об аккаунтах, если этот пост о кошельках? Ну, по своей сути кошелек — это не что иное, как менеджер по работе с клиентами.

Что такое кошелек?

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

Каждый кошелек начинается с компонента управления ключами.

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

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

Блокчейн — это просто распределенный реестр, который связывает вашу учетную запись с тем, сколько у вас есть какого-то токена. Ключи, хранящиеся в кошельке, являются единственным требованием для передачи эфира или токенов другим. Используя свои ключи, вы вносите изменения в регистр, используя свой закрытый ключ для подписания транзакции. Мы подробно рассмотрим это в следующем разделе.

Типы кошельков

Одним из способов отличить кошельки является то, как генерируются их ключи.

Существует в первую очередь 2 типа генерации ключей для кошельков: детерминированная и недетерминированная. Они различаются по тому, связаны ли ключи друг с другом.

Недетерминированные кошельки имеют ключи, сгенерированные случайным числом, и ключи НЕ связаны друг с другом.

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

Считается, что недетерминированные кошельки уступают своим детерминированным аналогам.

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

Семена представлены в виде списка английских слов (обычно 12), которые вы можете записать, чтобы восстановить свои ключи в случае, если вам это нужно. Это также «секретная фраза восстановления», которую вы видите в MetaMask. Его также иногда называют вашей «мнемоникой». Однако, если кто-то завладеет ими, он может немедленно получить доступ к вашему кошельку и делать всевозможные вещи с вашими активами. Вот почему совет заключается в том, чтобы никогда не делиться своей семенной фразой и даже не хранить ее в электронном виде.

Начальная фраза может быть удобна для экспорта и импорта кошельков, а также для легкой миграции всех ключей в различные приложения кошелька. Например, если у вас есть кошелек на MetaMask, вы все равно можете импортировать этот кошелек в мобильное приложение Rainbow или Argent, введя начальную фразу.

Наиболее продвинутой формой детерминированного кошелька является иерархический детерминированный (HD) кошелек, основанный на стандарте BIP-32 Биткойна. Ключи называются «иерархическими», потому что они представляют собой древовидную структуру. Родительский ключ может получить набор дочерних ключей, которые затем могут получить еще одну серию ключей внука.

HD-кошельки лучше, чем другие типы детерминированных кошельков, потому что:

  1. Древовидная структура может представлять собой организационную структуру. Филиалы могут рассматриваться как подгруппы или дочерние компании в корпорации. Это дает возможность соответствующим образом организовать бюджеты и платежи.
  2. Открытые ключи могут быть сгенерированы без доступа к соответствующим закрытым ключам

Однако начальная фраза, представляющая собой список английских слов, является лишь одним из способов кодирования закрытого ключа. В настоящее время он широко используется, потому что другие типы представлений (например, HEX-строка) могут привести к более высокой частоте ошибок при записи на бумаге. На высоком уровне мнемонические слова генерируются из процесса, определенного BIP-39, который включает в себя начало с некоторого источника энтропии, преобразование этих данных, а затем сопоставление их со списком слов.

Существует набор отраслевых стандартов (таких как мнемонические кодовые слова и КОШЕЛЬКИ HD), которые влияют на реализацию кошельков и приводят к совместимости в кошельках. Благодаря этим стандартам вы можете легко экспортировать и импортировать кошельки из и в различные приложения для кошельков.

Форм-факторы

Кошельки могут выпускаться в нескольких различных формах. Чаще всего:

  • Рабочий стол: MyCrypto, Безопасный рабочий стол Gnosis
  • Браузер: Метамаска, MyEtherWallet, Web3Auth
  • Мобильный: Argent, Кошелек Coinbase, MetaMask мобильный, Радуга, Трастовый кошелек
  • Аппаратные кошельки (безопасный метод доступа к вашим средствам в Интернете, поскольку они не раскрывают закрытый ключ при подписании транзакций): Ledger, Trezor, KeepKey, Bitbox, Lattice1

Кошельки смарт-контрактов

Некоторые кошельки, такие как Argent и Gnosis Safe, являются кошельками смарт-контрактов. Они похожи на «Контрактные счета», описанные в самом начале этой статьи.

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

Вот пример кода очень простого кошелька смарт-контрактов, основанный на учебнике от Block Explorer:

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

// From Block Explorer's tutorial video: https://www.youtube.com/watch?v=UoGzV094jhE


// A smart contract acts like a wallet that can receive funds
contract EtherWallet {
    // a state variable for the owner. Only the owner will be able to withdraw funds from the wallet
    address payable public owner;

    constructor() {
        // the constructor is called 1 time: when the contract is deployed. Run any initialization code here
        owner = payable(msg.sender); // msg is a global variable. msg.sender gives us the address that is deploying this contract. By default, msg.sender is not payable so we cast it to payable

    }

    // receive ether coming in (a default function). Doesn't require the function keyword
    receive() external payable {} // invoked when ether is sent to the contract

    function withdraw(uint _amount) external {
        // put a check in place ot make sure the sender is the owner
        require(msg.sender == owner, "Only the owner can call this method");
        // transfer funds to sender
        payable(msg.sender).transfer(_amount);
    }

    // query the balance of the smart contract. External means this function can be involved by external parties. View means it is read-only
    function getBalance() external view returns (uint) {
        return address(this).balance;
    }
 }

Введите метамаску

Главный герой, которого мы так долго ждали. Маленькая геометрическая лисица, которая говорит нам, что «децентрализованная сеть ждет» — та, с которой многие из нас имеют отношения любви-ненависти.

MetaMask — это не-кастодиальный (или самокастиальный) криптовалютный кошелек. Это означает, что ни один сторонний «хранитель» не владеет вашими закрытыми ключами. Это позволяет вам жить в духе «не ваши ключи, не ваши токены». MetaMask не хранит никаких данных о кошельке, и все, что вы видите, находится в вашем браузере или мобильном приложении на местном уровне.

MetaMask использует 3 различных типа «секретов» для защиты вашего кошелька:

  1. Секретная фраза восстановления: Как отмечалось ранее, эта фраза является математически сгенерированной мнемоникой, основанной на вашем главном ключе. Эти слова, при размещении в определенном порядке, могут восстановить все учетные записи в вашем кошельке. Помните, что в одном кошельке может быть много учетных записей. Ваш кошелек — это связка ключей, которая содержит много открытых / закрытых ключей. Каждая пара ключей соответствует счету в кошельке. Когда MetaMask восстанавливает ваш кошелек из секретной фразы восстановления, сначала он может создать только первую учетную запись, но дополнительные учетные записи могут быть воссозданы в том же порядке, потому что кошелек детерминирован.
  2. Закрытые ключи: Каждая учетная запись имеет свой собственный открытый и закрытый ключ. Обычно учетные записи видны с их адресом, также известным как открытый ключ. Отдельные закрытые ключи можно использовать для импорта этой конкретной учетной записи (и ТОЛЬКО этой) в любое другое приложение кошелька.
  3. Пароль: используется для защиты самого приложения кошелька. Вы используете его для разблокировки только приложения. FaceID работает для мобильных устройств.

Coinbase vs. MetaMask

Стоит отметить, что Coinbase (основное приложение) является кастодиальным кошельком, поэтому разница в том, что вместо того, чтобы держать свои собственные закрытые ключи, Coinbase фактически хранит их для вас. Таким образом, вы не можете напрямую экспортировать свой кошелек Coinbase и импортировать его в другой кошелек, такой как MetaMask. Тем не менее, вы можете сделать это из кошелька Rainbow в MetaMask (и наоборот), потому что оба не являются кастодиальными.

Примечание: Coinbase также предлагает некастодиальное решение с кошельком Coinbase.

Как MetaMask подключается к блокчейн-сети

Кошельки, такие как MetaMask, также могут быть вашими воротами в публичные блокчейн-сети. Давайте вспомним о работе веб-браузера: программного обеспечения, которое позволяет нам получить доступ к Всемирной паутине. Когда пользователь запрашивает веб-страницу, введя ее URL-адрес, браузер извлекает содержимое с веб-сервера, чтобы отобразить его на устройстве пользователя.

Узлы блокчейна постоянно синхронизируют состояние сети и наблюдают за историей транзакций. Точно так же MetaMask позволяет вам получить доступ к сети блокчейн, потому что ваш текущий браузер не может этого сделать.

MetaMask подключает вас к публичным блокчейн-сетям и позволяет считывать и записывать данные из/в него. В то время как вы указываете браузеру на URL-адрес, вы указываете MetaMask на конечные точки RPC для доступа к публичным узлам блокчейна.

Для связи с узлами блокчейна существует стандарт под названием JSON-RPC, который позволяет запрашивать и отправлять данные из них. Эти запросы через JSON-RPC могут быть сделаны по протоколу HTTP или WebSocket.

Как MetaMask обнаруживает эти узлы для отправки запросов? Он использует Infura, который предоставляет высокодоступный, масштабируемый API блокчейна, который обеспечивает доступ к сети блокчейн.

Срок действия сделки

Блокчейн — это распределенный реестр, похожий на отображение счетов и их активов. Представьте себе электронную таблицу, где каждая строка является учетной записью (адрес ethereum), а каждый столбец является криптоактивом, который он содержит.

Скажем, Алиса хочет отправить Бобу 1 Эфир. Алиса открывает свой кошелек MetaMask, вводит адрес кошелька Боба и нажимает кнопку «Отправить». Когда она нажимает отправить, она также использует свои закрытые ключи для подписания транзакции.

Эта транзакция поступает в локальный пул памяти (mempool), который затем перехватывается ближайшим узлом в сети Ethereum.

Транзакция Алисы будет иметь приоритет на основе ее газовых настроек при инициировании этой транзакции. Транзакция распространяется по узлам в сети. После обработки транзакции узлы также выполнят проверку того, что у Алисы достаточно эфира, чтобы потратить, прежде чем выполнять передачу.

Наконец, перевод является просто модификацией реестра, вычитая 1 ETH из баланса Алисы и увеличивая 1 ETH на счете Боба.

Основные функции

Давайте закончим списком основных функций MetaMask — обратите внимание, что многие из них связаны или вращаются вокруг управления ключами:

  1. Управление учетными записями (создание, импорт и экспорт учетных записей, подключение к аппаратному кошельку)
  2. Подключение к публичным блокчейн-сетям
  3. Подписывать транзакции (переводы, взаимодействия смарт-контрактов), позволяющие пользователям определять цену газа для каждой транзакции
  4. Купить криптовалюту с фиатом (используя MoonPay, Transak, Wyre)
  5. Своп токенов
  6. Показать активы (токены ERC20, NFT)
  7. Показать активность (историю транзакций)
  8. Подключение с помощью dApps

Стандарты кошельков постоянно развиваются, как и MetaMask. Мы можем начать видеть больше попыток таких функций, как кошельки социального восстановления, многофакторная аутентификация для повышения безопасности и новый пользовательский опыт, ставший возможным благодаря внедрению функциональности в сам MetaMask, когда он подключен к dApp.

Есть много возможностей для инноваций в UX кошелька, взаимодействии dApp и фронтах безопасности. Несмотря на дорогу, проложенную MetaMask, работа над кошельками далека от завершения. Например, мы еще не совсем поняли, как подписывать транзакции на мобильном телефоне. Благодаря отраслевым стандартам кошельки могут быть компонуемыми и перестроенными в соответствии с потребностями пользователей и приложений.

Можно утверждать, что кошельки похожи на концепции web2, такие как цифровая идентификация / паспорт, банковский счет, браузер и многое другое. Это может быть все, или это может быть что-то другое. Мы только начали царапать поверхность — пространство дизайна огромно.

Спасибо, что прочитали! Если вы хотите продолжить разговор и увидеть больше подобных вещей, вы можете найти меня в Twitter.

Источники

Источник