Как вызвать неопределенный метод контракта с помощью трюфельного javascript?

У меня есть диспетчерский контракт, который определяет резервную функцию для отправки всех «неопределенных» вызовов в контракт реализации с использованием делегата:

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)
    }
}

Однако я понятия не имею, как писать тесты на трюфеле в javascript, например, для вызова метода Implementation.methodA(). Я предполагаю, что мне нужно КАК-ТО форматировать данные в sendTransaction, но я не могу найти никакой документации или примера кода. Помощь приветствуется.

Ищем что-то вроде await disp = Dispatcher.new(); await disp.sendTransaction("nonDefinedMethod", "param1", "param2", {from: account[1]}). Не знаю, как определить параметры для sendTransaction, если это правильный путь вперед.

Ответы (2)

Я предполагаю, что у вас есть контракт на реализацию, который диспетчер также отправляет. Если это так, вы можете просто указать адрес диспетчера в качестве реализации. Например dispatchedImplementation = Implementation.at(Dispatcher.address), тогда вы должны иметь возможность вызывать функции, dispatchedImplementationкак если бы это был экземпляр контракта реализации. Это предполагает, что _implementationадрес в контракте Dispatcher является адресом контракта реализации.

В качестве примечания, sendTransaction()in truffle принимает те же аргументы, что и using web3.eth.sendTransaction(), которые можно увидеть здесь, в старом документе web3 . Однако форматирование данных для отправки необработанной транзакции диспетчеру, вызывающему резервную функцию, требует дополнительных размышлений. Вам не нужно беспокоиться об этом с помощью вышеуказанного метода.

Это то, что я искал! Собираюсь попробовать. Спасибо!

Не совсем уверен, что это отвечает на ваши вопросы, но тесты в трюфеле написаны в стиле Mocha. Возможно, вы могли бы проверить их документацию! Вы можете найти документацию на https://mochajs.org/

К сожалению нет, ответ не в мокко - вопрос в том, как вручную создать транзакцию, вызвав неопределенный метод контракта, так как ни мокка, ни трюфель не предоставляют для этого должных инструментов :/