Intento implementar un contrato ERC721. Que es de OpenZeppelin.
Mi constructor de contratos quiere dos campos de cadena de entrada.
constructor(string _name, string _symbol) public {
name_ = _name;
symbol_ = _symbol;
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(InterfaceId_ERC721Enumerable);
_registerInterface(InterfaceId_ERC721Metadata);
}
Sin embargo, cuando estoy implementando el contrato, me dice que los parámetros que configuro deben ser datos codificados en HEX.
Este es el mensaje de error que recibí:/Users/amos_mac/721_server/node_modules/solc/soljson.js:1 (function (exports, require, module, __filename, __dirname) { var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!
Error: The data field must be HEX encoded data.
Así que usé web3.utils.asciiToHex()
, pero no ayuda.
Aquí está mi código de contrato de implementación:
MyToken.deploy({
arguments: [[web3.utils.asciiToHex('Top 10 Students')],[web3.utils.asciiToHex('Top10')]]
}).send({
from: address,
gasPrice: gasPrice,
gas: gas + 500000
}).then((instance) => {
console.log("Contract mined at " + instance.options.address);
});
¡Por favor ayuda! ¡Muchas gracias!
Después de verificar mi código, me di cuenta de que agregué '0x' adicional a mi código de bytes. Eso es lo que causa el error.
La documentación de web3.eth.Contract.deploy establece que debe proporcionar el código de bytes del contrato inteligente compilado junto con los argumentos:
MyToken.deploy({
data: '0x[INSERT THE BYTECODE HERE]',
// You can omit the asciiToHex calls, as the contstructor takes strings.
// Web3 will do the conversion for you.
arguments: ['Top 10 Students','Top10']
}).send({
from: address,
gasPrice: gasPrice,
gas: gas + 500000
}).then((instance) => {
console.log("Contract mined at " + instance.options.address);
});
let MyToken = new web3.eth.Contract(JSON.parse(abi), null, { data: '0x' + bytecode, });
Lamento no haber dicho esto en mi pregunta.bytecode
Por sí mismo comienza con 0x? I
henk
arguments: [[web3.utils.asciiToHex('Top 10 Students')],[web3.utils.asciiToHex('Top10')]]
conarguments: [web3.utils.asciiToHex('Top 10 Students'),web3.utils.asciiToHex('Top10')]
amos wu
arguments: [web3.utils.asciiToHex('Top 10 Students'),web3.utils.asciiToHex('Top10')]
, pero sigo teniendo el mismo error.Error: The data field must be HEX encoded data.