Wie finde ich heraus, welche Compiler-Version für die Bereitstellung mit MyEtherWallet verwendet wurde?

Wenn ich einen Vertrag auf MyEtherWallet.com bereitstelle, wie kann ich herausfinden, welche Compiler-Version verwendet wurde, um den Code auf Etherscan usw. zu verifizieren?

Antworten (2)

Um den Vertrag auf MyEtherWallet bereitzustellen, benötigen Sie den Bytecode. Der Bytecode enthält die Solidity-Pragma-Version in den Metadaten, die in den objectParameter im Bytecode konvertiert wird, den Sie selbst erhalten.

Es wird mit dem Pragma kompiliert, das festgelegt ist.

Was die Verifizierung angeht. Sie müssen wissen, welches Pragma im Soliditätscode selbst festgelegt wurde.


Beispielvertrag:

pragma solidity ^0.4.23;


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

Beispiel Bytecode:

{
    "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;;;;;;;"
}
Danke schön. Wenn ich das Pragma auf ^0.4.18 setze, aber es mehrere Versionen mit 0.4.18 gibt, die in Etherscan ausgewählt werden können, wie folgt: i.imgur.com/sE8n6xW.png Woher weiß ich, welche Version ich auswählen soll?
@JohnMurphy, es wäre höchstwahrscheinlich der 0.4.18-Commit. Nächtliche Builds erfordern normalerweise, dass Sie speziell für die Entwicklung der nächsten Version klonen.
Es gibt keine Informationen innerhalb des Objekts, die bestimmen, welcher Compiler verwendet wurde. Nur das Objektfeld ist der Bytecode, die anderen Informationen werden vom Compiler hinzugefügt und sind nicht erforderlich, um den Vertrag bereitzustellen
@mirg Das Ende des Bytecodes enthält den Hash der Metadaten, der die Compiler-Version und andere Informationen enthält. Siehe: Vertragsmetadaten
@ReyHaynes danke wusste das nicht! Cool. Ich habe Angst, dass der Beitrag hier veraltet ist, dann ethereum.stackexchange.com/questions/3482/… aber Sie müssen trotzdem raten, welcher Compiler verwendet wurde, da ein Hash richtig ist?
Wenn Sie den Quellcode und den Bytecode haben, sind Sie vermutlich derjenige, der die Quelle kompiliert hat. Wenn ja, dann wissen Sie bereits, welchen Compiler Sie verwendet haben.

Wenn Sie auf MyEtherWallet bereitstellen, posten Sie Ihren Bytecode. Es gibt keine Möglichkeit zu erkennen, welche Compilerversion den bereitgestellten Bytecode generiert hat. Weitere Informationen finden Sie hier