Загрузить HD (иерархический детерминированный) кошелек

Я пытаюсь найти способ программно генерировать адреса Ethereum на основе начального семени, а затем извлекать любые средства, которые попадают на эти адреса.

Вот что я пробовал:

  • Сгенерировал мнемонику из 24 слов и семя, используяBitcoin::Trezor::Mnemonic.generate
  • Передал его в digix-gethHD Vault для генерации адреса: 0xf2D5286B51a8a3326CBC007477435EeC47722228 .
  • Отправил в него 3 эфира с помощью крана Ринкеби
  • Загрузил кошелек на MyEtherWallet.com, используя начальный и исходный путь m/0'/0'/0'/0 (тот же самый, который digix-eth использует по умолчанию), но баланс отображается как 0. (этот гем кажется просто используйте денежное дерево внизу)
  • Я также пытался использовать путь деривации, m/44'/60'/0'/0чтобы соответствовать Trezor и settings chain_id = 4, но не повезло. Адреса кошельков, которые предлагает MyEtherWallet, не совпадают с теми, которые генерирует библиотека Ruby.

На данный момент я не уверен, является ли неисправной библиотека Ruby, неисправен MyEtherWallet или я просто делаю что-то не так.

Что я могу попробовать извлечь 3 эфира сейчас?

Изменить: адреса, которые генерирует этот отдельный инструмент , совпадают с теми, которые генерирует MyEtherWallet. Так что, скорее всего, это ошибка библиотеки Ruby.

Ответы (1)

Мне удалось заставить это работать. digix-ethС этой вилкой ethдрагоценного камня определенно что-то не так . Я подозреваю, что это дополнение, которое он добавляет к мнемонике . Во всяком случае, вот как вы можете генерировать HD-адреса, используя начальное число:

require 'bitcoin'
require 'eth'

NODE_INDEX = 0    # An index corresponds to a unique Ethereum address.
MNEMONIC = '...'  # Generate this using `Bitcoin::Trezor::Mnemonic.generate`.

master = MoneyTree::Master.new(seed_hex: Bitcoin::Trezor::Mnemonic.to_seed(MNEMONIC))
node = master.node_for_path("m/44'/60'/0'/0/#{NODE_INDEX}")
key = Eth::Key.new(priv: node.private_key.to_hex)

puts key.to_address