Me gustaría compilar mis contratos y obtener una salida con los códigos de operación en detalle (no solo el ensamblaje) sino con referencias al código fuente de solidez en cada línea. Esta es la salida que se obtiene de forma predeterminada cuando se usa el editor Remix y se hace clic en "detalles", pero no puedo encontrar una manera de obtener eso usando el solc
binario: obtengo ensamblaje con comentarios usando --asm
o códigos de operación sin comentarios --opcodes
. ¿Puedo hacer eso?
EDITAR: para aclarar, lo que quiero decir con ensamblaje es algo así como tag_11 /* "pot.sol":5259:5263 myid */ dup3 /* "pot.sol":5265:5271 result */ dup3 /* "pot.sol":5283:5284 0 */ 0x0 /* "pot.sol":5273:5285 new bytes(0) */
y lo que quiero decir con códigos de operación es algo así como
SWAP1 contract Coucou{\n address ... DIV contract Coucou{\n address ... PUSH FFFFFFFF contract Coucou{\n address ... AND contract Coucou{\n address ... DUP1 contract Coucou{\n address ... PUSH 26121FF0 contract Coucou{\n address ...
No estoy seguro de lo que quiere decir con ensamblaje frente a códigos de operación. Tiene la opción --abi, que genera el ABI del contrato, y --bin para el binario,
Además, si simplemente escribe solc
en su consola, verá todas las opciones disponibles. En mi instalación, muestra lo siguiente:
Output Components:
--ast AST of all source files.
--ast-json AST of all source files in JSON format.
--ast-compact-json AST of all source files in a compact JSON format.
--asm EVM assembly of the contracts.
--asm-json EVM assembly of the contracts in JSON format.
--opcodes Opcodes of the contracts.
--bin Binary of the contracts in hex.
--bin-runtime Binary of the runtime part of the contracts in hex.
--clone-bin Binary of the clone contracts in hex.
--abi ABI specification of the contracts.
--hashes Function signature hashes of the contracts.
--userdoc Natspec user documentation of all contracts.
--devdoc Natspec developer documentation of all contracts.
--metadata Combined Metadata JSON whose Swarm hash is stored on-chain.
--formal Translated source suitable for formal analysis.
Simplemente solc
no puede hacerlo por sí mismo. Necesitas trabajar con srcmap-runtime
. Puede ejecutar el comando como: solc --pretty-json --combined-json srcmap-runtime YourContract.sol
Entonces obtendrás algo como:
"srcmap-runtime" : "26:184:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;137:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;137:71:0;;;;;;;;;;;;;;;;;;;;;;;70:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;70:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;137:71;175:4;198:3;;191:10;;137:71;:::o;70:57::-;118:2;112:3;:8;;;;70:57;:::o"
La notación se documenta aquí: https://solidity.readthedocs.io/en/develop/miscellaneous.html#source-mappings
usuario3078439