¿Cómo llamar al método indefinido de un contrato usando truffle javascript?

Tengo un contrato de despacho, que define la función de reserva para enviar todas las llamadas "indefinidas" al contrato de implementación usando la llamada delegada:

contract Dispatcher{
  address _implementation;
  function() public{
    bytes4 sig;
    assembly { sig := calldataload(0) }
    var len = _returnSizes[sig];
    var target = _implementation;

    assembly {
    // return _dest.delegatecall(msg.data)
        calldatacopy(0x0, 0x0, calldatasize)
        let ret := delegatecall(sub(gas, 10000), target, 0x0, calldatasize, 0, len)
        jumpi(0xffffffff, iszero(ret))
        return(0, len)
    }
}

Sin embargo, no tengo idea de cómo escribir pruebas en trufa en javascript, por ejemplo, para llamar a Implementación.métodoA(). Supongo que de alguna manera tengo que formatear los datos en sendTransaction, pero no puedo encontrar ninguna documentación o código de muestra. Se agradece la ayuda.

Buscando algo como await disp = Dispatcher.new(); await disp.sendTransaction("nonDefinedMethod", "param1", "param2", {from: cuenta[1]}). No tengo idea de cómo definir los parámetros para enviar Transacción, si ese es el camino correcto a seguir.

Respuestas (2)

Supongo que tiene el contrato de implementación que el despachador también está enviando. Si ese es el caso, puede convertir la dirección del despachador como la implementación. Por ejemplo dispatchedImplementation = Implementation.at(Dispatcher.address), entonces debería poder llamar a las funciones dispatchedImplementationcomo lo haría si fuera una instancia del contrato de implementación. Esto supone que la _implementationdirección en el contrato de Despachador es la dirección del contrato de implementación.

Como nota al margen, sendTransaction()in truffle toma los mismos argumentos que using web3.eth.sendTransaction(), que se pueden ver aquí en el antiguo documento web3 . Sin embargo, formatear los datos para enviar una transacción sin procesar al despachador que llama a la función de respaldo requiere más reflexión. No debería tener que preocuparse por eso con el método anterior.

¡Eso es lo que estaba buscando! Voy a intentarlo. ¡Gracias!

No estoy seguro de si esto responde a sus preguntas, pero las pruebas en trufa están escritas usando el estilo Mocha. ¡Probablemente podrías consultar su documentación! Puede encontrar la documentación en https://mochajs.org/

Desafortunadamente no, la respuesta no está en mocha: la pregunta es cómo crear transacciones manualmente, llamando a un método no definido de un contrato, ya que ni mocha ni truffle brindan las herramientas adecuadas para ello:/