Как извлечь результат uint64 из логов приложения Algorand по ARC-4
Перед возвратом ABI-значения приложение может записать несколько диагностических сообщений. Клиенту нужна последняя строка логов исполнения метода и тип возвращаемого значения.
Проверьте маркер после декодирования транспортного формата
Если ответ содержит логи в base64, сначала декодируйте выбранную запись. У непустого возврата ARC-4 первые четыре байта — маркер, затем идёт ABI-содержимое. В примере после маркера восемь байтов uint64.
prefix = bytes.fromhex("151f7c75")
log = bytes.fromhex("151f7c75000000000000002a")
assert log.startswith(prefix) and len(log) == 12
value = int.from_bytes(log[4:], "big")
assert value == 42
Отдельно обработайте void и вложенные вызовы
Для метода void такой лог не обязателен. У непустого метода отсутствие маркера или неверная структура оставляют результат нерасшифрованным. Сохраните обычные логи и не подставляйте последнюю запись постороннего внутреннего app call. Для строк, кортежей и динамических массивов используйте соответствующие ABI-декодеры.