Перейти к основному содержимому

Транспорты

Слейт (slate) должен пройти путь от одного кошелька к другому и обратно. Транспорт не зависит от криптографии, и результирующая транзакция одинакова вне зависимости от выбранного маршрута. Различаются операционные издержки, необходимость доступности получателя в момент отправки и сохранность всех полей слейта при передаче.

Методы отправки: http, file, self, keybase, emoji, epicbox. Слушатель принимает http, keybase или epicbox.

Сравнение

ТранспортПолучатель доступен при отправкеТребует доступный адресРаботает за NATВерсия слейта (Slate)Доказательства платежа
epicboxНе требуется, релей хранит слейтNoДаВсегда V2Не передаётся
httpТребуетсяДа, публичный URLNoСогласуется со слушателемПередаётся
fileНе требуетсяNoДаV3, если слейт использует поле V3Передаётся
emojiНе требуетсяNoДаV3, если слейт использует поле V3Передаётся
keybaseНе требуетсяИдентификатор KeybaseДаОтправляется без преобразованияПередаётся
selfТот же кошелёкNoДаn/an/a

Epicbox — единственный транспорт, не требующий доступности получателя в момент отправки, и единственный, который не сохраняет доказательство платежа. Именно эти два столбца определяют выбор в большинстве интеграций.

Столбец версии объясняет столбец доказательства. Доказательство платежа — это поле слейта V3. file и emoji сериализуют V3, как только слейт содержит payment_proof или ttl_cutoff_height (impls/src/adapters/file.rs:30 и impls/src/adapters/emoji.rs:1151). keybase сериализует слейт без преобразования версии, поэтому все поля сохраняются (impls/src/adapters/keybase.rs:304). http запрашивает у слушателя поддерживаемую версию и возвращает ошибку вместо понижения версии слейта, содержащего доказательство (impls/src/adapters/http.rs:143). epicbox безусловно преобразует в V2 (impls/src/adapters/epicbox.rs:251), поэтому запрос доказательства исчезает ещё до того, как слейт покидает отправителя. Чтобы запросить доказательство, см. выберите транспорт соответствующим образом.

Наблюдаемые различия между тремя транспортами, к которым обращается разработчик:

ТранспортКоманды для выполнения переводаКто должен слушатьtxs записывает контрагента
file3, разделены между двумя кошелькаминиктоНет, From/To AddressNone
http1, только отправительполучательНет, From/To AddressNone
epicbox1 команда, но оба кошелька требуют подпискиобе стороныДа, адрес отправителя

Epicbox требует, чтобы отправитель тоже слушал. send -m epicbox подключается к релею, публикует слейт, блокирует свои входы и возвращает управление (controller/src/command.rs:566). Ответа он не ожидает. Подписанный слейт возвращается через релей в виде нового сообщения, и финализирует и публикует его тот процесс, который удерживает epicbox-подписку отправителя (process_incoming_slate()). Таким образом, получателю нужен listen -m epicbox для подписи, а отправителю — listen -m epicbox для финализации. Ни одна из сторон не обязана быть подключена в момент действия другой, поскольку релей хранит сообщение до повторного подключения адресата. Запустите обе подписки перед отправкой. Наблюдаемое время полного цикла составило около 1.5 секунды.

Только epicbox сообщает, кто вам заплатил. При использовании файла и HTTP поле контрагента в журнале транзакций остаётся пустым, поэтому атрибуция обеспечивается другими средствами вашей системы. См. интеграция с биржей.

epicbox

Релей с хранением и пересылкой. Кошелёк удерживает WebSocket-соединение с релеем, а релей хранит адресованные вам слейты до повторного подключения и подтверждения получения. Это единственный вариант, когда ни одна из сторон не может принимать входящие соединения.

# receiver
epic-wallet listen -m epicbox

# sender
epic-wallet send -m epicbox -d <52-char-key>@epicbox.epiccash.com 1.5

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

Протокол передачи данных задокументирован в справочнике по epicbox.

http

Отправитель публикует слейт напрямую в слушатель получателя. Минимальная задержка, и все поля слейта V3 сохраняются, включая доказательства платежей.

# receiver
epic-wallet listen

# sender
epic-wallet send -m http -d http://receiver.example:3415 1.5

Получатель должен быть доступен, что предполагает наличие публичного хоста или проброса порта.

file

Записать слейт в файл, передать его любым способом и обработать на другой стороне. Сетевых зависимостей нет.

epic-wallet send -m file -d slate.tx 1.5 # отправитель, раунд 1
epic-wallet receive -m file -i slate.tx # receiver
epic-wallet finalize -m file -i slate.tx.response # sender

Используйте этот способ для отладки, перемещения средств между подконтрольными вам машинами и точного изучения содержимого слейта.

emoji

Слейт, закодированный в виде последовательности эмодзи, для вставки через чат-приложение.

Кодирование использует таблицу из 1,024 записей, что даёт 10 бит на глиф. Первый глиф — заголовок, кодирующий количество добавленных битов дополнения, поэтому слейт в виде эмодзи всегда начинается с одного из десяти конкретных глифов. Ожидайте примерно 0.8 глифа на байт JSON слейта, что составляет около 3.2 раза больше числа байт после кодирования в UTF-8.

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

keybase

Требует наличия клиента Keybase и остаётся доступным для совместимости.

self

Обе стороны перевода — один и тот же кошелёк. Полезно для перемещения средств между аккаунтами одного кошелька и для проверки механизма транзакций без контрагента. --dest задаёт аккаунт назначения.

epic-wallet send -m self -d <destination_account> 1.5

Выбор

СитуацияИспользование
Интеграция, где важна корректностьhttp в частной сети
Обычные пользователи, мобильные устройства, нестабильное соединениеepicbox
Отладка или перевод средств между собственными машинамиfile
Требуются доказательства платежаВсё, кроме epicbox
Перевод через чатemoji

Далее