Verificación de contratos inteligentes
Se trata de un paso vital para garantizar que se está ejecutando el contrato adecuado. Es posible verificar cualquier contrato inteligente desplegado en la cadena de bloques. Tomemos un ejemplo práctico en el que se tiene un contrato activo en la blockchain y se desea determinar su nombre en clave y su versión.
Inspeccionar código
Examinaremos el siguiente contrato de acceso público archway1cug98emkqmj8n3n2tnm9d04e7q52r9lrjgaud9hecnqw6pth8fvse96uwj en las redes de Archway. Este contrato se basa en el modelo de contrato Increment que puede encontrarse aquí.
Podemos consultar la información del contrato utilizando el siguiente comando:
Mainnet
archwayd query wasm contract-state raw archway1cug98emkqmj8n3n2tnm9d04e7q52r9lrjgaud9hecnqw6pth8fvse96uwj 636F6E74726163745F696E666F --node https://rpc.mainnet.archway.io:443 --chain-id archway-1 --output json | jq -r .data | base64 -d | jq
{
"contract": "crates.io:archway5",
"version": "0.1.0"
}
Testnet
archwayd query wasm contract-state raw archway1cug98emkqmj8n3n2tnm9d04e7q52r9lrjgaud9hecnqw6pth8fvse96uwj 636F6E74726163745F696E666F --node https://rpc.constantine.archway.tech:443 --chain-id constantine-3 --output json | jq -r .data | base64 -d | jq
{
"contract": "crates.io:archway5",
"version": "0.1.0"
}¿Qué significa exactamente 636F6E74726163745F696E666F en la consulta anterior?
El ContractInfo se almacena bajo la clave contract_info, que se traduce a 636F6E74726163745F696E666F en formato hexadecimal, como se documenta aquí.
Para obtener el hash requerido, primero necesitamos encontrar el ID de código correspondiente. Este es el proceso para obtenerlo:
Ahora tenemos code_id junto con las direcciones creator y admin. La siguiente consulta recuperará el hash:
Ahora recupera el hash:
Encontrar el código original
Los hashes de los contratos inteligentes de cw-plus se publican junto con el código del contrato, que puede encontrarse en cw-plus dentro de un archivo checksums.txt. He aquí un ejemplo:
Compilar uno mismo
En lugar de confiar en hashes preexistentes, podemos generar el hash para nuestro contrato nosotros mismos. Podemos utilizar rust-optimizer no sólo para crear código compacto y de alto rendimiento, sino también para asegurar que el código de salida es determinista y puede ser comparado con precisión. De hecho, los hashes proporcionados en el ejemplo anterior fueron todos producidos usando rust-optimizer.
En Windows, puede utilizar el siguiente comando en su lugar:
Los hashes serán generados en ./artifacts/checksums.txt.
En lugar de usar el rust-optimizer directamente, puedes utilizar el Archway CLI para optimizar tu código que también generará el checksum requerido con el hash para tu código. El rust-optimizer está siendo usado en segundo plano.
Los hashes se generarán en ./artifacts/checksums.txt.
Puede encontrar el valor y compararlo con el que hemos obtenido.
Si los hashes coinciden, se verifica el contrato.
Last updated