Использование кошелька Монеро через Телеграм бот

в 14:25, , рубрики: aiogram, github, Monero, python, wallet

Так как не знаю никакие Монеро кошельки на мобильном устройстве, а в Trust Wallet и Cryptobot попросту нет этой монеты, решил сделать свою реализацию, которую уже на удивление можно считать MVP и свободно принимать и переводить XMR.

Для начала, скачиваем Monero CLI Wallet, для того чтобы взаимодействовать с блокчейном:

https://www.getmonero.org/downloads/

Распаковываем архив, первым делом запускаем сам кошелек через:

./monero-wallet-cli

Создаем название файла кошелька и пароль. Кошелек готов.

Далее, скачиваем блокчейн, целиком или pruned версию (200-100гб).

Можно установить как службу через systemd, либо на фон через nohup.

Пример скачивания блокчейна целиком(>150гб)

nohup ./monerod --rpc-bind-ip 0.0.0.0 --rpc-bind-port 18081 --confirm-external-bind &

Pruned версия: (<100гб)

nohup ./monerod --rpc-bind-ip 0.0.0.0 --rpc-bind-port 18081 --confirm-external-bind --prune-blocks &

Биндите RPC на 0.0.0.0 чтобы ваш нод был доступен из интернета другим пользователям.

Биндите RPC на 127.0.0.1 для доступа только из локальной сети для бота. (убрать --confirm-external-bind)

Локальный нод готов.

Далее, запускаем ./monero-wallet-rpc для операций с кошельком.

nohup ./monero-wallet-rpc --rpc-bind-ip 127.0.0.1 --rpc-bind-port 18083 --wallet-file {path_to_wallet_file} --password "habrahabr" --daemon-host 127.0.0.1:18081 --trusted-daemon --disable-rpc-login &

Готово, теперь можно использовать методы из RPC документации: https://www.getmonero.org/resources/developer-guides/wallet-rpc.html

В том числе: создание адресов, перевод средств и экспорт транзакций. Используя 127.0.0.1:18083/json_rpc.

К примеру, посмотрим баланс кошелька с помощью python requests:

url = "http://127.0.0.1:18083/json_rpc"
headers = { 'content-type': 'application/json' }

payload = json.dumps({
"jsonrpc":"2.0",
"id":"0",
"method":"get_balance",
"params":{
"account_index":0,
"address_indices":[0]
}
})
response = requests.post(url, data=payload, headers=headers)

print(response.json())

RPC возвращает баланс в виде атомарных единиц, чтобы перевести в привычный вид XMR:
format(atomic_units / (10**12), ".12f")

И обратно, к примеру, для отправки средств: (Функция transfer, соответственно)
int(float(xmr_amount) * (10**12))

Реализация функций: https://t.me/wallet_xmrbot

Исходный код: https://github.com/amlkyc/xmrbot

aiogram 3

aiogram 3

Автор: sea256

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js