¿Problema al invocar una función con el parámetro byte32: "El parámetro dado no es bytes"?

Tenemos una función de la siguiente manera:

function newObject(bytes32 _id, uint256 number_of_sub_states, bytes32[10] sub_states_types, bytes32[10] sub_states_values, address _owner) public returns(bool success) {
        require(!isObject(_id));

        uint256 counter=0;
        for(counter; counter < number_of_sub_states; counter++) {

            objectStructs[_id].state.sub_state[sub_states_types[counter]] = sub_states_values[counter];

            emit LogNewObject(msg.sender, _id, bytes32(sub_states_types[counter]), bytes32(sub_states_values[counter]), _owner);

        }

        objectStructs[_id].owner = _owner;
        objectStructs[_id].isObject = true;

        objectList.push(_id);

        return true;
    }

Puedo invocar esta función en remix con éxito de la siguiente manera:

40,3,["location","price","sold","","","","","","",""],["Paris","50","No","","","","","","",""], 0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773 

Pero cuando invoco esta función con web3 de la siguiente manera:

contractInstance.methods.newObject("40","3",["location","price","sold","","","","","","",""],["Paris","50","No","","","","","","",""], '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773').send({ from: '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773' }, function(error, result) {
    console.log(error);
    console.log(result)
});

Recibo el siguiente error:

Error: Given parameter is not bytes: "40"
    at SolidityTypeBytes.formatInputBytes [as _inputFormatter] (/home/s/node_modules/web3-eth-abi/src/formatters.js:56:15)
    at SolidityTypeBytes.SolidityType.encode (/home/s/node_modules/web3-eth-abi/src/type.js:188:17)
    at /home/s/node_modules/web3-eth-abi/src/index.js:255:29
    at Array.map (<anonymous>)
    at ABICoder.encodeParameters (/home/s/node_modules/web3-eth-abi/src/index.js:254:34)
    at /home/s/node_modules/web3-eth-contract/src/index.js:420:24
    at Array.map (<anonymous>)
    at Object._encodeMethodABI (/home/s/node_modules/web3-eth-contract/src/index.js:419:12)
    at Object._processExecuteArguments (/home/s/node_modules/web3-eth-contract/src/index.js:735:39)
    at Object._executeMethod (/home/s/node_modules/web3-eth-contract/src/index.js:760:54)
> 

Además, intenté seguir de acuerdo con el comentario del usuario goodvibration :

> contractInstance.methods.newObject(0x28,0x3,["location","price","sold","","","","","","",""],["Paris","50","No","","","","","","",""], '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773').send({ from: '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773' }, function(error, result) {
...     console.log(error);
...     console.log(result)
... });
Error: Given parameter is not bytes: "40"
    at SolidityTypeBytes.formatInputBytes [as _inputFormatter] (/home/s/node_modules/web3-eth-abi/src/formatters.js:56:15)
    at SolidityTypeBytes.SolidityType.encode (/home/s/node_modules/web3-eth-abi/src/type.js:188:17)
    at /home/s/node_modules/web3-eth-abi/src/index.js:255:29
    at Array.map (<anonymous>)
    at ABICoder.encodeParameters (/home/s/node_modules/web3-eth-abi/src/index.js:254:34)
    at /home/s/node_modules/web3-eth-contract/src/index.js:420:24
    at Array.map (<anonymous>)
    at Object._encodeMethodABI (/home/s/node_modules/web3-eth-contract/src/index.js:419:12)
    at Object._processExecuteArguments (/home/s/node_modules/web3-eth-contract/src/index.js:735:39)
    at Object._executeMethod (/home/s/node_modules/web3-eth-contract/src/index.js:760:54)

Sin embargo, recibo el mismo error.

Cuál es la razón ? y como puedo arreglar esto?

Prueba "0x28"en su lugar...
@goodvibration Gracias. ¡Lo intenté, sin embargo, recibo el mismo error! Lo expliqué en mi pregunta. Parece extraño !

Respuestas (1)

Invoqué esta función de la siguiente manera y funciona:

contractInstance.methods.newObject(web3.utils.asciiToHex("50"),web3.utils.asciiToHex("3"),[web3.utils.asciiToHex("location"),web3.utils.asciiToHex("price"),web3.utils.asciiToHex("sold"),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex("")],[web3.utils.asciiToHex("Paris"),web3.utils.asciiToHex("50"),web3.utils.asciiToHex("No"),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex(""),web3.utils.asciiToHex("")], '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773').send({ from: '0xE07b6e5a2026CC916A4E2Beb03767ae0ED6af773' }, function(error, result) {
    console.log(error);
    console.log(result)
});