Как проверить регистрацию получателя перед переводом токена NEAR

У получателя может существовать аккаунт NEAR, а в контракте токена ещё нет записи для него. Для токена с поддержкой NEP-145 это проверяется view-вызовом.

Опросите нужный контракт токена

В аргументе ниже закодировано {"account_id":"alice.testnet"}. Подставьте контракт токена и заново закодируйте JSON при замене получателя. Декодируйте массив байтов результата как UTF-8 JSON.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "query",
  "params": {
    "request_type": "call_function",
    "finality": "final",
    "account_id": "token.testnet",
    "method_name": "storage_balance_of",
    "args_base64": "eyJhY2NvdW50X2lkIjoiYWxpY2UudGVzdG5ldCJ9"
  }
}

Различите отсутствие записи и нулевой доступный остаток

Декодированное null означает отсутствие регистрации. Объект с положительным total и available, равным "0", описывает существующую регистрацию без доступного к выводу остатка. Одно только нулевое available не требует повторной первоначальной регистрации.

Для незарегистрированного получателя прочитайте storage_balance_bounds у того же контракта, чтобы узнать минимум перед подготовкой storage_deposit. Зафиксируйте наблюдение: другая транзакция может зарегистрировать получателя раньше.

Источники