Работает! Браузерный Ethereum-кошелек MetaMask запустил публичное бета-тестирование своего мобильного приложения. Оно позволяет управлять криптоактивами, отправлять пользователям ETH и токены стандартов ERC-20 и ERC-721 с помощью ENS-имен, и взаимодействовать с децентрализованными приложениями (dApps). #новость https://forklog.com/?p=77491
Всем привет! Сегодня у нас на сайте очень занятное обновление, а именно - авторизация через Metamask, то есть по сути через криптосеть Ethereum. И здесь есть парочка неожиданных моментов. 1. Вам не надо покупать крипту. Вообще никак. Вы просто ставите себе в браузер расширение Metamask, за минуту заводите в нем свой аккаунт и используете его для регистрации/авторизации на сайте. 2. Мгновенное взаимодействие. Многие слышали, что пропускная способность сети Этериум ограничена, транзакции часто зависают, и все это очень неудобно. Здесь этого нет. Все взаимодействие построено на чистом шифровании, без записи в блокчейн, просто на проверке цифровых подписей и идентификации отправителя подписанного сообщения. Как результат - все работает очень быстро, как будто это и вовсе не этериум. 3. Крипто-аккаунт в приоритете. Сама фишка в том, что теперь для регистрации не требуется указывать ни логин, ни емейл, ни пароль, ничего. Вы просто регистрируетесь через эфир и в дальнейшем ваша идентификация происходит через кошелек. А если у вас уже есть аккаунт здесь, авторизуйтесь и в личном кабинете увидите кнопку, чтобы привязать к аккаунт этериум-адрес. 4. Несколько аккаунтов на сайт. Конкретно здесь это не особо имеет смысл, но если вы разрабатываете сайт, на котором используется несколько уровней доступа, вам скорее всего захочется иметь возможность быстро переключаться между аккаунтами, при этом не придумывая логины, емейлы и пароли. В метамаске можно легко создавать сколько угодно адресов и использовать их для создания новых аккаунтов. 5. Один аккаунт для входа на несколько сайтов. Так как механизм авторизации един (Этериум - он везде Этериум), то один такой аккаунт можно использовать на любом призма-сайте. При всем при том, это еще и полноценный Этериум-кошелек. Вы можете любым доступным способом пополнять кошелек, переводить между своими счетами, отправлять средства другим участникам сети и получать от них. Как все это работает, смотрите в коротеньком видео.
Статья пока в режиме заметки и больше содержит информации о проблемах, нежели о их решениях, но так как информации очень много по ходу встречается, я буду записывать отдельные важные моменты, а по мере нахождения ответов на вопросы, буду их сюда дописывать. Различные режимы синхронизации Ethereum. Есть три режима: fast, full и light. По умолчанию используется режим fast. Считается, что в этом режиме синхронизация выполняется за считанные часы (а то и того меньше). Но я пока что еще считаю, что это самый бесполезный режим. В этом режиме не загружается ни история транзакций, ни балансы кошельков, ни коды смартконтрактов, то есть по сути ничего нужного. На сколько я понимаю, Пример запуска geth в докере Важно! --rpccorsdomain "*" - не секурно. Если так делаете, то закрывайте порт 8545 файерволом, порт не должен быть доступен извне просто так. Режим full самый полезный, но и самый затратный. Сервер надо минимум с 16Gb оперативы. Дискового пространства надо сотни гигов (скажу точно, когда у меня синхронизация завершится), при чем нужны именно SSD, обычные диски не справятся с количеством операций в секунду. И первичная синхронизация занимает не один день (я скажу сколько у меня займет, если сумеет синхронизироваться). Режим light самый сбалансированный, потому как и синхронизация быстрее выполняется, и ресурсов кушает меньше, и есть балансы и контракты. Но одновременно это и самый глючный режим. Жалоб на невозможность синхронизации море. У меня и у самого постоянно ошибка лезет. Что интересно, однажды у меня получилось синхронизироваться, но сейчас вот никак. Посмотрим в каком режиме быстрее получится запуститься. Локальные запросы к geth через сокет. Случайно встретил на просторах и кажется интересная фишка. Вместо запроса можно напрямую слать запросы в сокет. Проблема получения списка транзакций. Что интересно, в эфире "из коробки" не предусмотрена функция получения списка транзакций. Ни просто списка, ни по адресу. То есть нельзя взять какой-то адрес и получить по нему всю историю транзакций. Надо делать перебор всех блоков, в них брать список транзакций и в свою базу данных заносить, чтобы в дальнейшем уже делать выборки. https://github.com/ethereum/go-ethereum/issues/1897 eth.getBalance() всегда возвращает 0 Очень неприятная бага, из-за которой пришлось перезапускать синхронизацию с нуля (хотя уже более 7 млн блоков синхронизировалось). Прикол в том, что хотя статус синхронизации показывает обновляемые блоки и т.п., можно информацию по блокам получить и т.п., но при запросе балансов всегда 0 возвращает. Раскопал подробнее и оказалось, что eth.getBlock("latest") возвращает нулевой блок. Есть теория, что такая бага возникает когда стартуешь запуск без единого аккаунта, то есть как в оффдокументации сказано перед запуском сначала надо создать новый аккаунт, например с помощью команды geth account new. Запуск geth в режиме службы на ubuntu 1. Создаем файл /root/geth.service с содержимым (параметры вызова geth конечно же можно менять). Важно: права файла не должны быть на исполнение, иначе служба не запустится. 2. Проверяем файл на профпригодность. При этом я получаю сообщение Attempted to remove disk file system, and we can't allow that., но это вроде как совсем не критично. Других сообщений об ошибках не должно быть. 3. Регистрируем службу. В интернете много примеров не с абсолютным путем, но работает именно так. 4. Запускаем службу. А вот здесь абсолютный путь не пишется, потому что здесь используется имя службы, а не файла. 5. Проверяем статус службы. Должно быть Active: active (running). Подключение geth консоли rpcapi можно запускать в том числе с модулем admin, но это очень не секурно. При этом вам может понадобиться немного админской информации. Для этого можно подключиться к этериуму непосредственно в терминале на сервере, выполнив команду geth attach. Уточню, что такой вариант сработает когда geth уже выполняется и имеется активный geth-сокет. В противном случае вы получите ошибку. А если все ОК, то вы получите приветственное сообщение и можно продолжить работу. Внутри будет обычная javascript-среда с уже подключенным web3 со всеми модулями, в том числе admin. Корневой объект - web3. Можете в консоли просто набрать web3 и нажать Enter, увидите структуру этого объекта. А можете непосредственно обращаться к модулям eth, admin, debug и т.п. UPD 20.08.2019: Все полная синхронизация успешно выполнена. Что удалось выяснить? 1. Хотя и говорится много где, что 16Gb оперативы должно хватать, по факту этого не хватало. То есть запускалось все, некоторое время работало, а потом ломалось. Особенно быстро geth разваливался, когда начинали поступать внешние запросы на ноду через RPC-API. В итоге поднял конфигурацию до 32Gb 8 core и все стало работать стабильно (гнал очень активно многие тысячи запросов на ноду, все работало ОК). В итоге сервер на digitalocean.com стоит $160 + $100 за хранилище 1000Gb (сейчас 8 300 000+ блоков занимают на диске 590Gb), итого $260 в месяц + 20% налога. 2. Синхронизация выполнялась примерно месяц (плюс-минус). Но сейчас блоки новые появляются секунда-в-секунду (ориентируясь по etherscan).
А я написал комментарий здесь: https://prisma-cms.github.io