У меня есть диспетчерский контракт, который определяет резервную функцию для отправки всех «неопределенных» вызовов в контракт реализации с использованием делегата:
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, но я не могу найти никакой документации или примера кода. Помощь приветствуется.
Я предполагаю, что у вас есть контракт на реализацию, который диспетчер также отправляет. Если это так, вы можете просто указать адрес диспетчера в качестве реализации. Например dispatchedImplementation = Implementation.at(Dispatcher.address)
, тогда вы должны иметь возможность вызывать функции, dispatchedImplementation
как если бы это был экземпляр контракта реализации. Это предполагает, что _implementation
адрес в контракте Dispatcher является адресом контракта реализации.
В качестве примечания, sendTransaction()
in truffle принимает те же аргументы, что и using web3.eth.sendTransaction()
, которые можно увидеть здесь, в старом документе web3 . Однако форматирование данных для отправки необработанной транзакции диспетчеру, вызывающему резервную функцию, требует дополнительных размышлений. Вам не нужно беспокоиться об этом с помощью вышеуказанного метода.
Не совсем уверен, что это отвечает на ваши вопросы, но тесты в трюфеле написаны в стиле Mocha. Возможно, вы могли бы проверить их документацию! Вы можете найти документацию на https://mochajs.org/
эйосев