Copia e distribuisci uno smart contract da opcode senza codice sorgente

Oct 09 2020

Ho estratto i codici operativi da uno smart contract già esistente e distribuito e vorrei sapere se è possibile distribuire una copia esatta di questo contratto dai suoi codici operativi?

I miei codici operativi estratti hanno questo aspetto:

0x0, push1, 0x80
0x2, push1, 0x40
0x4, mstore, 
0x5, push1, 0x4
0x7, calldatasize, 
0x8, lt, 
0x9, push2, 0x7f
0xc, jumpi, 
0xd, push1, 0x0
0xf, calldataload, 
0x10, push1, 0xe0
0x12, shr, 
0x13, dup1, 
...

Non sto cercando un'alternativa (es. Distribuzione da bytecode o reverse engineering al codice sorgente) ma davvero da distribuire da questi codici operativi. È anche possibile? O il livello più basso possibile è l'assemblaggio in linea con Yul?

Presumo che non ci sia alcun costruttore nel codice sorgente. Se riesco a distribuire questo codice e ad inviargli i dati giusti (funzioni e parametri, diciamo che ho l'ABI), si comporterà esattamente come il contratto già distribuito da cui ho ricevuto questi codici operativi?

Grazie

Risposte

Ismael Oct 10 2020 at 01:39

Sì, dovrebbe essere possibile. Ma non è così facile come sembra. Un contratto è composto da due cose bytecode runtime e stato interno.

  • Runtime: non è così difficile duplicare il bytecode runtime, con una certa conoscenza dell'assembly EVM. Forse qualcuno l'ha già fatto in GitHub.

  • Stato: D'altra parte è più complicato poiché dipende dal costruttore del contratto. È possibile tracciare la creazione di un contratto e ottenere la transazione che esegue il costruttore.

Il problema con la distribuzione di un contratto del genere è che ti fidi ciecamente dei bytecode. Se fa qualcos'altro come consentire a una terza parte l'accesso completo, rinunci agli stessi privilegi nella tua istanza.