Как привязать сумму (депозит) к транзакции с Nearlib?
Скажем, у меня есть функция контракта, которая ожидает, что определенное количество близких будет отправлено с определенной транзакцией, функция называется create_order
, create_order
требует пары аргументов.
У меня есть настройка контракта во внешнем интерфейсе под именем myContract
.
Я хочу позвонить myContract.create_order({...})
но транзакция завершается неудачно, потому что к этому вызову метода не прикреплено нужное количество токенов NEAR.
Как назначить транзакции определенную сумму депозита?
3 ответа
Nearlib поддерживает это, используя account.functionCall(..., amount)
. Но это может не сработать из-за конструкции клавиш доступа с вызовами функций. Ключи авторизованного доступа по умолчанию к приложениям разрешают только вызовы функций без внесения прикрепленных токенов (только предоплаченный газ). Это сделано для того, чтобы приложения не использовали ваш баланс автоматически без вашего явного согласия. Подробная информация о ключах доступа находится здесь: https://github.com/nearprotocol/NEPs/blob/master/text/0005-access-keys.md
Способ прикрепления депозита для транзакции должен осуществляться с явного одобрения из кошелька. Приложение должно создать запрос для кошелька, перенаправить на кошелек для утверждения (или через всплывающее окно). После того, как пользователь одобряет транзакцию, она подписывается ключом полного доступа напрямую из кошелька и транслируется. Но я боюсь, что у нас пока нет этого API в кошельке. Проблема для этого: https://github.com/nearprotocol/near-wallet/issues/56
Можно использовать account.functionCall
напрямую (без сахара для RPC), чтобы либо указать сумму, либо указать количество газа для звонка.
См. Account#functionCall в nearlib.
AFAIK на данный момент не поддерживается. Он будет доступен после того, как появится этот NEP https://github.com/nearprotocol/NEPs/pull/13.