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.
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 dispatchedImplementation
como lo haría si fuera una instancia del contrato de implementación. Esto supone que la _implementation
direcció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.
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/
ejossev