Маркетплейс
Имена можно покупать и продавать через встроенный маркетплейс с эскроу. Все платежи полностью экранированы.
Эскроу здесь кастодиальный, и стоит точно сказать, что это означает. Покупатель платит на протокольный адрес регистратора; регистратор удерживает средства, передаёт имя и зачисляет продавцу на внутренний баланс сумму за вычетом сервисной комиссии. Продавец выводит её когда захочет. То есть регистратор действительно выступает эскроу-агентом — он держит деньги одной стороны, пока обязательство другой стороны не будет исполнено.
Чем это не является, так это доверительным эскроу на блокчейне. Нет смарт-контракта, который выпускал бы средства автоматически; хранение у регистратора — это самое настоящее хранение. Ограничивает его то, что обязательства вычисляются публично: см. Доверие и приватность — там описан инвариант баланса, который может проверить любой, и то единственное место, где хранение извне не проверяется.
Согласие продавца на продажу — это его ранее подписанная команда LST, цена из которой
зафиксирована в дереве состояния: команда BUY действительна только по ровно этой цене, и в
момент покупки подпись продавца не требуется.
Продажа
Продавец подписывает запрос LIST в блокчейн-транзакции и формирует memo с командой LIST:
PiNS:1:LST:{name}:{ed25519_pubkey}:{price}:{nonce}:{signature}
Так имя выставляется на Маркетплейс.
- цена задаётся целым числом сатоши и должна быть больше нуля (1 PIVX = 100 000 000 сатоши)
- LIST можно отправить повторно для уже выставленного имени, чтобы изменить цену; побеждает последнее объявление
Если вы передумали
Продавец всегда может снять домен с Маркетплейса, отправив блокчейн-транзакцию с memo, содержащим команду UNLIST:
PiNS:1:ULT:{name}:{ed25519_pubkey}:{nonce}:{signature}
Так имя убирается с Маркетплейса.
Команды обрабатываются по очереди в порядке блокчейна PIVX. Это значит, что ваша команда UNLIST должна быть получена раньше, чем чья-то команда BUY.
PIVX Names не управляет порядком транзакций — он целиком определяется тем, как PIVX формирует блоки, и порядком индексов транзакций внутри каждого блока.
Покупка
Покупатель отправляет транзакцию на адрес регистратора с командой BUY в memo:
PiNS:1:BUY:{name}:{buyer_pivx_address}:{ed25519_pubkey}:{nonce}:{signature}
Сканер проверяет:
- Имя должно быть выставлено на продажу
- Платёж должен в точности совпадать с ценой объявления
- Если всё верно: имя переходит покупателю, а выручка за вычетом сервисной комиссии зачисляется на внутренний баланс продавца
- Если нет: средства возвращаются на внутренний баланс покупателя
Если несколько человек захотят купить одно и то же имя одновременно, обработана будет только первая транзакция, а остальным средства вернутся на внутренний баланс. Вывести их можно в любой момент, просто указав адрес для вывода на сайте.