The home for Hyperlane core contracts, sdk packages, and other infrastructure
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hyperlane-monorepo/solidity/optics-core/contracts/test/TestReplica.sol

78 lines
2.1 KiB

// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.6.11;
import "../Replica.sol";
contract TestReplica is Replica {
using TypedMemView for bytes;
using TypedMemView for bytes29;
using Message for bytes29;
constructor(uint32 _localDomain) Replica(_localDomain) {} // solhint-disable-line no-empty-blocks
function setFailed() public {
_setFailed();
}
function setUpdater(address _updater) external {
updater = _updater;
}
function setRemoteDomain(uint32 _remoteDomain) external {
remoteDomain = _remoteDomain;
}
function setMessagePending(bytes memory _message) external {
bytes29 _m = _message.ref(0);
messages[_m.keccak()] = MessageStatus.Pending;
}
function setCurrentRoot(bytes32 _newRoot) external {
current = _newRoot;
}
function timestamp() external view returns (uint256) {
return block.timestamp;
}
function testHomeDomainHash() external view returns (bytes32) {
return homeDomainHash();
}
function testBranchRoot(
bytes32 leaf,
bytes32[32] calldata proof,
uint256 index
) external pure returns (bytes32) {
return MerkleLib.branchRoot(leaf, proof, index);
}
test: cross chain governance (#312) * fix: OpticsIdentifier as_ref casts ethereum address conditionally * feature: adds GovernanceRouter test boilerplate and fixes ConnectionManager test setup * test: adds testProcess and revert message utility * test: adds test for handle revert with unenrolled replica * test: adds test for reverting in handle on nonGovernorRouter message * rename: formattedMessage --> opticsMessage * prog: blocked on incorrect setting of governorDomain = localDomain * fix: fix after domainHash rebase * test: adds success case transfer governor test * test: adds setRouter message success case * prog: Call message success case failing due to datalen mismatches * prog: storing in dynamic struct array reverts silently * add: initial setup * add: transfer governorship test * add: signUpdate * refactor: combine bridgerouter tests * fix: cast to address, set sequence * delete: old gov router tests * Fix transfer governor test * fix: debug call storage, get sequence * fix: bad merge rust code * revert: stale changes * refactor: nits, create thirdDomain/thirdRouter vars * refactor: extract some code into formatOpticsMessage * refactor: formatOpticsMessage * refactor: deployOptics and devDeployOptics * fix: bug, clean up code * lint * fix: add numCalls (#315) * fix: initial stab at adding numCalls * debugging: numCall type conversion * fix: read _numCalls from bytes29 * use MSG_PREFIX_LEN * clean: remove unused imports * fix: data bug, refactor a bit * add: Transaction reverted silently * fix: bug in formatCalls * refactor: formatCalls * add: check ret value for testProcess from GovernorRouter * enhance: more explicit naming * rename: BYTE_LEN to NUM_ITEMS * slow down turbo * enhance: assign _numCalls variable Co-authored-by: Luke Tchang <ltchang@stanford.edu> Co-authored-by: anna-caroll <anna.s.carroll@gmail.com>
4 years ago
function testProcess(bytes memory _message)
external
returns (bool _success, string memory _result)
{
bytes memory _res;
(_success, _res) = process(_message);
_result = _success ? string(_res) : getRevertMsg(_res);
}
function getRevertMsg(bytes memory _res)
internal
view
returns (string memory)
{
bytes29 _view = _res.ref(0);
// If the _res length is less than 68, then the transaction failed
// silently (without a revert message)
if (_view.len() < 68) return "Transaction reverted silently";
// Remove the selector which is the first 4 bytes
bytes memory _revertData = _view.slice(4, _res.length - 4, 0).clone();
// All that remains is the revert string
return abi.decode(_revertData, (string));
}
}