Ich habe einen Dispatching-Vertrag, der die Fallback-Funktion definiert, um alle "undefinierten" Aufrufe an den Implementierungsvertrag mit Delegatecall zu senden:
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)
}
}
Ich habe jedoch keine Ahnung, wie man Tests in Trüffel in Javascript schreibt, zB um Implementation.methodA() aufzurufen. Ich denke, ich muss Daten in sendTransaction irgendwie formatieren, kann aber keine Dokumentation oder Beispielcode finden. Hilfe wird geschätzt.
Ich nehme an, Sie haben auch den Implementierungsvertrag, den der Dispatcher versendet. Wenn dies der Fall ist, können Sie einfach die Adresse des Dispatchers als Implementierung umwandeln. Dann sollten Sie zB dispatchedImplementation = Implementation.at(Dispatcher.address)
die Funktionen so aufrufen können, dispatchedImplementation
als wäre es eine Instanz des Implementierungsvertrags. Dies setzt voraus, dass die _implementation
Adresse im Dispatcher-Vertrag die Adresse des Implementierungsvertrags ist.
Als Randnotiz sendTransaction()
nimmt in truffle die gleichen Argumente wie using , die hier im alten web3-Dokumentweb3.eth.sendTransaction()
zu sehen sind . Um die Daten zu formatieren, um eine Rohtransaktion an den Dispatcher zu senden, der die Fallback-Funktion aufruft, ist jedoch mehr Überlegung erforderlich. Mit der obigen Methode sollten Sie sich darüber keine Sorgen machen müssen.
Ich bin mir nicht ganz sicher, ob dies Ihre Fragen beantwortet, aber Tests in Trüffel sind im Mokka-Stil geschrieben. Wahrscheinlich könnten Sie ihre Dokumentation überprüfen! Die Dokumentation finden Sie unter https://mochajs.org/
Ejossev