Wallet Owner API v3
Owner API — это интерфейс, через который программное обеспечение управляет кошельком: создаёт его, читает балансы, собирает и финализирует переводы, проверяет доказательства. Для большинства интеграций это основная поверхность взаимодействия.
- Эндпоинт:
http://127.0.0.1:3420/v3/owner, запускается с помощьюepic-wallet owner_api - Протокол: JSON-RPC 2.0 поверх HTTP POST
- Учётные данные:
token, возвращаемыйopen_wallet, который принимает пароль кошелька - Шифрование: ECDH-хендшейк оборачивает каждый вызов после первого
Передавайте token внутри конверта в каждом методе, который его объявляет. Держите порт на loopback.
См. доступ к owner на кошельке.
Методы по назначению
Могут тратить средства
Can spend funds Эти семь методов собирают, завершают или отменяют переводы.
| Метод | Назначение |
|---|---|
init_send_tx() | Выбрать входы и собрать первый раунд слейта (slate) |
tx_lock_outputs() | Зарезервировать выбранные входы. Обязательно в последовательности ручной отправки. Принимает token, slate, participant_id и addr_to |
finalize_tx() | Завершить агрегированную подпись |
post_tx() | Транслировать в сеть |
issue_invoice_tx() | Создать платёжный запрос |
process_invoice_tx() | Профинансировать чужой платёжный запрос |
cancel_tx() | Отменить перевод и освободить зарезервированные выходы |
Деструктивные
Destructive Удаляет локальные данные кошелька.
| Метод | Эффект |
|---|---|
delete_wallet() | Удаляет кошелёк |
Раскрывают секрет
get_mnemonic() возвращает фразу восстановления.
Изменяют состояние кошелька
change_password() повторно шифрует сид. scan() перестраивает состояние выходов.
Только чтение
Read only Безопасно для всего, что вы разрешили бы читать ваш баланс.
accounts(), retrieve_outputs(), retrieve_txs(), retrieve_summary_info(), node_height(), get_stored_tx(), get_public_address(), get_public_proof_address(), get_updater_messages().
Жизненный цикл кошелька
create_config(), create_wallet(), open_wallet(), close_wallet(), get_top_level_directory(), set_top_level_directory(), create_account_path(), set_active_account().
open_wallet возвращает токен, который требуется каждому другому вызову.
Доказательства
retrieve_payment_proof(), verify_payment_proof(), proof_address_from_onion_v3(), verify_slate_messages(). См. доказательства платежей.
Конфигурация и фоновые обновления
set_tor_config(), set_epicbox_config(), start_updater(), stop_updater().
Транспорт
Зашифрованное рукопожатие
Каждый вызов после init_secure_api передаётся внутри зашифрованного конверта. Параметры фиксированы и
объявлены в api/src/owner_rpc_s.rs:1453: AES-256 в режиме GCM, 12-байтовый nonce, 16-байтовый тег, добавляемый к
шифртексту, и пустые дополнительные аутентифицированные данные.
- Сгенерируйте пару ключей secp256k1 в своём клиенте.
- Вызовите
init_secure_api, передав сжатый публичный ключ в виде hex вecdh_pubkey. Кошелёк возвращает свой ключ в том же формате. - Умножьте публичную точку кошелька на ваш приватный скаляр и возьмите 32-байтовую x-координату.
Это и есть ключ AES-256 (
api/src/owner_rpc_s.rs:2433). - Сериализуйте нужный вызов как полный объект JSON-RPC запроса. Этот внутренний запрос и является
тем, что шифруется, и именно в нём находятся
tokenи параметры метода. - Зашифруйте его со свежим 12-байтовым nonce и закодируйте шифртекст с добавленным тегом в base64.
- Опубликуйте метод
encrypted_request_v3с двумя параметрами:nonceв виде hex иbody_encв виде строки base64. Конверт не содержит других полей (api/src/types.rs:59). - Ответ — это
encrypted_response_v3, несущий собственныеnonceиbody_enc. Расшифруйте тем же ключом, чтобы получить внутренний JSON-RPC ответ, который в свою очередь содержит конвертOkилиErr. open_wallet— первый вызов, который следует отправить через конверт. Он возвращает токен, который принимает каждый другой метод.
{"jsonrpc": "2.0", "id": 1, "method": "encrypted_request_v3", "params": {"nonce": "ef32...", "body_enc": "e0bcd..."}}
examples/python/epic_wallet.py реализует эту последовательность, включая второй разворот расшифрованного тела. Клиент
приведён полностью в разделе подключение и чтение.
Чтение выходов и транзакций
retrieve_outputs и retrieve_txs принимают limit, offset и sort_order.
InitTxArgs
Управляет выбором входов и структурой транзакции.
| Поле | Тип | Значение |
|---|---|---|
src_acct_name | string, optional | Аккаунт-источник. Null использует активный аккаунт |
amount | u64 | Сумма в freemen. 1 EPIC равен 100000000 |
minimum_confirmations | u64 | Подтверждения, необходимые для того, чтобы выход стал доступен к трате |
max_outputs | u32 | Максимальное количество выбираемых входов |
num_change_outputs | u32 | Количество создаваемых выходов сдачи |
selection_strategy_is_use_all | bool | True объединяет все доступные выходы; false выбирает минимум |
message | string, optional | Сообщение, зафиксированное в слейте |
target_slate_version | u16, optional | Версия слейта для вывода, 2 или 3 |
ttl_blocks | u64, optional | Срок действия в блоках. По умолчанию не задан |
payment_proof_recipient_address | string, optional | Запрашивает доказательство платежа |
estimate_only | bool, optional | Вычислить комиссию без резервирования |
send_args | object, optional | Назначение и транспорт для выполнения всего обмена в одном вызове |
Дополнительное поведение:
selection_strategy_is_use_all имеет последствия для приватности. Значение true объединяет ваши выходы в одну транзакцию,
что связывает их между собой для любого, кто анализирует цепочку. Значение false сохраняет их
раздельными ценой увеличения UTXO-множества в дальнейшем.
Доказательство платежа требует slate V3. payment_proof_recipient_address помещает поля доказательства в слейт (slate), и
только V3 их содержит. Доставка через epicbox конвертирует слейт в V2, поэтому перевод, отправленный
таким способом, завершается без доказательства. Сначала выберите транспорт: выбирайте транспорт
соответственно.
ttl_blocks не освобождает выходы по истечении срока. См. выходы и блокировка.
src_acct_name задаёт исходный аккаунт для одного вызова. Метка, которую accounts не возвращает, разрешается
в активный аккаунт (libwallet/src/api_impl/owner.rs:383). См. аккаунты.
send_args выполняет обмен внутри вызова. Он доставляет слейт, затем финализирует и публикует, если
это было запрошено, поэтому вызов блокируется на всё время, пока отвечает контрагент.
При send_args.method, установленном в epicbox, вызов возвращает слейт первого раунда, как только он
опубликован на релей и входы заблокированы (api/src/owner.rs:761). finalize и post_tx применяются к путям http и keybase.
На пути epicbox собственная подписка кошелька финализирует и публикует транзакцию, когда приходит
ответ контрагента, — именно там и происходит ожидание мемпула.
Комиссии
Комиссия зависит от формы транзакции, а не от спроса в сети:
fee = max(4 × outputs + kernels − inputs, 1) × 0.001 EPIC
Типичный перевод с двумя входами (inputs), двумя выходами (outputs) и одним ядром (kernel) стоит 700,000 freemen, то есть 0.007 EPIC. Поскольку базовая комиссия кошельком не задаётся, рынка комиссий для торгов не существует.
Версия 2
Более ранний незашифрованный Owner API с 17 методами обслуживается тем же слушателем по адресу
/v2/owner. Его методы не требуют токена. Новые разработки следует ориентировать на v3, а слушатель
должен находиться на loopback.
Полный справочник методов
Десять методов. Рукопожатие, токен и метки аккаунтов.
Восемь методов. Балансы, выходы, история, адреса.
Семь методов. Те, что перемещают средства.
Четыре метода и транспорт, который их отбрасывает.
Четыре метода. Фраза восстановления, пароль, удаление и сканирование.
Четыре метода. Настройки релея и фоновое обновление.
Источник
api/src/owner_rpc_s.rsопределяет все методы v3, большинство — с примером JSON-запроса и ответа в комментарии к документацииapi/src/owner_rpc.rsдля более старой поверхности v2libwallet/src/api_impl/owner.rsдля реализации, лежащей в основе методовlibwallet/src/api_impl/types.rsдляInitTxArgsи связанных с нимcontroller/src/controller.rs:123для описания того, как слушатель и его промежуточное ПО соединены