This repository has been archived by the owner on Dec 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Matthew Lam
committed
Jul 22, 2024
1 parent
9e8b8b3
commit 5e638c7
Showing
4 changed files
with
122 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,14 +10,16 @@ import {TokenHomeTest} from "./TokenHomeTests.t.sol"; | |
import {IERC20SendAndCallReceiver} from "../src/interfaces/IERC20SendAndCallReceiver.sol"; | ||
import {SendTokensInput} from "../src/interfaces/ITokenTransferrer.sol"; | ||
import {ERC20TokenHomeUpgradeable} from "../src/TokenHome/ERC20TokenHomeUpgradeable.sol"; | ||
import {ERC20TokenHome} from "../src/TokenHome/ERC20TokenHome.sol"; | ||
import {IERC20} from "@openzeppelin/[email protected]/token/ERC20/IERC20.sol"; | ||
import {ExampleERC20} from "../lib/teleporter/contracts/src/mocks/ExampleERC20.sol"; | ||
import {SafeERC20} from "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC20.sol"; | ||
import {TeleporterMessageInput, TeleporterFeeInfo} from "@teleporter/ITeleporterMessenger.sol"; | ||
import {TokenScalingUtils} from "../src/utils/TokenScalingUtils.sol"; | ||
import {RemoteTokenTransferrerSettings} from "../src/TokenHome/interfaces/ITokenHome.sol"; | ||
import {Ownable} from "@openzeppelin/[email protected]/access/Ownable.sol"; | ||
import {Initializable} from "../src/utils/Initializable.sol"; | ||
import {Initializable as Initialization} from "../src/utils/Initializable.sol"; | ||
import {Initializable} from "@openzeppelin/[email protected]/proxy/utils/Initializable.sol"; | ||
|
||
contract ERC20TokenHomeTest is ERC20TokenTransferrerTest, TokenHomeTest { | ||
using SafeERC20 for IERC20; | ||
|
@@ -30,7 +32,7 @@ contract ERC20TokenHomeTest is ERC20TokenTransferrerTest, TokenHomeTest { | |
|
||
mockERC20 = new ExampleERC20(); | ||
tokenHomeDecimals = 6; | ||
app = new ERC20TokenHomeUpgradeable(Initializable.Allowed); | ||
app = new ERC20TokenHomeUpgradeable(Initialization.Allowed); | ||
app.initialize( | ||
MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
MOCK_TELEPORTER_MESSENGER_ADDRESS, | ||
|
@@ -47,6 +49,21 @@ contract ERC20TokenHomeTest is ERC20TokenTransferrerTest, TokenHomeTest { | |
/** | ||
* Initialization unit tests | ||
*/ | ||
function testNonUpgradeableInitialization() public { | ||
app = new ERC20TokenHome( | ||
MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(mockERC20), tokenHomeDecimals | ||
); | ||
assertEq(app.getBlockchainID(), DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID); | ||
} | ||
|
||
function testDisableInitialization() public { | ||
app = new ERC20TokenHomeUpgradeable(Initialization.Disallowed); | ||
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); | ||
app.initialize( | ||
MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(mockERC20), tokenHomeDecimals | ||
); | ||
} | ||
|
||
function testZeroTeleporterRegistryAddress() public { | ||
_invalidInitialization( | ||
address(0), | ||
|
@@ -283,7 +300,7 @@ contract ERC20TokenHomeTest is ERC20TokenTransferrerTest, TokenHomeTest { | |
uint8 tokenDecimals, | ||
bytes memory expectedErrorMessage | ||
) private { | ||
app = new ERC20TokenHomeUpgradeable(Initializable.Allowed); | ||
app = new ERC20TokenHomeUpgradeable(Initialization.Allowed); | ||
vm.expectRevert(expectedErrorMessage); | ||
app.initialize( | ||
teleporterRegistryAddress, teleporterManagerAddress, feeTokenAddress, tokenDecimals | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,12 +11,14 @@ import {IERC20SendAndCallReceiver} from "../src/interfaces/IERC20SendAndCallRece | |
import {TokenRemote} from "../src/TokenRemote/TokenRemote.sol"; | ||
import {TokenRemoteSettings} from "../src/TokenRemote/interfaces/ITokenRemote.sol"; | ||
import {ERC20TokenRemoteUpgradeable} from "../src/TokenRemote/ERC20TokenRemoteUpgradeable.sol"; | ||
import {ERC20TokenRemote} from "../src/TokenRemote/ERC20TokenRemote.sol"; | ||
import {SafeERC20} from "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC20.sol"; | ||
import {IERC20} from "@openzeppelin/[email protected]/token/ERC20/IERC20.sol"; | ||
import {ExampleERC20} from "../lib/teleporter/contracts/src/mocks/ExampleERC20.sol"; | ||
import {SendTokensInput} from "../src/interfaces/ITokenTransferrer.sol"; | ||
import {Ownable} from "@openzeppelin/[email protected]/access/Ownable.sol"; | ||
import {Initializable} from "../src/utils/Initializable.sol"; | ||
import {Initializable as Initialization} from "../src/utils/Initializable.sol"; | ||
import {Initializable} from "@openzeppelin/[email protected]/proxy/utils/Initializable.sol"; | ||
|
||
contract ERC20TokenRemoteTest is ERC20TokenTransferrerTest, TokenRemoteTest { | ||
using SafeERC20 for IERC20; | ||
|
@@ -51,6 +53,39 @@ contract ERC20TokenRemoteTest is ERC20TokenTransferrerTest, TokenRemoteTest { | |
/** | ||
* Initialization unit tests | ||
*/ | ||
function testNonUpgradeableInitialization() public { | ||
app = new ERC20TokenRemote( | ||
TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
teleporterManager: address(this), | ||
tokenHomeBlockchainID: DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID, | ||
tokenHomeAddress: DEFAULT_TOKEN_HOME_ADDRESS, | ||
tokenHomeDecimals: tokenHomeDecimals | ||
}), | ||
MOCK_TOKEN_NAME, | ||
MOCK_TOKEN_SYMBOL, | ||
tokenDecimals | ||
); | ||
assertEq(app.getBlockchainID(), DEFAULT_TOKEN_REMOTE_BLOCKCHAIN_ID); | ||
} | ||
|
||
function testDisableInitialization() public { | ||
app = new ERC20TokenRemoteUpgradeable(Initialization.Disallowed); | ||
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); | ||
app.initialize( | ||
TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
teleporterManager: address(this), | ||
tokenHomeBlockchainID: DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID, | ||
tokenHomeAddress: DEFAULT_TOKEN_HOME_ADDRESS, | ||
tokenHomeDecimals: tokenHomeDecimals | ||
}), | ||
MOCK_TOKEN_NAME, | ||
MOCK_TOKEN_SYMBOL, | ||
tokenDecimals | ||
); | ||
} | ||
|
||
function testZeroTeleporterRegistryAddress() public { | ||
_invalidInitialization( | ||
TokenRemoteSettings({ | ||
|
@@ -164,7 +199,7 @@ contract ERC20TokenRemoteTest is ERC20TokenTransferrerTest, TokenRemoteTest { | |
|
||
function _createNewRemoteInstance() internal override returns (TokenRemote) { | ||
ERC20TokenRemoteUpgradeable instance = | ||
new ERC20TokenRemoteUpgradeable(Initializable.Allowed); | ||
new ERC20TokenRemoteUpgradeable(Initialization.Allowed); | ||
instance.initialize( | ||
TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
|
@@ -288,7 +323,7 @@ contract ERC20TokenRemoteTest is ERC20TokenTransferrerTest, TokenRemoteTest { | |
uint8 tokenDecimals_, | ||
bytes memory expectedErrorMessage | ||
) private { | ||
app = new ERC20TokenRemoteUpgradeable(Initializable.Allowed); | ||
app = new ERC20TokenRemoteUpgradeable(Initialization.Allowed); | ||
vm.expectRevert(expectedErrorMessage); | ||
app.initialize(settings, tokenName, tokenSymbol, tokenDecimals_); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,13 +8,15 @@ pragma solidity 0.8.23; | |
import {TokenHomeTest} from "./TokenHomeTests.t.sol"; | ||
import {NativeTokenTransferrerTest} from "./NativeTokenTransferrerTests.t.sol"; | ||
import {NativeTokenHomeUpgradeable} from "../src/TokenHome/NativeTokenHomeUpgradeable.sol"; | ||
import {NativeTokenHome} from "../src/TokenHome/NativeTokenHome.sol"; | ||
import {IWrappedNativeToken} from "../src/interfaces/IWrappedNativeToken.sol"; | ||
import {INativeSendAndCallReceiver} from "../src/interfaces/INativeSendAndCallReceiver.sol"; | ||
import {WrappedNativeToken} from "../src/WrappedNativeToken.sol"; | ||
import {IERC20} from "@openzeppelin/[email protected]/token/ERC20/IERC20.sol"; | ||
import {SafeERC20} from "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC20.sol"; | ||
import {Ownable} from "@openzeppelin/[email protected]/access/Ownable.sol"; | ||
import {Initializable} from "../src/utils/Initializable.sol"; | ||
import {Initializable as Initialization} from "../src/utils/Initializable.sol"; | ||
import {Initializable} from "@openzeppelin/[email protected]/proxy/utils/Initializable.sol"; | ||
|
||
contract NativeTokenHomeTest is NativeTokenTransferrerTest, TokenHomeTest { | ||
using SafeERC20 for IERC20; | ||
|
@@ -31,7 +33,7 @@ contract NativeTokenHomeTest is NativeTokenTransferrerTest, TokenHomeTest { | |
|
||
WrappedNativeToken token = new WrappedNativeToken("AVAX"); | ||
wavax = token; | ||
app = new NativeTokenHomeUpgradeable(Initializable.Allowed); | ||
app = new NativeTokenHomeUpgradeable(Initialization.Allowed); | ||
app.initialize( | ||
MOCK_TELEPORTER_REGISTRY_ADDRESS, MOCK_TELEPORTER_MESSENGER_ADDRESS, address(wavax) | ||
); | ||
|
@@ -45,6 +47,17 @@ contract NativeTokenHomeTest is NativeTokenTransferrerTest, TokenHomeTest { | |
/** | ||
* Initialization unit tests | ||
*/ | ||
function testNonUpgradeableInitialization() public { | ||
app = new NativeTokenHome(MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(wavax)); | ||
assertEq(app.getBlockchainID(), DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID); | ||
} | ||
|
||
function testDisableInitialization() public { | ||
app = new NativeTokenHomeUpgradeable(Initialization.Disallowed); | ||
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); | ||
app.initialize(MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(wavax)); | ||
} | ||
|
||
function testZeroTeleporterRegistryAddress() public { | ||
_invalidInitialization( | ||
address(0), | ||
|
@@ -159,7 +172,7 @@ contract NativeTokenHomeTest is NativeTokenTransferrerTest, TokenHomeTest { | |
address wrappedTokenAddress, | ||
bytes memory expectedErrorMessage | ||
) private { | ||
app = new NativeTokenHomeUpgradeable(Initializable.Allowed); | ||
app = new NativeTokenHomeUpgradeable(Initialization.Allowed); | ||
vm.expectRevert(expectedErrorMessage); | ||
app.initialize(teleporterRegistryAddress, teleporterManagerAddress, wrappedTokenAddress); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,20 +9,22 @@ import {TokenRemoteTest} from "./TokenRemoteTests.t.sol"; | |
import {NativeTokenTransferrerTest} from "./NativeTokenTransferrerTests.t.sol"; | ||
import {INativeSendAndCallReceiver} from "../src/interfaces/INativeSendAndCallReceiver.sol"; | ||
import {TokenRemote} from "../src/TokenRemote/TokenRemote.sol"; | ||
import { | ||
NativeTokenRemoteUpgradeable, | ||
TeleporterMessageInput, | ||
TeleporterFeeInfo | ||
} from "../src/TokenRemote/NativeTokenRemoteUpgradeable.sol"; | ||
import {NativeTokenRemoteUpgradeable} from "../src/TokenRemote/NativeTokenRemoteUpgradeable.sol"; | ||
import {NativeTokenRemote} from "../src/TokenRemote/NativeTokenRemote.sol"; | ||
import {TokenRemoteSettings} from "../src/TokenRemote/interfaces/ITokenRemote.sol"; | ||
import {INativeMinter} from | ||
"@avalabs/[email protected]/contracts/interfaces/INativeMinter.sol"; | ||
import {ITeleporterMessenger, TeleporterMessageInput} from "@teleporter/ITeleporterMessenger.sol"; | ||
import { | ||
ITeleporterMessenger, | ||
TeleporterMessageInput, | ||
TeleporterFeeInfo | ||
} from "@teleporter/ITeleporterMessenger.sol"; | ||
import {SendTokensInput} from "../src/interfaces/ITokenTransferrer.sol"; | ||
import {IERC20} from "@openzeppelin/[email protected]/token/ERC20/IERC20.sol"; | ||
import {SafeERC20} from "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC20.sol"; | ||
import {ExampleERC20} from "../lib/teleporter/contracts/src/mocks/ExampleERC20.sol"; | ||
import {Initializable} from "../src/utils/Initializable.sol"; | ||
import {Initializable as Initialization} from "../src/utils/Initializable.sol"; | ||
import {Initializable} from "@openzeppelin/[email protected]/proxy/utils/Initializable.sol"; | ||
|
||
contract NativeTokenRemoteTest is NativeTokenTransferrerTest, TokenRemoteTest { | ||
using SafeERC20 for IERC20; | ||
|
@@ -45,6 +47,42 @@ contract NativeTokenRemoteTest is NativeTokenTransferrerTest, TokenRemoteTest { | |
_collateralizeTokenTransferrer(); | ||
} | ||
|
||
/** | ||
* Initialization unit tests | ||
*/ | ||
function testNonUpgradeableInitialization() public { | ||
app = new NativeTokenRemote({ | ||
settings: TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
teleporterManager: address(this), | ||
tokenHomeBlockchainID: DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID, | ||
tokenHomeAddress: DEFAULT_TOKEN_HOME_ADDRESS, | ||
tokenHomeDecimals: tokenHomeDecimals | ||
}), | ||
nativeAssetSymbol: DEFAULT_SYMBOL, | ||
initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, | ||
burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE | ||
}); | ||
assertEq(app.getBlockchainID(), DEFAULT_TOKEN_REMOTE_BLOCKCHAIN_ID); | ||
} | ||
|
||
function testDisableInitialization() public { | ||
app = new NativeTokenRemoteUpgradeable(Initialization.Disallowed); | ||
vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); | ||
app.initialize({ | ||
settings: TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
teleporterManager: address(this), | ||
tokenHomeBlockchainID: DEFAULT_TOKEN_HOME_BLOCKCHAIN_ID, | ||
tokenHomeAddress: DEFAULT_TOKEN_HOME_ADDRESS, | ||
tokenHomeDecimals: tokenHomeDecimals | ||
}), | ||
nativeAssetSymbol: DEFAULT_SYMBOL, | ||
initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, | ||
burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE | ||
}); | ||
} | ||
|
||
function testZeroInitialReserveImbalance() public { | ||
_invalidInitialization({ | ||
settings: TokenRemoteSettings({ | ||
|
@@ -300,7 +338,7 @@ contract NativeTokenRemoteTest is NativeTokenTransferrerTest, TokenRemoteTest { | |
|
||
function testReportBurnFeesNoRewardSuccess() public { | ||
// Create a new TokenRemote instance with no rewards for reporting burned fees. | ||
app = new NativeTokenRemoteUpgradeable(Initializable.Allowed); | ||
app = new NativeTokenRemoteUpgradeable(Initialization.Allowed); | ||
app.initialize({ | ||
settings: TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
|
@@ -356,7 +394,7 @@ contract NativeTokenRemoteTest is NativeTokenTransferrerTest, TokenRemoteTest { | |
|
||
function _createNewRemoteInstance() internal override returns (TokenRemote) { | ||
NativeTokenRemoteUpgradeable instance = | ||
new NativeTokenRemoteUpgradeable(Initializable.Allowed); | ||
new NativeTokenRemoteUpgradeable(Initialization.Allowed); | ||
instance.initialize({ | ||
settings: TokenRemoteSettings({ | ||
teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, | ||
|
@@ -500,7 +538,7 @@ contract NativeTokenRemoteTest is NativeTokenTransferrerTest, TokenRemoteTest { | |
uint256 burnedFeesReportingRewardPercentage_, | ||
bytes memory expectedErrorMessage | ||
) private { | ||
app = new NativeTokenRemoteUpgradeable(Initializable.Allowed); | ||
app = new NativeTokenRemoteUpgradeable(Initialization.Allowed); | ||
vm.expectRevert(expectedErrorMessage); | ||
app.initialize( | ||
settings, | ||
|