Не могу гарантировать, что помогу с исправлением ошибки, но я могу попробовать проанализировать ее и дать рекомендации.
Ошибка, которую вы получаете, говорит о том, что аргумент #1 ($signature) должен содержать байты длиной SODIUM_CRYPTO_SIGN_BYTES.
У вас есть фрагмент кода:
$signature="CMEgAPyCLG71CecF1MsTnjjlChMieIDMwcSrHAp89eyofre4Gwm7QtfO2qbNaeExgvS5qW72sU6DzdjWsxtkBw=="
Вы пытаетесь использовать TON proof и PHP, но возникает ошибка. Если воспользоваться этой информацией, я могу предположить, что вы используете библиотеку sodium_crypto_sign_verify_detached() для проверки подписи и ваш $signature является значением, которое вы хотите проверить.
Предположу, что проблема заключается в формате $signature. sodium_crypto_sign_verify_detached() ожидает, чтобы $signature содержал байты. Однако, ваш $signature представлен в кодировке Base64.
Рекомендую попробовать декодировать $signature из Base64 обратно в байты перед его использованием в sodium_crypto_sign_verify_detached(). В PHP вы можете использовать функцию base64_decode() для этого:
$decoded_signature = base64_decode($signature);
Затем вы можете использовать $decoded_signature вместо $signature в sodium_crypto_sign_verify_detached():
$result = sodium_crypto_sign_verify_detached($decoded_signature, $message, $public_key);
Пожалуйста, попробуйте эту рекомендацию и сообщите, если это помогло решить проблему.