Как закодировать smart query CosmWasm для gRPC
Контракт ожидает байты JSON, а protobuf JSON представляет байтовое поле через base64. Правильный порядок кодирования устраняет частую ошибку формата запроса.
Запросите метаданные совместимого токена
Укажите в CONTRACT адрес экземпляра CW20 с поддержкой token_info, а в GRPC — TLS gRPC с reflection. Сериализуйте внутренний JSON один раз и закодируйте его байты в base64 для queryData.
DATA=$(printf '%s' '{"token_info":{}}' | base64 | tr -d '\n')
grpcurl -d "{\"address\":\"$CONTRACT\",\"queryData\":\"$DATA\"}" "$GRPC" cosmwasm.wasm.v1.Query/SmartContractState
Поле data в ответе также байтовое. Декодируйте base64 и разберите полученные данные как JSON ответа контракта. Для этого запроса проверьте название токена, символ и число десятичных знаков.
Определите уровень ошибки
Некорректный base64 отклоняется до запуска контракта. Правильно закодированный неизвестный вариант запроса может дойти до контракта и вызвать ошибку схемы. Сверьте схему именно развёрнутой версии, прежде чем менять метод gRPC. github.com wasmd Query API