Skip to content

Операции эскроу

Эскроу удерживает токены VIZ в условном переводе: средства высвобождаются только после одобрения как получателем, так и нейтральным агентом, либо арбитрируются агентом в случае спора.

Процесс эскроу:

escrow_transfer  →  escrow_approve (обоими "to" и "agent")
                 →  escrow_release (от "from" или "to")
                 →  [escrow_dispute]  →  escrow_release (только от "agent")

           (срок подтверждения пропущен)
                 →  expire_escrow_ratification_operation [виртуальная — средства возвращаются]

escrow_transfer_operation (ID 15)

Авторизация: active from

Создаёт эскроу. Средства немедленно уходят от from на баланс эскроу; для высвобождения необходимо одобрение и agent, и to.

ПолеТипОписание
fromaccount_name_typeОтправитель
toaccount_name_typeПредполагаемый получатель
agentaccount_name_typeНейтральный агент эскроу (арбитр)
escrow_iduint32_tУникальный ID, выбранный отправителем (по умолч. 30)
token_amountasset (VIZ)Сумма для удержания в эскроу
feeasset (VIZ)Комиссия агента — выплачивается агенту при одобрении
ratification_deadlinetime_point_secСрок для одобрения обеими сторонами
escrow_expirationtime_point_secИстечение, если эскроу так и не будет высвобождено
json_metadatastringОпциональные условия / метаданные
json
[15, {
  "from": "alice",
  "to": "bob",
  "agent": "charlie",
  "escrow_id": 1001,
  "token_amount": "100.000 VIZ",
  "fee": "1.000 VIZ",
  "ratification_deadline": "2024-06-01T00:00:00",
  "escrow_expiration": "2024-07-01T00:00:00",
  "json_metadata": "{\"description\":\"payment for work\"}"
}]
  • ratification_deadline должен быть раньше escrow_expiration.
  • Обе временные метки должны быть в будущем на момент трансляции.
  • escrow_id должен быть уникальным для аккаунта from.
  • Если не одобрено до ratification_deadline, срабатывает виртуальная expire_escrow_ratification_operation, и средства возвращаются from.

escrow_approve_operation (ID 18)

Авторизация: active who

Одобряет или отклоняет эскроу. Для активации эскроу необходимо одобрение и to, и agent.

ПолеТипОписание
fromaccount_name_typeИсходный отправитель эскроу
toaccount_name_typeИсходный получатель эскроу
agentaccount_name_typeАгент эскроу
whoaccount_name_typeКто одобряет: должен быть to или agent
escrow_iduint32_tID эскроу
approvebooltrue для одобрения, false для отклонения
json
[18, {
  "from": "alice",
  "to": "bob",
  "agent": "charlie",
  "who": "bob",
  "escrow_id": 1001,
  "approve": true
}]
  • who должен быть либо to, либо agent.
  • После одобрения не может быть отозвано.
  • Если approve: false — эскроу отменяется и средства возвращаются from.
  • Должно быть транслировано до ratification_deadline.

escrow_dispute_operation (ID 16)

Авторизация: active who

Открывает спор по одобренному эскроу. После спора только agent может высвобождать средства.

ПолеТипОписание
fromaccount_name_typeИсходный отправитель эскроу
toaccount_name_typeИсходный получатель эскроу
agentaccount_name_typeАгент эскроу
whoaccount_name_typeКто открывает спор: должен быть from или to
escrow_iduint32_tID эскроу
json
[16, {
  "from": "alice",
  "to": "bob",
  "agent": "charlie",
  "who": "alice",
  "escrow_id": 1001
}]
  • Может быть открыт только по одобренному эскроу (оба to и agent одобрили).
  • Должен быть открыт до escrow_expiration.

escrow_release_operation (ID 17)

Авторизация: active who

Высвобождает средства эскроу receiver. Частичные высвобождения допускаются.

ПолеТипОписание
fromaccount_name_typeИсходный отправитель эскроу
toaccount_name_typeИсходный получатель эскроу
agentaccount_name_typeАгент эскроу
whoaccount_name_typeАккаунт, высвобождающий средства
receiveraccount_name_typeАккаунт, получающий средства (должен быть from или to)
escrow_iduint32_tID эскроу
token_amountasset (VIZ)Сумма для высвобождения (может быть частичной)
json
[17, {
  "from": "alice",
  "to": "bob",
  "agent": "charlie",
  "who": "alice",
  "receiver": "bob",
  "escrow_id": 1001,
  "token_amount": "100.000 VIZ"
}]

Правила разрешения на высвобождение:

СостояниеКто может высвобождатьКому
Без спора, до истеченияfrom или toДругой стороне
Без спора, после истеченияfrom или toЛюбой стороне
В спореТолько agentЛюбой стороне
  • Частичные высвобождения допускаются; остаток остаётся в эскроу.

См. также: Типы данных, Обзор операций, Виртуальные операции.