Перевод RPC-Pay

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 19 янв 2020.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    720
    Симпатии:
    222
    1.JPG

    Зачем создавать публичный узел Monero? Это требует вложения средств, но не приносит дохода, по крайней мере напрямую. Постоянная и насущная проблема: как мотивировать пользователей к созданию большего количества узлов? RPC-Pay даёт такую мотивацию и не только её. Эта новая функция также обеспечивает возможность использования хешей, получаемых при майнинге Monero (простых хешей), для оплаты удалённых вызовов процедур (RPC) с любого сервера, поддерживающего RPC-Pay, каковым, например, является узел Monero. Хеши, получаемые в качестве оплаты, используются сервером для извлечения дохода. В случае с алгоритмом RandomX хеши, полученные в ходе майнинга, могут быть вычислены самыми распространёнными CPU, а выплата в хешах (а не в Monero) означает лишь то, что RPC-Pay не обременяет сеть Monero и не оставляет записей. Благодаря RPC-Pay такие хеши становятся новой скрытой наименьшей расчётной единицей в мире Monero.

    RPC

    Прежде чем перейти непосредственно к RPC-Pay, будет полезно глубже понять концепцию RPC. RPC является процессом запроса данных и вычислений одной программой (клиентом) у другой программы (сервера). Сервер может быть установлен на любой компьютер, подключённый к сети интернет. Запрос RPC подобен вызову подпрограммы в обычной программе, но отличается тем, что, в случае с RPC, подпрограмма выполняется на сервере. Специальное промежуточное программное обеспечение осуществляет передачу в сеть как запроса, так и ответа, поэтому программисту процесс представляется бесшовным. В течение ряда лет для реализации RPC использовались самые разные типы промежуточного программного обеспечения.

    Современное семейство интерфейсных программ RPC при формировании сообщений использует формат JSON (JavaScript Object Notation). Это стандартный текстовый формат обмена данными. Он основан на парах «имя-значение» и списке данных, устойчиво определяющих данные с возможностью расширения в читаемом человеком формате. JSON-шифрование является основным методом, используемым в рамках RPC концепции Monero.

    Monero уже использует RPC самыми различными способами. Например, стандартным демоном Monero, обеспечивающим большинство функций Monero, является monerod. При реализации RPC он играет роль программы, используемой со стороны сервера, и отвечает на вызовы самых разных функций, связанных с блокчейном. А программа monero-wallet-rpc, являющаяся частью стандартной установки Monero, выполняет серверные функции кошелька, будучи одновременно клиентом для сервера monerod. В случае с Monero вызовы RPC проводятся подобно тому, как браузер связывается с сетевым сервером. Данные передаются методом POST, а отправляемая в ответ информация обычно представлена в текстовом формате, как правило, это JSON. Если вас интересуют подробные примеры сообщений RPC, см. Пример 1 использования вызовов RPC Monero.

    Хеши, получаемые при майнинге

    Процесс майнинга, в случае с алгоритмом доказательства работы (PoW) RandomX, используемым Monero, начинается с выполнения псевдослучайной программы, то есть функции новых транзакций, нонса, адреса платежа и данных предшествующего блока. Выполнение случайной программы представляется простым делом для CPU, но очень сложно для ASIC. Результат затем подвергается криптографическому хешированию в 256-битное число. Если это число меньше указанного порогового значения, то новый блок считается вычисленным.

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

    В случае с RPC-Pay хеши вычисляются самим клиентом RPC или (более мощным) помощником клиента. После того как хеши вычислены, они передаются серверу. Каждый отправленный таким образом хеш считается платежом. Ничтожный процент хешей имеет фактическое значение для сервера — имеют ценность те хеши, которые представлены числом достаточно малым, чтобы закрыть блок. Такие хеши попадаются случайно среди множества хешей оплаты. Затем сервер проверяет все хеши на надёжность, но получает оплату, только когда получает и публикует успешный хеш, полученный при майнинге, в сети Monero.

    RPC-Pay

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

    Текущая версия Monero предусматривает команду monerod (вводимую непосредственно посредством командной строки monerod), напрямую связанную с RPC — rpc_payments. Эта команда служит для отображения в окошке консоли информации по платящим клиентам и их балансе. Следует отметить, что узел «забывает» о балансе клиента через шесть месяцев после того, как тот отключится от него.

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

    RPC-Pay работает анонимно. Большие балансы не поддерживаются, так как это потребовало бы совместного использования информации в целях резервирования или безопасности. Хеши, полученные в ходе майнинга и используемые для оплаты, анонимные, и их принадлежность невозможно отследить через блокчейн. Для того чтобы проследить баланс можно использовать идентификатор (ID) платежа, но в случае с небольшими суммами этот ID может регулярно меняться или не использоваться вовсе.

    Также важно было бы отметить недостатки текущей версии реализации RPC-Pay monerod/кошелька. Эта функция может оказаться слишком требовательной для клиентов, установленных на устройства малой мощности, мобильные устройства, например, которым приходится полагаться на помощь компьютеров при вычислении хешей. Кроме того, доход, получаемый сервером, случаен. Сервер получает оплату только в том случае, если принимает хеш, позволяющий вычислить блок, в то время как работа сервера должна быть непрерывной, так как ему приходится принимать и проверять регулярно передаваемые ему хеши. Наконец, сумма дохода сервера ограничена графиком майнинга Monero и будет довольно небольшой.

    Но RPC-Pay — это больше, чем просто выплата одних программ Monero другим программам Monero, так как любой сервер может использовать RPC-Pay для извлечения дохода. Программное обеспечение официального узла и кошелька Monero является открытым и может использоваться для создания инновационных приложений, или же другие приложения могут связываться с копиями monerod. Ключевая концепция попросту заключается в том, что сервер даёт свой адрес Monero клиентам, а клиенты используют его для создания хешей во время майнинга Monero, которые затем отправляются серверу в качестве оплаты. В Примере 3 показан один из вариантов исходного кода программного обеспечения RPC-Pay.

    Primo

    Примером нового применения RPC-Pay может служить проект Primo (repo.getmonero.org/selene/primo). Primo — это протокол и пакет программного обеспечения, поддерживающего доставку платного контента веб-сайтов. Протокол позволяет заменить нежелательную рекламу на веб-сайтах скрытым от глаз и ненавязчивым вычислением хешей. Посетитель веб-сайта, использующего Primo, не желающий видеть рекламу, может вместо этого выбрать вычисление хешей для майнинга Monero.

    Primo состоит из трёх компонентов. Первым является модуль primo-apache, используемый веб-сервером. Владелец веб-сайта устанавливает модуль и указывает, какой контент требует оплаты и в каком количестве. Веб-сервер связывается с monerod, который обрабатывает записи по выплате хешей и использует успешные для сбора дохода с майнинга. Вторым компонентом является расширение primo-firefox. Посетителю веб-сайта, желающему использовать RPC-Pay, придётся установить это расширение в его браузер Firefox. И, наконец, третьим компонентом является инструмент графического управления primo-control-center. С его помощью пользователь Firefox сможет указывать те сайты, которые получат оплату.

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

    Видимые перспективы

    Функция RPC-pay впервые была реализована в версии 0.15 Monero. Она совершенно новая. Со временем будут добавлены новые возможности, и по мере развития RPC-Pay будут развиваться и приложения. Primo является первым подобным внешним приложением, которое может послужить примером для других. Любой сервер в сети интернет, обеспечивающий данные или производящий вычисления для клиентов, является кандидатом на использование RPC-Pay для извлечения выгоды. Используя RandomX в качестве алгоритма доказательства работы Monero и новую версию 0.15, любой компьютер может вычислять хеши и получать платежи посредством RPC-Pay. Сейчас самое время для появления такой новой функции, и впереди нас ещё ждёт множество невероятных разработок.

    Как начать

    Пример 1. RPC Monero

    При помощи утилиты командной строки curl (curl.haxx.se) можно отправлять вызовы RPC либо своей собственной копии monerod, либо на публичный сервер. Например, если вы захотите узнать, сколько блоков в блокчейне Monero, вы сможете использовать команду get_block_count. Чтобы получить эту информацию с публичного сервера Monero World, будет необходимо установить curl и набрать в командной строке следующее:
    Код:
    curl -X POST uwillrunanodesoon.moneroworld.com:18089/json_rpc -H 'Content-Type:application/json' --data "{"jsonrpc":"2.0","id":"0","method":"get_block_count"}"
    Вы получите ответ, который будет выглядеть подобным образом:
    Код:
    { "id": "0", "jsonrpc": "2.0", "result": { "count": 1986258, "status": "OK", "untrusted": false } }
    Количество блоков на момент этого ответа составляло 1 986 258.
    Если вы используете собственную копию monerod в стандартной конфигурации, вы можете получить ту же информацию, используя следующую (похожую) команду на том же компьютере:
    Код:
    curl -X POST http:// 127.0.0.1:18081/json_rpc -H 'Content-Type:application/json' --data "{"jsonrpc":"2.0","id":"0","method":"get_block_count"}"
    Больше информации по RPC интерфейсу monerod можно получить по ссылке: web.getmonero.org/resources/developer-guides/daemon-rpc.html. А дополнительную информацию по RPC интерфейсу можно найти, посетив web.getmonero.org/resources/developer-guides/wallet-rpc.html.

    Пример 2. Настройка демона и кошелька

    Чтобы настроить демон monerod для работы с RPC-Pay, необходимо запустить его, используя следующие опции:
    Код:
    monerod --rpc-payment-address 4xxxxxx --rpc-payment-credits 250 --rpc-payment-difficulty 1000
    Платёжный адрес является стандартным платёжным адресом Monero, на который будут приниматься платежи всякий раз, когда выплачиваемый хеш, получаемый в процессе майнинга, будет являться хешем создания нового блока. Значения rpc-payment-credits и payment-difficulty работают вместе, поэтому клиент получает отношение затраты/сложность для каждого передаваемого хеша, получаемого в процессе майнинга. Эти примеры, которые вы можете адаптировать под собственные нужды, дают отношение 250/1000 = 0,25 на хеш. Теперь можно запустить кошелёк:
    Код:
    monero-wallet-cli
    Как только кошелёк будет запущен, команда start_mining_for_rpc инициирует процесс RPC-Pay. Поступления можно отслеживать, используя команду rpc_payment_info. Целевым значением поступлений является количество поступлений, которое кошелёк намерен получить. После того как это значение будет достигнуто, процесс майнинга должен быть остановлен. Количество поступлений может быть задано командой, подобной той, что используется CLI-кошельком:
    Код:
    set credits-target 50000
    Значение auto-mine-for-rpc-payment-threshold является минимальной скоростью поступлений, с которой кошелёк будет осуществлять майнинг. Если сервер работает с меньшей скоростью, кошелёк не будет отправлять хеши. Данное пороговое значение может быть задано командой, подобной той, что используется CLI-кошельком:
    Код:
    set auto-mine-for-rpc-payment-threshold 0.25
    Пример 3. Написание кода

    Код RPC-Pay может быть написан на языке C (или любом другом языке) с использованием свободных библиотек передачи данных в сети. Ниже приводится пример того, как данные RPC-Pay на языке C могут передаваться monerod посредством curl. Это то же семейство curl, что использовалось для передачи текстовой информации в Окне 1. Curl является как библиотекой, так и утилитой командной строки. Код, приводимый ниже, представляет собой упрощённую версию функции call_monero(), используемой Primo и являющейся частью модуля primo-apache. Оригинальный код можно найти по ссылке: repo.getmonero.org/selene/primo/blob/master/webserver/apache/mod_primo.c.

    Источник: RPC-Pay Up Close

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.