Сборка Ledger Live из исходного кода + решение проблем с Tron
cemehbl4

@cemehbl4

Сборка Ledger Live из исходного кода + решение проблем с Tron
07.12.2022 19:45
Post earned 0.00 UFO

Проблема: компания Ledger зачем-то ввела ограничение на максимальную комиссию в 10 TRX, которую может потратить транзакция в блокчейне Tron, вместо того, чтобы дать свободу юзерам самим регулировать максимальную комиссию.

Работают транзакции следующим образом: при отправке токена TRC-20, самым популярным из которых является USDT, транзакция тратит единицы энергии, если энергии не хватает, то сжигаются монеты TRX. Калькулятор находится здесь https://tronstation.io/calculator. 1 TRX = 2 380 energy. Если у аккаунта нет энергии вообще, то одна транзакция USDT, которой на данный момент нужно ~30000 единиц энергии, должна сжечь ~12.5 TRX. Ранее такие транзакции тратили 2-4-6-8 TRX, не больше, и проблемы не было. Но когда комиссия стала выше 10 TRX, транзакции перестали выполняться с ошибкой "OUT OF ENERGY" из-за выставленного ограничения в 10 монет, при этом за неудачную транзакцию пользователь заплатит эту комиссию.

Вместо исправления очевидного косяка, компания написала статью, в которой предлагает пользователям:

1) Заморозить TRX для получения энергии, а это на минуточку 1300 TRX на одну транзакцию в USDT, при этом с замороженным троном ничего нельзя сделать в течение трех дней

2) Подождать снижения комиссий :)

3) Воспользоваться обозревателем Tronscan, который имеет функцию подключения аппаратного кошелька и не имеет ограничения в 10 TRX

Из всех вариантов третий является единственным адекватным, за исключением того, что Tronscan не умеет работать со вторым, третьим и далее аккаунтами Ledger. То есть, если вы используете дополнительные счета, то вариантов нет вообще, о чем компания Ledger предпочла умолчать.

Проблема поменьше: Ledger Live не даст вам отправить USDT на аккаунт, который не актирвирован в блокчейне Tron. Самим протоколом это не запрещено, и такие транзакции прекрасно работают. Вместо устранения проблемы, как и в первом случае самими же созданной, Ledger предлагает отправлять 0.1 TRX на адрес неактивированного аккаунта, то есть активировать чужой аккаунт из своего кармана.

В общем, я решил пофиксить эту чушь и поделиться с сообществом. Здесь можно скачать готовые файлы под Windows, Linux, MacOS и Android https://github.com/e4p1k0/ledger-live/releases/tag/v2.50.0

Сам фикс состоит в измении значения fee_limit и удалении кода, который не давал подписать транзакцию на неактивированный аккаунт https://github.com/e4p1k0/ledger-live/commit/35b9b989561566f5b30f00fa75c37e9be66bcac9. Как видите, все очень просто.

Ну а ниже приведу инструкции, как можно это сделать самому, чтобы не приходилось доверять чуваку из интернета :) Вся сложность тут не в самой сборке, а в установке необходимых инструментов.

Windows

Открываем Power Shell от администратора и устанавливаем необходимые зависимости.

1. Устанавливаем пакетный менеджер Chocolatey

Копируем команду установки в консоль отсюда:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

2. Устанавливаем Ruby on Rails и Git

choco install ruby git -y

3. Устанавливаем Node.js

Переходим сюда и скачиваем node-v16.18.1-x64.msi. В диалоге установки ставим галку "Automatically install the necessary tools", остальное не меняем. После установки появится окно командной строки, в нем нажимаем пробел, откроется окно Power Shell и начнется долгая установка зависимостей для корректной работы Node.js, просто ждите, по окончании установки окно Power Shell попросит нажать Enter.

4. Устанавливаем pnpm

Копируем команду установки в консоль отсюда:

iwr https://get.pnpm.io/install.ps1 -useb | iex

5. Устанавливаем Bundler

Закрываем окно Power Shell и снова запускаем от администратора.

gem install bundler

6. Собираем Ledger Live

Закрываем окно Power Shell и снова запускаем, но уже без прав администратора.


# устанавливаем node-gyp
npm install -g node-gyp

# клонируем официальный репозиторий Ledger Live
git clone https://github.com/LedgerHQ/ledger-live

# переходим в папку с репозиторием
cd .\ledger-live\

# вносим необходимые измения в код, согласно коммита
# https://github.com/e4p1k0/ledger-live/commit/35b9b989561566f5b30f00fa75c37e9be66bcac9
# fee_limit: 100000000 - это 100 TRX
# красным выделены удаляемые строки из кода
notepad libs/ledger-live-common/src/api/Tron.ts
notepad libs/ledger-live-common/src/families/tron/bridge/js.ts

# собираем
pnpm i
pnpm build:lld:deps
pnpm desktop build

Всё! Готовый файл будет находиться по пути C:\Users\ВАШ_ЮЗЕРНЕЙМ\ledger-live\apps\ledger-live-desktop\dist\

Linux

Делаю, как обычно, на Ubuntu 20.04.


# устанавливаем Git, Bundler
sudo apt update
sudo apt install git bundler

# устанавливаем nvm
# https://github.com/nvm-sh/nvm#install--update-script
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

# устанавливаем Node.js
nvm install v16

# устанавливаем pnpm
npm install -g pnpm

# клонируем официальный репозиторий Ledger Live
git clone https://github.com/LedgerHQ/ledger-live

# переходим в папку с репозиторием
cd ledger-live

# вносим необходимые измения в код, согласно коммита
# https://github.com/e4p1k0/ledger-live/commit/35b9b989561566f5b30f00fa75c37e9be66bcac9
# fee_limit: 100000000 - это 100 TRX
# красным выделены удаляемые строки из кода
nano libs/ledger-live-common/src/api/Tron.ts
nano libs/ledger-live-common/src/families/tron/bridge/js.ts
# поиск необходимых значений в редакторе nano производится сочетанием клавиш ctrl+W
# сохранить изменения: последовательно нажимаем ctrl+X, Y, Enter

# собираем
pnpm i
pnpm build:lld:deps
pnpm desktop build

Всё! Готовый файл будет находиться по пути apps/ledger-live-desktop/dist/

Android

Собираем на Linux. Сначала делается всё точно так же, как и в инструкции выше, до команды pnpm i включительно.


...
pnpm i

# устанавливаем JDK, CMake и Android SDK
sudo apt install openjdk-11-jdk-headless cmake android-sdk

# скачиваем Android Studio command line tools для Linux
# по ссылке со страницы https://developer.android.com/studio
wget https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip

# распаковываем и устанавливаем command line tools, добавляем
# необходимые переменные окружения для корректной работы Android SDK
unzip commandlinetools-linux-9123335_latest.zip
export ANDROID_HOME="/usr/lib/android-sdk/"
sudo mkdir -p "$ANDROID_HOME/cmdline-tools/latest"
sudo mv cmdline-tools/* "$ANDROID_HOME/cmdline-tools/latest/"
export PATH="${PATH}:${ANDROID_HOME}tools/:${ANDROID_HOME}platform-tools/"
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
sudo chown $USER:$USER $ANDROID_HOME -R

# принимаем лицензионное соглашение Android SDK
yes | sdkmanager --licenses

# дополнительные настройки для корректной работы NodeJS
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
export NODE_OPTIONS="--max-old-space-size=8192"
# вместо 8192 установите объем доступной оперативной памяти кратно 1024

pnpm build:llm:android

Готовые apk файлы будут находиться по пути apps/ledger-live-mobile/android/app/build/outputs/apk/stagingRelease/

macOS

1. Устанавливаем пакетный менеджер Homebrew

Открываем терминал и копируем команду установки отсюда:


/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# во время установки нужно будет пару раз ввести пароль

2. Устанавливаем Xcode

Сделать это можно либо через AppStore, либо скачать отсюда пакет под версию вашей операционной системы. После установки необходимо ввести еще пару команд в терминал:


sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept

3. Устанавливаем Git, Ruby, Bundler, NodeJS и pnpm


brew install git nvm ruby
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"

[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm"

nvm install v16
npm install -g pnpm
sudo gem install bundler

4. Собираем Ledger Live


# клонируем официальный репозиторий Ledger Live
git clone https://github.com/LedgerHQ/ledger-live

# переходим в папку с репозиторием
cd ledger-live

# вносим необходимые измения в код, согласно коммита
# https://github.com/e4p1k0/ledger-live/commit/35b9b989561566f5b30f00fa75c37e9be66bcac9
# fee_limit: 100000000 - это 100 TRX
# красным выделены удаляемые строки из кода
nano libs/ledger-live-common/src/api/Tron.ts
nano libs/ledger-live-common/src/families/tron/bridge/js.ts
# поиск необходимых значений в редакторе nano производится сочетанием клавиш ctrl+W
# сохранить изменения: последовательно нажимаем ctrl+X, Y, Enter

# собираем
pnpm i
pnpm build:lld:deps
pnpm desktop build

# переносим готовый dmg в папку с загрузками и удаляем исходный код
cd ..

cp ledger-live/apps/ledger-live-desktop/dist/ledger-live-desktop-2.50.0-mac.dmg ~/Downloads/

rm -rf ledger-live

Если остались вопросы, милости прошу в телеграм https://t.me/cemehbl4_chat или в коментарии. Спасибо за внимание:)

Post earned 0.00 UFO

Post earned 0.00 UFO

Комментарии

Comments: