No se pudo implementar el contrato con datos válidos

He descargado contratos con sus abi y json. Tengo que desplegarlos. cuando extraigo el código de bytes de los archivos descargados y luego lo asigno a mi datavariable para implementar el contrato que da el siguiente error; La misma pregunta relacionada con el error se hizo anteriormente aquí , pero no se da respuesta.

UnhandledPromiseRejectionWarning: Error: The data field must be HEX encoded data.

aquí está mi código;

async function deployCon(key) {

  var v = constructorParameters[key].input.length;
// console.log("deploy for contract : ", v)

const contract = new web3.eth.Contract(abi[key]);
if(v == 0) {
  params = {
    data: "0x" + bytecode[key],
};
}
else {
  params = {
    data: "0x" + bytecode[key],
    arguments: constructorParameters[key].input
};
}

const transaction = contract.deploy(params); 
const options = {
    data: transaction.encodeABI(),
    gas: await transaction.estimateGas({from: account1})
};

const signed = await web3.eth.accounts.signTransaction(options, privateKey1);
receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction);
console.log(`Contract deployed at address: ${receipt.contractAddress}`);
return receipt;

}

y aquí está mi valor de código de bytes [clave]

606060405260018054600160a060020a031916........

NOTA: Acabo de probar el código anterior para el contrato, consulte aquí

Como le expliqué en esa otra pregunta suya: ¡este método de copiar el código de bytes de otra persona, incluidos los argumentos de construcción, es propenso a fallar miserablemente! Cualquier argumento que sea una dirección de una cuenta o un contrato, potencialmente hará que el contrato implementado sea inutilizable para usted, incluso si logra implementarlo sin revertir (debido a varias comprobaciones o llamadas que el constructor podría estar haciendo a cualquiera de esas direcciones ). Una vez más, debe usar el código fuente e ingresar sus propios argumentos de construcción.
sí, tienes razón... Pero cuando tomo el código fuente y compilo los contratos anteriores (más de 800), dará error, porque, creo, se han creado diferentes contratos con diferentes versiones de solidez. Es por eso que solo tomo sus ABI y bytecodes. Por cierto, ¿hay algún repositorio que contenga contratos de la última versión solamente? Uno por uno descargando el contrato específico de etherscan.io no es factible...
¿Por qué necesitaría usar contratos aleatorios que fueron escritos en una versión anterior de Solidity?
Necesito algún contrato, pero debería ejecutarse a través del programa a ciegas sin conocer su lógica...

Respuestas (2)

Su Bytecode no es un número hexadecimal.

Anteponga un 0x.

Por ejemplo0x606060405260018054600160a060020a031916...

EDITAR: No importa, ya lo hiciste. Aquí hay otro intento. Convierte la cadena a hexadecimal.

parseInt("0x6060604...", 16)

Tome nota de la base 16. Deje este valor sin cambios.

Lo he hecho según sus indicaciones, pero el mismo error...

Podría ayudar a otros: tuve el mismo problema, resultó que tenía un espacio vacío en la última línea de la cadena de bytecode, al eliminarlo se solucionó el problema

tal gever, me ayudé a mí mismo. yo del pasado en realidad