Copie e implante um contrato inteligente de opcodes sem código-fonte
Extraí opcodes de um contrato inteligente já existente e implantado e gostaria de saber se é possível implantar uma cópia exata deste contrato a partir de seus opcodes?
Meus opcodes extraídos têm a seguinte aparência:
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,
...
Não estou procurando uma alternativa (por exemplo, implantar de bytecode ou engenharia reversa para código-fonte), mas realmente implantar a partir desses opcodes. É mesmo possível? Ou o nível mais baixo possível é a montagem em linha com Yul?
Estou assumindo que não há construtor no código-fonte. Se eu conseguir implantar este código e enviar para ele os dados corretos (funções e parâmetros, digamos que eu tenha a ABI), ele se comportará exatamente como o contrato já implantado de onde obtive esses opcodes?
obrigado
Respostas
Sim, deve ser possível. Mas não é tão fácil quanto parece. Um contrato é composto de duas coisas, bytecode de tempo de execução e estado interno.
Tempo de execução: Não é tão difícil duplicar o bytecode do tempo de execução, com algum conhecimento de montagem EVM. Talvez alguém já tenha feito isso no github.
Estado: Por outro lado, é mais complicado, pois depende do construtor do contrato. É possível rastrear a criação de um contrato e obter a transação que executa o construtor.
O problema de implantar um contrato como esse é que você confia cegamente nos bytecodes. Se ele faz outra coisa como permitir o acesso total de terceiros, você está cedendo os mesmos privilégios em sua instância.