Как определить результат внутреннего вызова proxy в Substrate
Внешний extrinsic прокси может завершиться успешно при ошибке действия от имени основного аккаунта. Для исполнения заказа нужно проверить результат внутри события pallet proxy.
Выделите события отправленного proxy
Прочитайте события блока включения и отберите фазу ApplyExtrinsic нужного extrinsic. В примере эти записи находятся в recordsForExtrinsic, а api использует подходящий runtime. Прочитайте DispatchResult каждого события ProxyExecuted.
for (const {event} of recordsForExtrinsic) {
if (api.events.proxy.ProxyExecuted.is(event)) {
const result = event.data[0]
console.log(result.isOk ? "inner call succeeded" : result.asErr.toString())
}
}
Различите отказ авторизации и ошибку действия
При отказе внешнего extrinsic до передачи управления внутреннему вызову события ProxyExecuted может не быть. Тогда изучите system.ExtrinsicFailed. Если ProxyExecuted содержит Err, разберите DispatchError и тип действия с учётом фильтра разрешений прокси.
Сохраните в журнале и подписанта-делегата, и основной аккаунт. Перевод от имени основного аккаунта относится к нему, хотя внешний extrinsic подписал делегат.