Mostrando las entradas con la etiqueta solidity. Mostrar todas las entradas
Mostrando las entradas con la etiqueta solidity. Mostrar todas las entradas

2022-09-21

estimate-sol

Hoy publiqué una herramienta open-source que sirve para medir el tamaño de contratos de solidity. Está en pypi, y podés instalarla corriendo pip install estimate-sol. Este es el uso:

$ estimate-sol -h
usage: estimate-sol [-h] [--punctuations] [--encoding ENCODING] [--dependencies-multiplier DEPENDENCIES_MULTIPLIER]
[--assembly-multiplier ASSEMBLY_MULTIPLIER] [--week-size WEEK_SIZE] [-a] [-V]
files [files ...]

Estimate solidity audit sizes.

positional arguments:
files Files to be audited.

optional arguments:
-h, --help show this help message and exit
--punctuations, -p Use punctuations for counting (default: lines)
--encoding ENCODING, -e ENCODING
File encoding (default=utf-8).
--dependencies-multiplier DEPENDENCIES_MULTIPLIER, -d DEPENDENCIES_MULTIPLIER
Multiplier to estimate non-audited dependencies (default=1.0).
--assembly-multiplier ASSEMBLY_MULTIPLIER
Multiplier to estimate assembly code (default=1.0).
--week-size WEEK_SIZE, -w WEEK_SIZE
Number of items to audit per week. Defaults: (lines:1.0, punct:1.0)
-a, --absolute_paths Show all paths as absolute (by default relative paths are shown if inside current directory).
-V, --version show program's version number and exit
Y podés ver el anuncio original acá.

2022-02-08

Buscando multiplicaciones y divisiones

Desde hace unos meses mi trabajo es hacer auditorías de smart contracts escritos en solidity. Como parte de este trabajo, tengo que buscar multiplicaciones y divisiones en código que no conozco, generalmente usando VSCode.

El tema es que las búsqueda de "*" y "/" dan bocha de falsos positivos porque estos caracteres se usan para marcar comentarios, aparte de las operaciones aritméticas. Por eso uso unas regex para buscarlos, que aunque no son perfectas, me sirven para acotar la cantidad de lugares que tengo que mirar. Quizás les sirvan a ustedes también, así que se las dejo acá abajo:

Multiplicación: [^\s].*[^/*]\*[^/*]

División: [^/*]/[^/*]

Probablemente también puedan serles útiles en otros lenguajes como Python, Java o C++.

2021-09-27

Setupeando hardhat para binance network

Estoy entrando a un laburo nuevo, y como primera tarea tengo que hacer unos POCs de contratos en solidity y testearlos en la red de test de Binance. 

Para hacer esto tengo que hacerlos con hardhat. Por lo tanto empecé a seguir las instrucciones que dan en Binance para setupear hardhat, pero no están del todo bien.

Los problemas que me llevé puestos son:

  • Hay que usar una versión LTS de nodejs. Para eso instalé nvm como dice acá e instalé el LTS usando nvm. La versión que trae ubuntu 20.04 haciendo apt install nodejs es muy vieja.
  • En el archivo hardhat.config.js que ponen ahí, hay que cambiar la versión de solidity a "0.8.4". Sino el contrato de ejemplo que genera cuando corrés npx hardhat no compila.
  • Hay que crear un archivo secrets.json donde poner los mnemonicos que usa metamask. El contenido del archivo es algo así: {"mnemonic": "a ante bajo cabe con contra de desde hacia hasta para por"}

Si el contenido de secrets.json no tiene el formato correcto, o el archivo no existe da un error bastante críptico (Expected a value of type HttpNetworkConfig)

Pero cuando está todo bien configurado pasa esto:

$ npx hardhat compile
Compiling 2 files with 0.8.4
Compilation finished successfully

Espero que les sirva,

Aureliano.