Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Omnibridge test #2

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions contracts/Imports.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ pragma solidity 0.4.24;

import "../tokenbridge-contracts/contracts/upgradeable_contracts/arbitrary_message/ForeignAMB.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/arbitrary_message/HomeAMB.sol";
import "../tokenbridge-contracts/contracts/upgradeability/OwnedUpgradeabilityProxy.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/BridgeValidators.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/erc20_to_native/ForeignBridgeErcToNative.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/erc20_to_native/XDaiForeignBridge.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/erc20_to_native/HomeBridgeErcToNative.sol";
import "../tokenbridge-contracts/contracts/upgradeability/EternalStorageProxy.sol";
import "../tokenbridge-contracts/contracts/upgradeable_contracts/HashiManager.sol";
Expand Down
106 changes: 106 additions & 0 deletions contracts/interfaces/IForeignOmnibridge.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

interface IForeignOmnibridge {
event DailyLimitChanged(address indexed token, uint256 newLimit);
event ExecutionDailyLimitChanged(address indexed token, uint256 newLimit);
event FailedMessageFixed(bytes32 indexed messageId, address token, address recipient, uint256 value);
event NewTokenRegistered(address indexed nativeToken, address indexed bridgedToken);
event OwnershipTransferred(address previousOwner, address newOwner);
event TokensBridged(address indexed token, address indexed recipient, uint256 value, bytes32 indexed messageId);
event TokensBridgingInitiated(
address indexed token,
address indexed sender,
uint256 value,
bytes32 indexed messageId
);

function bridgeContract() external view returns (address);
function bridgedTokenAddress(address _nativeToken) external view returns (address);
function claimTokens(address _token, address _to) external;
function claimTokensFromTokenContract(address _bridgedToken, address _token, address _to) external;
function dailyLimit(address _token) external view returns (uint256);
function deployAndHandleBridgedTokens(
address _token,
string memory _name,
string memory _symbol,
uint8 _decimals,
address _recipient,
uint256 _value
) external;
function deployAndHandleBridgedTokensAndCall(
address _token,
string memory _name,
string memory _symbol,
uint8 _decimals,
address _recipient,
uint256 _value,
bytes memory _data
) external;
function disableInterest(address _token) external;
function executionDailyLimit(address _token) external view returns (uint256);
function executionMaxPerTx(address _token) external view returns (uint256);
function fixFailedMessage(bytes32 _messageId) external;
function fixMediatorBalance(address _token, address _receiver) external;
function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch);
function getBridgeMode() external pure returns (bytes4 _data);
function getCurrentDay() external view returns (uint256);
function handleBridgedTokens(address _token, address _recipient, uint256 _value) external;
function handleBridgedTokensAndCall(
address _token,
address _recipient,
uint256 _value,
bytes memory _data
) external;
function handleNativeTokens(address _token, address _recipient, uint256 _value) external;
function handleNativeTokensAndCall(address _token, address _recipient, uint256 _value, bytes memory _data) external;
function initialize(
address _bridgeContract,
address _mediatorContract,
uint256[3] memory _dailyLimitMaxPerTxMinPerTxArray,
uint256[2] memory _executionDailyLimitExecutionMaxPerTxArray,
uint256 _requestGasLimit,
address _owner,
address _tokenFactory
) external returns (bool);
function initializeInterest(address _token, address _impl, uint256 _minCashThreshold) external;
function interestImplementation(address _token) external view returns (address);
function invest(address _token) external;
function isBridgedTokenDeployAcknowledged(address _token) external view returns (bool);
function isInitialized() external view returns (bool);
function isRegisteredAsNativeToken(address _token) external view returns (bool);
function isTokenRegistered(address _token) external view returns (bool);
function maxAvailablePerTx(address _token) external view returns (uint256);
function maxPerTx(address _token) external view returns (uint256);
function mediatorBalance(address _token) external view returns (uint256);
function mediatorContractOnOtherSide() external view returns (address);
function messageFixed(bytes32 _messageId) external view returns (bool);
function minCashThreshold(address _token) external view returns (uint256);
function minPerTx(address _token) external view returns (uint256);
function nativeTokenAddress(address _bridgedToken) external view returns (address);
function onTokenTransfer(address _from, uint256 _value, bytes memory _data) external returns (bool);
function owner() external view returns (address);
// function relayTokens(address token, uint256 _value) external;
function relayTokens(address token, address _receiver, uint256 _value) external;
function relayTokensAndCall(address token, address _receiver, uint256 _value, bytes memory _data) external;
function requestFailedMessageFix(bytes32 _messageId) external;
function requestGasLimit() external view returns (uint256);
function setBridgeContract(address _bridgeContract) external;
function setCustomTokenAddressPair(address _nativeToken, address _bridgedToken) external;
function setDailyLimit(address _token, uint256 _dailyLimit) external;
function setExecutionDailyLimit(address _token, uint256 _dailyLimit) external;
function setExecutionMaxPerTx(address _token, uint256 _maxPerTx) external;
function setMaxPerTx(address _token, uint256 _maxPerTx) external;
function setMediatorContractOnOtherSide(address _mediatorContract) external;
function setMinCashThreshold(address _token, uint256 _minCashThreshold) external;
function setMinPerTx(address _token, uint256 _minPerTx) external;
function setRequestGasLimit(uint256 _gasLimit) external;
function setTokenFactory(address _tokenFactory) external;
function tokenFactory() external view returns (address);
function totalExecutedPerDay(address _token, uint256 _day) external view returns (uint256);
function totalSpentPerDay(address _token, uint256 _day) external view returns (uint256);
function transferOwnership(address newOwner) external;
function upgradeToReverseMode(address _tokenFactory) external;
function withinExecutionLimit(address _token, uint256 _amount) external view returns (bool);
function withinLimit(address _token, uint256 _amount) external view returns (bool);
}
115 changes: 115 additions & 0 deletions contracts/interfaces/IHomeOmnibridge.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

interface IHomeOmnibridge {
event DailyLimitChanged(address indexed token, uint256 newLimit);
event ExecutionDailyLimitChanged(address indexed token, uint256 newLimit);
event FailedMessageFixed(bytes32 indexed messageId, address token, address recipient, uint256 value);
event FeeDistributed(uint256 fee, address indexed token, bytes32 indexed messageId);
event FeeDistributionFailed(address indexed token, uint256 fee);
event NewTokenRegistered(address indexed nativeToken, address indexed bridgedToken);
event OwnershipTransferred(address previousOwner, address newOwner);
event TokensBridged(address indexed token, address indexed recipient, uint256 value, bytes32 indexed messageId);
event TokensBridgingInitiated(
address indexed token,
address indexed sender,
uint256 value,
bytes32 indexed messageId
);

function bridgeContract() external view returns (address);
function bridgedTokenAddress(address _nativeToken) external view returns (address);
function claimTokens(address _token, address _to) external;
function claimTokensFromTokenContract(address _bridgedToken, address _token, address _to) external;
function dailyLimit(address _token) external view returns (uint256);
function deployAndHandleBridgedTokens(
address _token,
string memory _name,
string memory _symbol,
uint8 _decimals,
address _recipient,
uint256 _value
) external;
function deployAndHandleBridgedTokensAndCall(
address _token,
string memory _name,
string memory _symbol,
uint8 _decimals,
address _recipient,
uint256 _value,
bytes memory _data
) external;
function executionDailyLimit(address _token) external view returns (uint256);
function executionMaxPerTx(address _token) external view returns (uint256);
function feeManager() external view returns (address);
function fixFailedMessage(bytes32 _messageId) external;
function fixMediatorBalance(address _token, address _receiver) external;
function foreignTokenAddress(address _homeToken) external view returns (address);
function forwardingRulesManager() external view returns (address);
function gasLimitManager() external view returns (address);
function getBridgeInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch);
function getBridgeMode() external pure returns (bytes4 _data);
function getCurrentDay() external view returns (uint256);
function handleBridgedTokens(address _token, address _recipient, uint256 _value) external;
function handleBridgedTokensAndCall(
address _token,
address _recipient,
uint256 _value,
bytes memory _data
) external;
function handleNativeTokens(address _token, address _recipient, uint256 _value) external;
function handleNativeTokensAndCall(address _token, address _recipient, uint256 _value, bytes memory _data) external;
function homeTokenAddress(address _foreignToken) external view returns (address);
function initialize(
address _bridgeContract,
address _mediatorContract,
uint256[3] memory _dailyLimitMaxPerTxMinPerTxArray,
uint256[2] memory _executionDailyLimitExecutionMaxPerTxArray,
address _gasLimitManager,
address _owner,
address _tokenFactory,
address _feeManager,
address _forwardingRulesManager
) external returns (bool);
function isBridgedTokenDeployAcknowledged(address _token) external view returns (bool);
function isInitialized() external view returns (bool);
function isRegisteredAsNativeToken(address _token) external view returns (bool);
function isTokenRegistered(address _token) external view returns (bool);
function maxAvailablePerTx(address _token) external view returns (uint256);
function maxPerTx(address _token) external view returns (uint256);
function mediatorBalance(address _token) external view returns (uint256);
function mediatorContractOnOtherSide() external view returns (address);
function messageFixed(bytes32 _messageId) external view returns (bool);
function minPerTx(address _token) external view returns (uint256);
function nativeTokenAddress(address _bridgedToken) external view returns (address);
function onTokenTransfer(address _from, uint256 _value, bytes memory _data) external returns (bool);
function owner() external view returns (address);
// function relayTokens(address token, uint256 _value) external;
function relayTokens(address token, address _receiver, uint256 _value) external;
function relayTokensAndCall(address token, address _receiver, uint256 _value, bytes memory _data) external;
function requestFailedMessageFix(bytes32 _messageId) external;
function setBridgeContract(address _bridgeContract) external;
function setCustomTokenAddressPair(address _nativeToken, address _bridgedToken) external;
function setDailyLimit(address _token, uint256 _dailyLimit) external;
function setExecutionDailyLimit(address _token, uint256 _dailyLimit) external;
function setExecutionMaxPerTx(address _token, uint256 _maxPerTx) external;
function setFeeManager(address _feeManager) external;
function setForwardingRulesManager(address _manager) external;
function setGasLimitManager(address _manager) external;
function setMaxPerTx(address _token, uint256 _maxPerTx) external;
function setMediatorContractOnOtherSide(address _mediatorContract) external;
function setMinPerTx(address _token, uint256 _minPerTx) external;
function setTokenFactory(address _tokenFactory) external;
function tokenFactory() external view returns (address);
function totalExecutedPerDay(address _token, uint256 _day) external view returns (uint256);
function totalSpentPerDay(address _token, uint256 _day) external view returns (uint256);
function transferOwnership(address newOwner) external;
function upgradeToReverseMode(
address _tokenFactory,
address _forwardingRulesManager,
address _gasLimitManager,
uint256 _dailyLimit
) external;
function withinExecutionLimit(address _token, uint256 _amount) external view returns (bool);
function withinLimit(address _token, uint256 _amount) external view returns (bool);
}
68 changes: 68 additions & 0 deletions contracts/interfaces/IPermittableToken.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

interface IPermittableToken {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Burn(address indexed burner, uint256 value);
event Mint(address indexed to, uint256 amount);
event MintFinished();
event OwnershipRenounced(address indexed previousOwner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event Transfer(address indexed from, address indexed to, uint256 value, bytes data);
event Transfer(address indexed from, address indexed to, uint256 value);

function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external view returns (bytes32);
function PERMIT_TYPEHASH_LEGACY() external view returns (bytes32);
function allowance(address _owner, address _spender) external view returns (uint256);
function approve(address _to, uint256 _value) external returns (bool result);
function balanceOf(address _owner) external view returns (uint256);
function bridgeContract() external view returns (address);
function burn(uint256 _value) external;
function claimTokens(address _token, address _to) external;
function decimals() external view returns (uint8);
function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
function decreaseApproval(address _spender, uint256 _subtractedValue) external returns (bool);
function expirations(address, address) external view returns (uint256);
function finishMinting() external returns (bool);
function getTokenInterfacesVersion() external pure returns (uint64 major, uint64 minor, uint64 patch);
function increaseAllowance(address _to, uint256 _addedValue) external returns (bool result);
function increaseApproval(address _spender, uint256 _addedValue) external returns (bool);
function isBridge(address _address) external view returns (bool);
function mint(address _to, uint256 _amount) external returns (bool);
function mintingFinished() external view returns (bool);
function move(address _from, address _to, uint256 _amount) external;
function name() external view returns (string memory);
function nonces(address) external view returns (uint256);
function owner() external view returns (address);
function permit(
address _holder,
address _spender,
uint256 _nonce,
uint256 _expiry,
bool _allowed,
uint8 _v,
bytes32 _r,
bytes32 _s
) external;
function permit(
address _holder,
address _spender,
uint256 _value,
uint256 _deadline,
uint8 _v,
bytes32 _r,
bytes32 _s
) external;
function pull(address _from, uint256 _amount) external;
function push(address _to, uint256 _amount) external;
function renounceOwnership() external;
function setBridgeContract(address _bridgeContract) external;
function symbol() external view returns (string memory);
function totalSupply() external view returns (uint256);
function transfer(address _to, uint256 _value) external returns (bool);
function transferAndCall(address _to, uint256 _value, bytes memory _data) external returns (bool);
function transferFrom(address _sender, address _recipient, uint256 _amount) external returns (bool);
function transferOwnership(address _newOwner) external;
function version() external view returns (string memory);
}
15 changes: 15 additions & 0 deletions contracts/interfaces/IWETHOmnibridgeRouter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

interface IWETHOmnibridgeRouter {
receive() external payable;

function WETH() external view returns (address);
function bridge() external view returns (address);
function claimTokens(address _token, address _to) external;
function onTokenBridged(address _token, uint256 _value, bytes memory _data) external;
function owner() external view returns (address);
function transferOwnership(address _newOwner) external;

function wrapAndRelayTokens(address _receiver) external payable;
}
10 changes: 7 additions & 3 deletions hardhat.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,25 @@ require("@nomicfoundation/hardhat-toolbox")
require("@openzeppelin/hardhat-upgrades")
require("hardhat-change-network")
require("dotenv").config()
const path = require("path")

require("./tasks/amb-e2e.js")
require("./tasks/xdai-e2e.js")
require("./tasks/omnibridge-e2e.js")

module.exports = {
// hardhat config
networks: {
hardhat: {
forking: {
url: process.env.MAINNET_JSON_RPC_URL, //process.env.GNOSIS_JSON_RPC_URL,
url: process.env.GNOSIS_JSON_RPC_URL,
// url: process.env.GNOSIS_JSON_RPC_URL, // change the value when running test in fork gnosis environment,
// blockNumber: 35443343,
},
chainId: 1,
},
gnosis: {
accounts: [process.env.PRIVATE_KEY],
chainId: 1,
chainId: 100,
url: process.env.GNOSIS_JSON_RPC_URL,
},
mainnet: {
Expand Down
1 change: 1 addition & 0 deletions omnibridge
Submodule omnibridge added at c814f6
Loading