Wie rufe ich eine undefinierte Methode eines Vertrags mit Trüffel-Javascript auf?

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.

Auf der Suche nach etwas wie await disp = Dispatcher.new(); await disp.sendTransaction("nonDefinedMethod", "param1", "param2", {from: account[1]}). Keine Ahnung, wie man die Parameter für sendTransaction definiert, wenn das der richtige Weg ist.

Antworten (2)

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, dispatchedImplementationals wäre es eine Instanz des Implementierungsvertrags. Dies setzt voraus, dass die _implementationAdresse 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.

Das habe ich gesucht! Werde es versuchen. Danke!

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/

Leider nein, die Antwort liegt nicht im Mokka - die Frage ist, wie man manuell eine Transaktion erstellt, indem man eine nicht definierte Methode eines Vertrags aufruft, da weder Mokka noch Trüffel die richtigen Werkzeuge dafür bieten :/