Skip to content
This repository has been archived by the owner on Dec 3, 2024. It is now read-only.

Commit

Permalink
initialization tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Lam committed Jul 22, 2024
1 parent 9e8b8b3 commit 5e638c7
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 19 deletions.
23 changes: 20 additions & 3 deletions contracts/test/ERC20TokenHomeTests.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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),
Expand Down Expand Up @@ -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
Expand Down
41 changes: 38 additions & 3 deletions contracts/test/ERC20TokenRemoteTests.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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({
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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_);
}
Expand Down
19 changes: 16 additions & 3 deletions contracts/test/NativeTokenHomeTests.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
);
Expand All @@ -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),
Expand Down Expand Up @@ -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);
}
Expand Down
58 changes: 48 additions & 10 deletions contracts/test/NativeTokenRemoteTests.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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({
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 5e638c7

Please sign in to comment.