¿Cómo averiguo qué versión del compilador se usó para implementar con MyEtherWallet?

Si implemento un contrato en MyEtherWallet.com, ¿cómo puedo averiguar qué versión del compilador se usó para verificar el código en etherscan, etc.?

Respuestas (2)

Para implementar el contrato en MyEtherWallet, necesita el código de bytes. El código de bytes contiene la versión pragma de solidez en los metadatos que se convierte en el objectparámetro en el código de bytes que obtiene.

Se compilará usando lo que esté configurado como pragma.

En cuanto a la verificación. Necesitará saber qué pragma se estableció en el propio código de solidez.


Ejemplo de contrato:

pragma solidity ^0.4.23;


contract Stack {
    address public owner = msg.sender;
}

Código de bytes de ejemplo:

{
    "linkReferences": {},
    "object": "6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b5060e98061005f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b146044575b600080fd5b348015604f57600080fd5b5060566098565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a7230582014af0b7dee656067826398e451ee6dfdad4c1976579492127de9c0b4d9c8c9be0029",
    "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE9 DUP1 PUSH2 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x8DA5CB5B EQ PUSH1 0x44 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x56 PUSH1 0x98 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 EQ 0xaf SIGNEXTEND PUSH30 0xEE656067826398E451EE6DFDAD4C1976579492127DE9C0B4D9C8C9BE0029 ",
    "sourceMap": "27:57:0:-;;;71:10;48:33;;;;;;;;;;;;;;;;;;;;27:57;8:9:-1;5:2;;;30:1;27;20:12;5:2;27:57:0;;;;;;;"
}
Gracias. Si configuro el pragma en ^0.4.18 pero hay varias versiones con 0.4.18 para seleccionar en etherscan, así: i.imgur.com/sE8n6xW.png ¿Cómo sé qué versión elegir?
@JohnMurphy lo más probable es que sea el compromiso 0.4.18. Las compilaciones nocturnas generalmente requieren que clone específicamente para el desarrollo de la próxima versión.
no hay información dentro del objeto que determine qué compilador se ha utilizado. Solo el campo de objeto es el código de bytes, el compilador agrega la otra información y no es necesaria para implementar el contrato
@mirg El final del código de bytes contiene el hash de los metadatos, que contiene la versión del compilador y otra información. Ver: Metadatos del contrato
@ReyHaynes ¡gracias no sabía eso! Fresco. Tengo miedo de que la publicación aquí esté desactualizada, entonces ethereum.stackexchange.com/questions/3482/… pero aún necesita adivinar qué compilador se ha utilizado ya que es un hash, ¿no?
Si tiene el código fuente y el código de bytes, presumiblemente usted es quien compiló la fuente. Si es así, entonces ya sabes qué compilador usaste.

Cuando implementa en MyEtherWallet, publica su código de bytes. No hay forma de detectar qué versión del compilador ha generado el bytecode proporcionado. Puedes encontrar más información aquí