From d6b4fe1fd4c0d50a5a26a5b6728c47001183eff2 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 5 Dec 2023 14:10:08 +0700 Subject: [PATCH 01/73] test: setup integration test --- test/Base.t.sol | 8 +- .../bridge-manager/BridgeManagerInterface.sol | 33 +++ .../BridgeManager_IntergrationTest.t.sol | 52 ++++ test/init-test/DefaultTestConfig.sol | 88 ++++++ test/init-test/InitTest.sol | 250 ++++++++++++++++++ test/init-test/Structs.sol | 173 ++++++++++++ test/utils/Signers.sol | 19 ++ 7 files changed, 619 insertions(+), 4 deletions(-) create mode 100644 test/bridge/integration/bridge-manager/BridgeManagerInterface.sol create mode 100644 test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol create mode 100644 test/init-test/DefaultTestConfig.sol create mode 100644 test/init-test/InitTest.sol create mode 100644 test/init-test/Structs.sol create mode 100644 test/utils/Signers.sol diff --git a/test/Base.t.sol b/test/Base.t.sol index 652ff9f7..4ce74806 100644 --- a/test/Base.t.sol +++ b/test/Base.t.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.17 <0.9.0; -import { StdCheats } from "forge-std/StdCheats.sol"; +import {StdCheats} from "forge-std/Test.sol"; -import { Assertions } from "./utils/Assertions.sol"; -import { Utils } from "./utils/Utils.sol"; +import {Assertions} from "./utils/Assertions.sol"; +import {Utils} from "./utils/Utils.sol"; -import { IBridgeManagerEvents } from "@ronin/contracts/interfaces/bridge/events/IBridgeManagerEvents.sol"; +import {IBridgeManagerEvents} from "@ronin/contracts/interfaces/bridge/events/IBridgeManagerEvents.sol"; abstract contract Base_Test is Assertions, Utils, StdCheats, IBridgeManagerEvents {} diff --git a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol new file mode 100644 index 00000000..f0afff8e --- /dev/null +++ b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +// import "@openzeppelin/contracts/" +import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import {SignerUtils} from "@ronin/test/utils/Signers.sol"; +import {GlobalProposal} from "@ronin/contracts/libraries/GlobalProposal.sol"; + +contract BridgeManagerInterface is SignerUtils { + RoninBridgeManager internal _contract; + Account[] internal _signers; + + constructor(RoninBridgeManager bridgeManager, Account[] memory signers) { + _contract = bridgeManager; + _setSigners(signers); + } + + function _setSigners(Account[] memory signers) internal { + delete _signers; + for (uint256 i; i < signers.length; i++) { + _signers.push(signers[i]); + } + } + + function createGlobalProposal( + uint256 expiryTs, + GlobalProposal.TargetOption targetOption, + uint256 value_, + bytes memory calldata_, + uint256 gasAmount_, + uint256 nonce_ + ) public view returns (GlobalProposal.GlobalProposalDetail memory rs) {} +} diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol new file mode 100644 index 00000000..58c34241 --- /dev/null +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {console2} from "forge-std/console2.sol"; +import {StdStyle} from "forge-std/StdStyle.sol"; + +import {IBridgeManager} from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; +import {MockBridgeManager} from "@ronin/contracts/mocks/ronin/MockBridgeManager.sol"; +import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; + +import {Base_Test} from "@ronin/test/Base.t.sol"; +import {SignerUtils} from "@ronin/test/utils/Signers.sol"; +import {InitTest} from "@ronin/test/init-test/InitTest.sol"; +import "./BridgeManagerInterface.sol"; + +contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { + uint256 internal _operatorNum; + uint256 internal _bridgeAdminNumerator; + uint256 internal _bridgeAdminDenominator; + + MockBridge internal _bridgeContract; + RoninBridgeManager internal _bridgeManagerContract; + Account[] internal _operators; + BridgeManagerInterface _bridgeManagerInterface; + + function setUp() public virtual { + _setOperators(_getSigners(_operatorNum)); + _prepareDeploymentArgs(); + + init(); + } + + function _prepareDeploymentArgs() internal { + _operatorNum = 6; + _bridgeAdminNumerator = 2; + _bridgeAdminDenominator = 4; + } + + function _setOperators(Account[] memory operators) internal { + delete _operators; + for (uint256 i; i < operators.length; i++) { + _operators.push(operators[i]); + } + } + + function _deploy() internal { + _bridgeContract = new MockBridge(); + } + + function test_abc() external {} +} diff --git a/test/init-test/DefaultTestConfig.sol b/test/init-test/DefaultTestConfig.sol new file mode 100644 index 00000000..dace185a --- /dev/null +++ b/test/init-test/DefaultTestConfig.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./Structs.sol"; + +library DefaultTestConfig { + function get() public pure returns (InitTestInput memory rs) { + rs.roninGeneralConfig.bridgeContract = address(0); + rs.roninGeneralConfig.startedAtBlock = 0; + rs.mainchainGeneralConfig.bridgeContract = address(0); + rs.mainchainGeneralConfig.startedAtBlock = 0; + + // maintenanceArguments + rs.maintenanceArguments.minMaintenanceDurationInBlock = 100; + rs.maintenanceArguments.maxMaintenanceDurationInBlock = 1000; + rs.maintenanceArguments.minOffsetToStartSchedule = 200; + rs.maintenanceArguments.maxOffsetToStartSchedule = 200 * 7; + rs.maintenanceArguments.maxSchedules = 2; + rs.maintenanceArguments.cooldownSecsToMaintain = 0; + + // stakingArguments + rs.stakingArguments.minValidatorStakingAmount = 100; + rs.stakingArguments.maxCommissionRate = 100; + rs.stakingArguments.cooldownSecsToUndelegate = 3 * 86400; + rs.stakingArguments.waitingSecsToRevoke = 7 * 86400; + + //stakingVestingArguments + rs.stakingVestingArguments.blockProducerBonusPerBlock = 1000; + rs.stakingVestingArguments.bridgeOperatorBonusPerBlock = 1000; + rs.stakingVestingArguments.topupAmount = 100_000_000_000; + rs.stakingVestingArguments.fastFinalityRewardPercent = 1_00; + + //slashIndicatorArguments.bridgeOperatorSlashing + rs.slashIndicatorArguments.bridgeOperatorSlashing.missingVotesRatioTier1 = 10_00; + rs.slashIndicatorArguments.bridgeOperatorSlashing.missingVotesRatioTier2 = 20_00; + rs.slashIndicatorArguments.bridgeOperatorSlashing.jailDurationForMissingVotesRatioTier2 = 28800 * 2; + rs.slashIndicatorArguments.bridgeOperatorSlashing.skipBridgeOperatorSlashingThreshold = 10; + + //slashIndicatorArguments.bridgeVotingSlashing + rs.slashIndicatorArguments.bridgeVotingSlashing.bridgeVotingThreshold = 28800 * 3; + rs.slashIndicatorArguments.bridgeVotingSlashing.bridgeVotingSlashAmount = 10_000 * 1e18; + + //slashIndicatorArguments.doubleSignSlashing + rs.slashIndicatorArguments.doubleSignSlashing.slashDoubleSignAmount = 10 * 1e18; + rs.slashIndicatorArguments.doubleSignSlashing.doubleSigningJailUntilBlock = type(uint256).max; + rs.slashIndicatorArguments.doubleSignSlashing.doubleSigningOffsetLimitBlock = 28800; + + //slashIndicatorArguments.unavailabilitySlashing + rs.slashIndicatorArguments.unavailabilitySlashing.unavailabilityTier1Threshold = 5; + rs.slashIndicatorArguments.unavailabilitySlashing.unavailabilityTier2Threshold = 10; + rs.slashIndicatorArguments.unavailabilitySlashing.slashAmountForUnavailabilityTier2Threshold = 1e18; + rs.slashIndicatorArguments.unavailabilitySlashing.jailDurationForUnavailabilityTier2Threshold = 28800; + + //slashIndicatorArguments.creditScore + rs.slashIndicatorArguments.creditScore.gainCreditScore = 50; + rs.slashIndicatorArguments.creditScore.maxCreditScore = 600; + rs.slashIndicatorArguments.creditScore.bailOutCostMultiplier = 5; + rs.slashIndicatorArguments.creditScore.cutOffPercentageAfterBailout = 50_00; + + //roninValidatorSetArguments + rs.roninValidatorSetArguments.maxValidatorNumber = 4; + rs.roninValidatorSetArguments.maxPrioritizedValidatorNumber = 0; + rs.roninValidatorSetArguments.numberOfBlocksInEpoch = 600; + rs.roninValidatorSetArguments.maxValidatorCandidate = 10; + rs.roninValidatorSetArguments.minEffectiveDaysOnwards = 7; + rs.roninValidatorSetArguments.emergencyExitLockedAmount = 500; + rs.roninValidatorSetArguments.emergencyExpiryDuration = 14 * 86400; + + //roninTrustedOrganizationArguments + // rs.roninTrustedOrganizationArguments.trustedOrganizations = new TrustedOrganization[](0); + rs.roninTrustedOrganizationArguments.numerator = 0; + rs.roninTrustedOrganizationArguments.denominator = 1; + + //governanceAdminArguments + rs.governanceAdminArguments.proposalExpiryDuration = 60 * 60 * 24 * 14; // 14 days + + //bridgeManagerArguments + rs.bridgeManagerArguments.numerator = 70; + rs.bridgeManagerArguments.denominator = 100; + rs.bridgeManagerArguments.expiryDuration = 60 * 60 * 24 * 14; // 14 days + rs.bridgeManagerArguments.members = new BridgeManagerMemberStruct[](0); + rs.bridgeManagerArguments.targets = new TargetOptionStruct[](0); + + //bridgeRewardArguments + rs.bridgeRewardArguments.rewardPerPeriod = 5_000; + rs.bridgeRewardArguments.topupAmount = 100_000_000_000; + } +} diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol new file mode 100644 index 00000000..446fed91 --- /dev/null +++ b/test/init-test/InitTest.sol @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {console2} from "forge-std/console2.sol"; +import "../Base.t.sol"; +import "./Structs.sol"; + +import {DefaultTestConfig} from "./DefaultTestConfig.sol"; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxyV2} from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; + +import {BridgeTracking} from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; +import {BridgeSlash} from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; +import {BridgeReward} from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; +import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import {MainchainBridgeManager} from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; + +contract InitTest is Base_Test { + address _proxyAdmin; + InitTestInput internal _inputArguments; + + constructor() { + _proxyAdmin = _deployProxyAdmin(); + + _inputArguments.roninGeneralConfig = DefaultTestConfig.get().roninGeneralConfig; + _inputArguments.maintenanceArguments = DefaultTestConfig.get().maintenanceArguments; + _inputArguments.stakingVestingArguments = DefaultTestConfig.get().stakingVestingArguments; + _inputArguments.slashIndicatorArguments = DefaultTestConfig.get().slashIndicatorArguments; + _inputArguments.roninValidatorSetArguments = DefaultTestConfig.get().roninValidatorSetArguments; + _inputArguments.governanceAdminArguments = DefaultTestConfig.get().governanceAdminArguments; + _inputArguments.bridgeRewardArguments = DefaultTestConfig.get().bridgeRewardArguments; + + setBridgeManagerArgs(DefaultTestConfig.get().bridgeManagerArguments); + setRoninTrustedOrgArgs(DefaultTestConfig.get().roninTrustedOrganizationArguments); + } + + function setBridgeManagerArgs(BridgeManagerArguments memory arg) public { + _inputArguments.bridgeManagerArguments.denominator = arg.denominator; + _inputArguments.bridgeManagerArguments.numerator = arg.numerator; + _inputArguments.bridgeManagerArguments.expiryDuration = arg.expiryDuration; + + delete _inputArguments.bridgeManagerArguments.members; + for (uint256 i; i < arg.members.length; i++) { + _inputArguments.bridgeManagerArguments.members.push(arg.members[i]); + } + delete _inputArguments.bridgeManagerArguments.targets; + for (uint256 i; i < arg.members.length; i++) { + _inputArguments.bridgeManagerArguments.targets.push(arg.targets[i]); + } + } + + function setRoninTrustedOrgArgs(RoninTrustedOrganizationArguments memory arg) public { + _inputArguments.roninTrustedOrganizationArguments.denominator = arg.denominator; + _inputArguments.roninTrustedOrganizationArguments.numerator = arg.numerator; + + delete _inputArguments.roninTrustedOrganizationArguments.trustedOrganizations; + for (uint256 i; i < arg.trustedOrganizations.length; i++) { + _inputArguments.roninTrustedOrganizationArguments.trustedOrganizations.push(arg.trustedOrganizations[i]); + } + } + + function init() public returns (InitTestOutput memory output) { + _prepareAddressForGeneralConfig(); + output.bridgeTrackingAddress = _deployBridgeTracking(); + output.bridgeSlashAddress = _deployBridgeSlash(); + output.bridgeRewardAddress = _deployBridgeReward(); + output.roninBridgeManagerAddress = _deployRoninBridgeManager(); + output.mainchainBridgeManagerAddress = _deployMainchainBridgeManager(); + } + + function _prepareAddressForGeneralConfig() internal { + uint256 nonce = 1; + address deployer = address(this); + + nonce += 2; + _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(deployer, nonce); + nonce += 2; + _inputArguments.roninGeneralConfig.bridgeSlashContract = _calculateAddress(deployer, nonce); + nonce += 2; + _inputArguments.roninGeneralConfig.bridgeRewardContract = _calculateAddress(deployer, nonce); + + nonce += 1; + _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(deployer, nonce); + + console2.log("Deployer", deployer); + console2.log("Expected bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); + console2.log("Expected bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); + console2.log("Expected bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); + console2.log("Expected bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + } + + function _deployBridgeContract() internal {} + + function _deployBridgeTracking() internal returns (address) { + BridgeTracking logic = new BridgeTracking(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + address(logic), + _proxyAdmin, + abi.encodeCall( + BridgeTracking.initialize, + ( + _inputArguments.roninGeneralConfig.bridgeContract, + _inputArguments.roninGeneralConfig.validatorContract.addr, + _inputArguments.roninGeneralConfig.startedAtBlock + ) + ) + ); + address result = address(proxy); + vm.label(result, "BridgeTrackingProxy"); + assertEq(result, _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); + return result; + } + + function _deployBridgeSlash() internal returns (address) { + BridgeSlash logic = new BridgeSlash(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + address(logic), + _proxyAdmin, + abi.encodeCall( + BridgeSlash.initialize, + ( + _inputArguments.roninGeneralConfig.validatorContract.addr, + _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, + _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr, + _inputArguments.roninGeneralConfig.governanceAdmin.addr + ) + ) + ); + address result = address(proxy); + vm.label(result, "BridgeSlashProxy"); + assertEq(result, _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); + return result; + } + + function _deployBridgeReward() internal returns (address) { + BridgeReward logic = new BridgeReward(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + address(logic), + _proxyAdmin, + abi.encodeCall( + BridgeReward.initialize, + ( + _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, + _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr, + _inputArguments.roninGeneralConfig.bridgeSlashContract.addr, + _inputArguments.roninGeneralConfig.validatorContract.addr, + _inputArguments.roninGeneralConfig.governanceAdmin.addr, + _inputArguments.bridgeRewardArguments.rewardPerPeriod + ) + ) + ); + address result = address(proxy); + vm.label(result, "BridgeSlashContract"); + assertEq(result, _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); + return result; + } + + function _deployRoninBridgeManager() internal returns (address) { + uint256 lengthMembers = _inputArguments.bridgeManagerArguments.members.length; + address[] memory operators = new address[](lengthMembers); + address[] memory governors = new address[](lengthMembers); + uint96[] memory weights = new uint96[](lengthMembers); + + for (uint256 i; i < lengthMembers; i++) { + operators[i] = _inputArguments.bridgeManagerArguments.members[i].operator; + governors[i] = _inputArguments.bridgeManagerArguments.members[i].governor; + weights[i] = _inputArguments.bridgeManagerArguments.members[i].weight; + } + + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](4); + address[] memory targets = new address[](4); + + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = _inputArguments.roninGeneralConfig.bridgeContract; + + options[1] = GlobalProposal.TargetOption.BridgeReward; + targets[1] = _inputArguments.roninGeneralConfig.bridgeRewardContract.addr; + + options[2] = GlobalProposal.TargetOption.BridgeSlash; + targets[2] = _inputArguments.roninGeneralConfig.bridgeSlashContract.addr; + + options[3] = GlobalProposal.TargetOption.BridgeTracking; + targets[3] = _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr; + + RoninBridgeManager bridgeManager = new RoninBridgeManager( + _inputArguments.bridgeManagerArguments.numerator, + _inputArguments.bridgeManagerArguments.denominator, + _inputArguments.roninGeneralConfig.roninChainId, + _inputArguments.bridgeManagerArguments.expiryDuration, + _inputArguments.roninGeneralConfig.bridgeContract, + wrapAddress(_inputArguments.roninGeneralConfig.bridgeSlashContract.addr), + operators, + governors, + weights, + options, + targets + ); + + address result = address(bridgeManager); + assertEq(result, _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + return result; + } + + function _deployMainchainBridgeManager() internal returns (address) { + uint256 lengthMembers = _inputArguments.bridgeManagerArguments.members.length; + address[] memory operators = new address[](lengthMembers); + address[] memory governors = new address[](lengthMembers); + uint96[] memory weights = new uint96[](lengthMembers); + + for (uint256 i; i < lengthMembers; i++) { + operators[i] = _inputArguments.bridgeManagerArguments.members[i].operator; + governors[i] = _inputArguments.bridgeManagerArguments.members[i].governor; + weights[i] = _inputArguments.bridgeManagerArguments.members[i].weight; + } + + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](1); + address[] memory targets = new address[](1); + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = _inputArguments.mainchainGeneralConfig.bridgeContract; + + MainchainBridgeManager bridgeManager = new MainchainBridgeManager( + _inputArguments.bridgeManagerArguments.numerator, + _inputArguments.bridgeManagerArguments.denominator, + _inputArguments.mainchainGeneralConfig.roninChainId, + _inputArguments.mainchainGeneralConfig.bridgeContract, + getEmptyAddressArray(), + operators, + governors, + weights, + options, + targets + ); + + return address(bridgeManager); + } + + function _deployProxyAdmin() internal returns (address) { + return address(new ProxyAdmin()); + } + + function _calculateAddress(address deployer, uint256 nonce) internal pure returns (AddressExtended memory rs) { + rs.nonce = nonce; + rs.addr = computeCreateAddress(deployer, nonce); + } + + function _calculateSalt(uint256 nonce) internal pure returns (bytes32) { + return keccak256(abi.encode(uint256(nonce))); + } +} diff --git a/test/init-test/Structs.sol b/test/init-test/Structs.sol new file mode 100644 index 00000000..1e31b49b --- /dev/null +++ b/test/init-test/Structs.sol @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@ronin/contracts/libraries/GlobalProposal.sol"; + +struct MaintenanceArguments { + uint256 minMaintenanceDurationInBlock; + uint256 maxMaintenanceDurationInBlock; + uint256 minOffsetToStartSchedule; + uint256 maxOffsetToStartSchedule; + uint256 maxSchedules; + uint256 cooldownSecsToMaintain; +} + +struct StakingArguments { + uint256 minValidatorStakingAmount; + uint256 minCommissionRate; + uint256 maxCommissionRate; + uint256 cooldownSecsToUndelegate; + uint256 waitingSecsToRevoke; +} + +struct StakingVestingArguments { + uint256 blockProducerBonusPerBlock; + uint256 bridgeOperatorBonusPerBlock; + uint256 topupAmount; + uint256 fastFinalityRewardPercent; +} + +struct BridgeOperatorSlashingConfig { + uint256 missingVotesRatioTier1; + uint256 missingVotesRatioTier2; + uint256 jailDurationForMissingVotesRatioTier2; + uint256 skipBridgeOperatorSlashingThreshold; +} + +struct BridgeVotingSlashingConfig { + uint256 bridgeVotingThreshold; + uint256 bridgeVotingSlashAmount; +} + +struct DoubleSignSlashingConfig { + uint256 slashDoubleSignAmount; + uint256 doubleSigningJailUntilBlock; + uint256 doubleSigningOffsetLimitBlock; +} + +struct UnavailabilitySlashing { + uint256 unavailabilityTier1Threshold; + uint256 unavailabilityTier2Threshold; + uint256 slashAmountForUnavailabilityTier2Threshold; + uint256 jailDurationForUnavailabilityTier2Threshold; +} + +struct CreditScoreConfig { + uint256 gainCreditScore; + uint256 maxCreditScore; + uint256 bailOutCostMultiplier; + uint256 cutOffPercentageAfterBailout; +} + +struct SlashIndicatorArguments { + BridgeOperatorSlashingConfig bridgeOperatorSlashing; + BridgeVotingSlashingConfig bridgeVotingSlashing; + DoubleSignSlashingConfig doubleSignSlashing; + UnavailabilitySlashing unavailabilitySlashing; + CreditScoreConfig creditScore; +} + +struct RoninValidatorSetArguments { + uint256 maxValidatorNumber; + uint256 maxValidatorCandidate; + uint256 maxPrioritizedValidatorNumber; + uint256 numberOfBlocksInEpoch; + uint256 minEffectiveDaysOnwards; + uint256 emergencyExitLockedAmount; + uint256 emergencyExpiryDuration; +} + +struct TrustedOrganization { + address consensusAddr; + address governor; + address bridgeVoter; + uint256 weight; + uint256 addedBlock; +} + +struct RoninTrustedOrganizationArguments { + TrustedOrganization[] trustedOrganizations; + uint256 numerator; + uint256 denominator; +} + +struct RoninGovernanceAdminArguments { + uint256 proposalExpiryDuration; +} + +struct TargetOptionStruct { + GlobalProposal.TargetOption option; + address target; +} + +struct BridgeManagerMemberStruct { + address governor; + address operator; + uint96 weight; +} + +struct BridgeManagerArguments { + uint256 numerator; + uint256 denominator; + uint256 expiryDuration; + BridgeManagerMemberStruct[] members; + TargetOptionStruct[] targets; +} + +struct BridgeRewardArguments { + uint256 rewardPerPeriod; + uint256 topupAmount; +} + +struct AddressExtended { + address addr; + uint256 nonce; +} + +struct GeneralConfig { + uint256 roninChainId; + address bridgeContract; + uint256 startedAtBlock; + AddressExtended governanceAdmin; + AddressExtended maintenanceContract; + AddressExtended fastFinalityTrackingContract; + AddressExtended stakingVestingContract; + AddressExtended slashIndicatorContract; + AddressExtended stakingContract; + AddressExtended validatorContract; + AddressExtended roninTrustedOrganizationContract; + AddressExtended bridgeTrackingContract; + AddressExtended bridgeManagerContract; + AddressExtended bridgeSlashContract; + AddressExtended bridgeRewardContract; +} + +struct InitTestInput { + GeneralConfig roninGeneralConfig; + GeneralConfig mainchainGeneralConfig; + MaintenanceArguments maintenanceArguments; + StakingArguments stakingArguments; + StakingVestingArguments stakingVestingArguments; + SlashIndicatorArguments slashIndicatorArguments; + RoninValidatorSetArguments roninValidatorSetArguments; + RoninTrustedOrganizationArguments roninTrustedOrganizationArguments; + RoninGovernanceAdminArguments governanceAdminArguments; + BridgeManagerArguments bridgeManagerArguments; + BridgeRewardArguments bridgeRewardArguments; +} + +struct InitTestOutput { + address roninGovernanceAdminAddress; + address maintenanceContractAddress; + address roninTrustedOrganizationAddress; + address fastFinalityTrackingAddress; + address slashContractAddress; + address stakingContractAddress; + address stakingVestingContractAddress; + address validatorContractAddress; + address bridgeTrackingAddress; + address bridgeSlashAddress; + address bridgeRewardAddress; + address roninBridgeManagerAddress; + address mainchainBridgeManagerAddress; +} diff --git a/test/utils/Signers.sol b/test/utils/Signers.sol new file mode 100644 index 00000000..706277aa --- /dev/null +++ b/test/utils/Signers.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {StdCheats} from "forge-std/StdCheats.sol"; + +contract SignerUtils is StdCheats { + uint256 public constant ACCOUNT_SIGNER = uint256(keccak256("@ronin-bridge-contract.signer.index")); + uint256 internal _accountNonce; + + function _getSigners(uint256 num) internal returns (Account[] memory accounts) { + uint256 startIdx = _accountNonce; + uint256 endIdx = _accountNonce += num; + accounts = new Account[](num); + + for (uint256 i = startIdx; i < endIdx; i++) { + accounts[i] = makeAccount(string(abi.encodePacked(ACCOUNT_SIGNER, i))); + } + } +} From af2731065db1423ebadc3a7c5d00f7bd300c912e Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 5 Dec 2023 14:11:39 +0700 Subject: [PATCH 02/73] chore: storage layout --- logs/contract-code-sizes.log | 4 ++ ..._NonConditional_GatewayUpgrade_Approve.log | 30 ------------ ...lation_20231016_ReconfigBridgeTracking.log | 30 ------------ logs/storage/BaseStaking.sol:BaseStaking.log | 11 ----- ...erInterface.sol:BridgeManagerInterface.log | 5 ++ .../CandidateManager.sol:CandidateManager.log | 8 ---- .../CandidateStaking.sol:CandidateStaking.log | 15 ------ ...oinbaseExecution.sol:CoinbaseExecution.log | 43 ----------------- .../CommonStorage.sol:CommonStorage.log | 31 ------------ .../ContractConfig.sol:ContractConfig.log | 2 - logs/storage/CreditScore.sol:CreditScore.log | 9 ---- .../DelegatorStaking.sol:DelegatorStaking.log | 12 ----- ...dSlots.sol:HasBridgeTrackingDeprecated.log | 1 - ...Slots.sol:HasGovernanceAdminDeprecated.log | 1 - ...atedSlots.sol:HasMaintenanceDeprecated.log | 1 - ...dSlots.sol:HasSlashIndicatorDeprecated.log | 1 - ...precatedSlots.sol:HasStakingDeprecated.log | 1 - ...dSlots.sol:HasStakingVestingDeprecated.log | 1 - ...catedSlots.sol:HasTrustedOrgDeprecated.log | 1 - .../EmergencyExit.sol:EmergencyExit.log | 39 --------------- ...alityTracking.sol:FastFinalityTracking.log | 4 -- logs/storage/Forwarder.sol:Forwarder.log | 2 - .../GovernanceAdmin.sol:GovernanceAdmin.log | 7 --- logs/storage/InitTest.sol:InitTest.log | 5 ++ .../JailingStorage.sol:JailingStorage.log | 7 --- logs/storage/Maintenance.sol:Maintenance.log | 10 ---- logs/storage/MockActor.sol:MockActor.log | 1 - ...orwarderTarget.sol:MockForwarderTarget.log | 2 - logs/storage/MockLogic.sol:MockLogicBase.log | 1 - logs/storage/MockLogic.sol:MockLogicV1.log | 1 - logs/storage/MockLogic.sol:MockLogicV2.log | 1 - ...datorSet.sol:MockLogicValidatorSetCore.log | 1 - ...lidatorSet.sol:MockLogicValidatorSetV1.log | 1 - ...lidatorSet.sol:MockLogicValidatorSetV2.log | 1 - ...lidatorSet.sol:MockPCUPickValidatorSet.log | 1 - ...rtValidators.sol:MockPCUSortValidators.log | 1 - ...ubleSign.sol:MockPCUValidateDoubleSign.log | 1 - ...nality.sol:MockPCUValidateFastFinality.log | 1 - ...nded.sol:MockRoninValidatorSetExtended.log | 47 ------------------- ...ockRoninValidatorSetOverridePrecompile.log | 45 ------------------ ...xtended.sol:MockSlashIndicatorExtended.log | 38 --------------- logs/storage/MockSorting.sol:MockSorting.log | 1 - logs/storage/MockStaking.sol:MockStaking.log | 10 ---- ...lback.sol:MockPaymentFallbackExpensive.log | 1 - .../MockTransferFallback.sol:MockTransfer.log | 1 - ...atorContract.sol:MockValidatorContract.log | 1 - .../MockValidatorSet.sol:MockValidatorSet.log | 1 - .../NetworkConfig.sol:NetworkConfig.log | 2 - logs/storage/Profile.sol:Profile.log | 5 -- .../ProfileHandler.sol:ProfileHandler.log | 3 -- .../ProfileStorage.sol:ProfileStorage.log | 3 -- .../ReentrancyGuard.sol:ReentrancyGuard.log | 1 - ...ewardCalculation.sol:RewardCalculation.log | 4 -- ...vernanceAdmin.sol:RoninGovernanceAdmin.log | 9 ---- ...anization.sol:RoninTrustedOrganization.log | 13 ----- ...oninValidatorSet.sol:RoninValidatorSet.log | 45 ------------------ .../RuntimeConfig.sol:RuntimeConfig.log | 1 - logs/storage/Script.sol:Script.log | 8 ---- logs/storage/Signers.sol:SignerUtils.log | 3 ++ ...BridgeOperator.sol:SlashBridgeOperator.log | 6 --- ...lashBridgeVoting.sol:SlashBridgeVoting.log | 7 --- .../SlashDoubleSign.sol:SlashDoubleSign.log | 6 --- ...lashFastFinality.sol:SlashFastFinality.log | 4 -- .../SlashIndicator.sol:SlashIndicator.log | 38 --------------- ...Unavailability.sol:SlashUnavailability.log | 8 ---- ...lashingExecution.sol:SlashingExecution.log | 33 ------------- logs/storage/Staking.sol:Staking.log | 18 ------- .../StakingVesting.sol:StakingVesting.log | 7 --- .../TimingStorage.sol:TimingStorage.log | 6 --- ...orInfoStorage.sol:ValidatorInfoStorage.log | 7 --- ...foStorageV2.sol:ValidatorInfoStorageV2.log | 7 --- .../VaultForwarder.sol:VaultForwarder.log | 2 - 72 files changed, 17 insertions(+), 668 deletions(-) delete mode 100644 logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log delete mode 100644 logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log delete mode 100644 logs/storage/BaseStaking.sol:BaseStaking.log create mode 100644 logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log delete mode 100644 logs/storage/CandidateManager.sol:CandidateManager.log delete mode 100644 logs/storage/CandidateStaking.sol:CandidateStaking.log delete mode 100644 logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log delete mode 100644 logs/storage/CommonStorage.sol:CommonStorage.log delete mode 100644 logs/storage/ContractConfig.sol:ContractConfig.log delete mode 100644 logs/storage/CreditScore.sol:CreditScore.log delete mode 100644 logs/storage/DelegatorStaking.sol:DelegatorStaking.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log delete mode 100644 logs/storage/EmergencyExit.sol:EmergencyExit.log delete mode 100644 logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log delete mode 100644 logs/storage/Forwarder.sol:Forwarder.log delete mode 100644 logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log create mode 100644 logs/storage/InitTest.sol:InitTest.log delete mode 100644 logs/storage/JailingStorage.sol:JailingStorage.log delete mode 100644 logs/storage/Maintenance.sol:Maintenance.log delete mode 100644 logs/storage/MockActor.sol:MockActor.log delete mode 100644 logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicBase.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicV1.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicV2.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log delete mode 100644 logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log delete mode 100644 logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log delete mode 100644 logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log delete mode 100644 logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log delete mode 100644 logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log delete mode 100644 logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log delete mode 100644 logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log delete mode 100644 logs/storage/MockSorting.sol:MockSorting.log delete mode 100644 logs/storage/MockStaking.sol:MockStaking.log delete mode 100644 logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log delete mode 100644 logs/storage/MockTransferFallback.sol:MockTransfer.log delete mode 100644 logs/storage/MockValidatorContract.sol:MockValidatorContract.log delete mode 100644 logs/storage/MockValidatorSet.sol:MockValidatorSet.log delete mode 100644 logs/storage/NetworkConfig.sol:NetworkConfig.log delete mode 100644 logs/storage/Profile.sol:Profile.log delete mode 100644 logs/storage/ProfileHandler.sol:ProfileHandler.log delete mode 100644 logs/storage/ProfileStorage.sol:ProfileStorage.log delete mode 100644 logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log delete mode 100644 logs/storage/RewardCalculation.sol:RewardCalculation.log delete mode 100644 logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log delete mode 100644 logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log delete mode 100644 logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log delete mode 100644 logs/storage/RuntimeConfig.sol:RuntimeConfig.log delete mode 100644 logs/storage/Script.sol:Script.log create mode 100644 logs/storage/Signers.sol:SignerUtils.log delete mode 100644 logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log delete mode 100644 logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log delete mode 100644 logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log delete mode 100644 logs/storage/SlashFastFinality.sol:SlashFastFinality.log delete mode 100644 logs/storage/SlashIndicator.sol:SlashIndicator.log delete mode 100644 logs/storage/SlashUnavailability.sol:SlashUnavailability.log delete mode 100644 logs/storage/SlashingExecution.sol:SlashingExecution.log delete mode 100644 logs/storage/Staking.sol:Staking.log delete mode 100644 logs/storage/StakingVesting.sol:StakingVesting.log delete mode 100644 logs/storage/TimingStorage.sol:TimingStorage.log delete mode 100644 logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log delete mode 100644 logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log delete mode 100644 logs/storage/VaultForwarder.sol:VaultForwarder.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 14ecbfb5..252f9194 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -3,10 +3,12 @@ | Address | 0.086 | 24.49 | | AddressArrayUtils | 0.086 | 24.49 | | Ballot | 0.086 | 24.49 | +| BridgeManagerInterface | 0.933 | 23.643 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.031 | 18.545 | | BridgeSlash | 5.635 | 18.941 | | BridgeTracking | 6.873 | 17.703 | +| DefaultTestConfig | 3.367 | 21.209 | | ECDSA | 0.086 | 24.49 | | ERC1967Proxy | 0.177 | 24.399 | | ERC20 | 2.172 | 22.404 | @@ -36,8 +38,10 @@ | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | +| ProxyAdmin | 1.683 | 22.893 | | RoninBridgeManager | 24.579 | -0.003 | | RoninGatewayV3 | 19.755 | 4.821 | +| SignerUtils | 0.155 | 24.421 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | | Strings | 0.086 | 24.49 | diff --git a/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log b/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log deleted file mode 100644 index 9c5c39c5..00000000 --- a/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log +++ /dev/null @@ -1,30 +0,0 @@ -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_sender (storage_slot: 11) (offset: 5) (type: address) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_network (storage_slot: 11) (offset: 25) (type: enum Network) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_config (storage_slot: 12) (offset: 0) (type: contract GeneralConfig) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_alreadySetUp (storage_slot: 12) (offset: 20) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_overriddenArgs (storage_slot: 13) (offset: 0) (type: bytes) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_logger (storage_slot: 14) (offset: 0) (type: contract LogGenerator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_deployScript (storage_slot: 15) (offset: 0) (type: mapping(enum ContractKey => contract IDeployScript)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_staking (storage_slot: 16) (offset: 0) (type: contract Staking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninGateway (storage_slot: 17) (offset: 0) (type: contract RoninGatewayV3) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeTracking (storage_slot: 18) (offset: 0) (type: contract BridgeTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_slashIndicator (storage_slot: 19) (offset: 0) (type: contract SlashIndicator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_validatorSet (storage_slot: 20) (offset: 0) (type: contract RoninValidatorSet) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_stakingVesting (storage_slot: 21) (offset: 0) (type: contract StakingVesting) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_trustedOrgs (storage_slot: 22) (offset: 0) (type: contract RoninTrustedOrganization) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_fastFinalityTracking (storage_slot: 23) (offset: 0) (type: contract FastFinalityTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninGovernanceAdmin (storage_slot: 24) (offset: 0) (type: contract RoninGovernanceAdmin) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeSlash (storage_slot: 25) (offset: 0) (type: contract BridgeSlash) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeReward (storage_slot: 26) (offset: 0) (type: contract BridgeReward) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninBridgeManager (storage_slot: 27) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_depositCount (storage_slot: 28) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log b/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log deleted file mode 100644 index ce28053c..00000000 --- a/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log +++ /dev/null @@ -1,30 +0,0 @@ -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_sender (storage_slot: 11) (offset: 5) (type: address) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_network (storage_slot: 11) (offset: 25) (type: enum Network) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_config (storage_slot: 12) (offset: 0) (type: contract GeneralConfig) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_alreadySetUp (storage_slot: 12) (offset: 20) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_overriddenArgs (storage_slot: 13) (offset: 0) (type: bytes) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_logger (storage_slot: 14) (offset: 0) (type: contract LogGenerator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_deployScript (storage_slot: 15) (offset: 0) (type: mapping(enum ContractKey => contract IDeployScript)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_staking (storage_slot: 16) (offset: 0) (type: contract Staking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninGateway (storage_slot: 17) (offset: 0) (type: contract RoninGatewayV3) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeTracking (storage_slot: 18) (offset: 0) (type: contract BridgeTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_slashIndicator (storage_slot: 19) (offset: 0) (type: contract SlashIndicator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_validatorSet (storage_slot: 20) (offset: 0) (type: contract RoninValidatorSet) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_stakingVesting (storage_slot: 21) (offset: 0) (type: contract StakingVesting) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_trustedOrgs (storage_slot: 22) (offset: 0) (type: contract RoninTrustedOrganization) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_fastFinalityTracking (storage_slot: 23) (offset: 0) (type: contract FastFinalityTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninGovernanceAdmin (storage_slot: 24) (offset: 0) (type: contract RoninGovernanceAdmin) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeSlash (storage_slot: 25) (offset: 0) (type: contract BridgeSlash) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeReward (storage_slot: 26) (offset: 0) (type: contract BridgeReward) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninBridgeManager (storage_slot: 27) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_depositCount (storage_slot: 28) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/BaseStaking.sol:BaseStaking.log b/logs/storage/BaseStaking.sol:BaseStaking.log deleted file mode 100644 index 5d335a80..00000000 --- a/logs/storage/BaseStaking.sol:BaseStaking.log +++ /dev/null @@ -1,11 +0,0 @@ -src/ronin/staking/BaseStaking.sol:BaseStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/BaseStaking.sol:BaseStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/BaseStaking.sol:BaseStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log new file mode 100644 index 00000000..65f53f69 --- /dev/null +++ b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log @@ -0,0 +1,5 @@ +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_contract (storage_slot: 9) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_signers (storage_slot: 10) (offset: 0) (type: struct StdCheatsSafe.Account[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/CandidateManager.sol:CandidateManager.log b/logs/storage/CandidateManager.sol:CandidateManager.log deleted file mode 100644 index bdeb4552..00000000 --- a/logs/storage/CandidateManager.sol:CandidateManager.log +++ /dev/null @@ -1,8 +0,0 @@ -src/ronin/validator/CandidateManager.sol:CandidateManager:______deprecatedStakingContract (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CandidateManager.sol:CandidateManager:_maxValidatorCandidate (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidates (storage_slot: 2) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateIndex (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateInfo (storage_slot: 4) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_minEffectiveDaysOnwards (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateCommissionChangeSchedule (storage_slot: 6) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:______gap (storage_slot: 7) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/CandidateStaking.sol:CandidateStaking.log b/logs/storage/CandidateStaking.sol:CandidateStaking.log deleted file mode 100644 index f0c10a4c..00000000 --- a/logs/storage/CandidateStaking.sol:CandidateStaking.log +++ /dev/null @@ -1,15 +0,0 @@ -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_minValidatorStakingAmount (storage_slot: 108) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_maxCommissionRate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_minCommissionRate (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 111) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log b/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log deleted file mode 100644 index a9fc400f..00000000 --- a/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log +++ /dev/null @@ -1,43 +0,0 @@ -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedStakingVesting (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedBridgeTracking (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedMaintenance (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedSlashIndicator (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedStakingContract (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxValidatorCandidate (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidates (storage_slot: 114) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateIndex (storage_slot: 115) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateInfo (storage_slot: 116) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_minEffectiveDaysOnwards (storage_slot: 117) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateCommissionChangeSchedule (storage_slot: 118) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 119) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedTrustedOrg (storage_slot: 167) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxValidatorNumber (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:validatorCount (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_validators (storage_slot: 170) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_validatorMap (storage_slot: 171) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxPrioritizedValidatorNumber (storage_slot: 172) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 173) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningReward (storage_slot: 223) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_delegatingReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_totalFastFinalityReward (storage_slot: 225) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_fastFinalityReward (storage_slot: 226) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_totalDeprecatedReward (storage_slot: 227) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExitLockedAmount (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExpiryDuration (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lockedConsensusList (storage_slot: 230) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_exitInfo (storage_slot: 231) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lockedFundReleased (storage_slot: 232) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 233) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/CommonStorage.sol:CommonStorage.log b/logs/storage/CommonStorage.sol:CommonStorage.log deleted file mode 100644 index 496ce3f8..00000000 --- a/logs/storage/CommonStorage.sol:CommonStorage.log +++ /dev/null @@ -1,31 +0,0 @@ -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______deprecatedTrustedOrg (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_maxValidatorNumber (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:validatorCount (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_validators (storage_slot: 111) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_validatorMap (storage_slot: 112) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_maxPrioritizedValidatorNumber (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 114) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningReward (storage_slot: 164) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_delegatingReward (storage_slot: 165) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_totalFastFinalityReward (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_fastFinalityReward (storage_slot: 167) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_totalDeprecatedReward (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExitLockedAmount (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExpiryDuration (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lockedConsensusList (storage_slot: 171) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_exitInfo (storage_slot: 172) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lockedFundReleased (storage_slot: 173) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 174) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/ContractConfig.sol:ContractConfig.log b/logs/storage/ContractConfig.sol:ContractConfig.log deleted file mode 100644 index 6a4bfa74..00000000 --- a/logs/storage/ContractConfig.sol:ContractConfig.log +++ /dev/null @@ -1,2 +0,0 @@ -script/configs/ContractConfig.sol:ContractConfig:_contractNameMap (storage_slot: 0) (offset: 0) (type: mapping(enum ContractKey => string)) (numberOfBytes: 32) -script/configs/ContractConfig.sol:ContractConfig:_contractAddrMap (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/CreditScore.sol:CreditScore.log b/logs/storage/CreditScore.sol:CreditScore.log deleted file mode 100644 index 16460f69..00000000 --- a/logs/storage/CreditScore.sol:CreditScore.log +++ /dev/null @@ -1,9 +0,0 @@ -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______deprecatedMaintenance (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_checkBailedOutAtPeriod (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_creditScore (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_gainCreditScore (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_maxCreditScore (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_bailOutCostMultiplier (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_cutOffPercentageAfterBailout (storage_slot: 7) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______gap (storage_slot: 8) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/DelegatorStaking.sol:DelegatorStaking.log b/logs/storage/DelegatorStaking.sol:DelegatorStaking.log deleted file mode 100644 index c61104f9..00000000 --- a/logs/storage/DelegatorStaking.sol:DelegatorStaking.log +++ /dev/null @@ -1,12 +0,0 @@ -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 108) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log deleted file mode 100644 index 0febbc68..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasBridgeTrackingDeprecated:______deprecatedBridgeTracking (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log deleted file mode 100644 index e6272b38..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasGovernanceAdminDeprecated:______deprecatedGovernanceAdmin (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log deleted file mode 100644 index dbf4b7f9..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasMaintenanceDeprecated:______deprecatedMaintenance (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log deleted file mode 100644 index a662ed6b..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasSlashIndicatorDeprecated:______deprecatedSlashIndicator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log deleted file mode 100644 index 087ef625..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasStakingDeprecated:______deprecatedStakingContract (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log deleted file mode 100644 index d54a8106..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasStakingVestingDeprecated:______deprecatedStakingVesting (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log deleted file mode 100644 index 7e172367..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasTrustedOrgDeprecated:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/EmergencyExit.sol:EmergencyExit.log b/logs/storage/EmergencyExit.sol:EmergencyExit.log deleted file mode 100644 index d4d1a1c5..00000000 --- a/logs/storage/EmergencyExit.sol:EmergencyExit.log +++ /dev/null @@ -1,39 +0,0 @@ -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedStakingContract (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxValidatorCandidate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidates (storage_slot: 110) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateIndex (storage_slot: 111) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateInfo (storage_slot: 112) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_minEffectiveDaysOnwards (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateCommissionChangeSchedule (storage_slot: 114) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 115) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedTrustedOrg (storage_slot: 163) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxValidatorNumber (storage_slot: 164) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:validatorCount (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_validators (storage_slot: 166) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_validatorMap (storage_slot: 167) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxPrioritizedValidatorNumber (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningReward (storage_slot: 219) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_delegatingReward (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_totalFastFinalityReward (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_fastFinalityReward (storage_slot: 222) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_totalDeprecatedReward (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExitLockedAmount (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExpiryDuration (storage_slot: 225) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lockedConsensusList (storage_slot: 226) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_exitInfo (storage_slot: 227) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lockedFundReleased (storage_slot: 228) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 229) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log b/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log deleted file mode 100644 index ee98716d..00000000 --- a/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_tracker (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(address => uint256))) (numberOfBytes: 32) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_latestTrackingBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Forwarder.sol:Forwarder.log b/logs/storage/Forwarder.sol:Forwarder.log deleted file mode 100644 index 3bbe2ca0..00000000 --- a/logs/storage/Forwarder.sol:Forwarder.log +++ /dev/null @@ -1,2 +0,0 @@ -src/extensions/forwarder/Forwarder.sol:Forwarder:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) -src/extensions/forwarder/Forwarder.sol:Forwarder:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log b/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log deleted file mode 100644 index 9fde3fd0..00000000 --- a/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log +++ /dev/null @@ -1,7 +0,0 @@ -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:______deprecatedGovernanceAdmin (storage_slot: 3) (offset: 0) (type: address) (numberOfBytes: 20) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:______deprecatedBridge (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:roninChainId (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:DOMAIN_SEPARATOR (storage_slot: 6) (offset: 0) (type: bytes32) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log new file mode 100644 index 00000000..8e04232f --- /dev/null +++ b/logs/storage/InitTest.sol:InitTest.log @@ -0,0 +1,5 @@ +test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) +test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 8) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 9) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) \ No newline at end of file diff --git a/logs/storage/JailingStorage.sol:JailingStorage.log b/logs/storage/JailingStorage.sol:JailingStorage.log deleted file mode 100644 index c49d99a9..00000000 --- a/logs/storage/JailingStorage.sol:JailingStorage.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_miningRewardDeprecatedAtPeriod (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_miningRewardBailoutCutOffAtPeriod (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_blockProducerJailedBlock (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_emergencyExitJailedTimestamp (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_cannotBailoutUntilBlock (storage_slot: 5) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:______gap (storage_slot: 6) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/Maintenance.sol:Maintenance.log b/logs/storage/Maintenance.sol:Maintenance.log deleted file mode 100644 index 506085b2..00000000 --- a/logs/storage/Maintenance.sol:Maintenance.log +++ /dev/null @@ -1,10 +0,0 @@ -src/ronin/Maintenance.sol:Maintenance:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/Maintenance.sol:Maintenance:_initialized (storage_slot: 0) (offset: 20) (type: uint8) (numberOfBytes: 1) -src/ronin/Maintenance.sol:Maintenance:_initializing (storage_slot: 0) (offset: 21) (type: bool) (numberOfBytes: 1) -src/ronin/Maintenance.sol:Maintenance:_schedule (storage_slot: 1) (offset: 0) (type: mapping(address => struct IMaintenance.Schedule)) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:minMaintenanceDurationInBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxMaintenanceDurationInBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:minOffsetToStartSchedule (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxOffsetToStartSchedule (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxSchedule (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:cooldownSecsToMaintain (storage_slot: 7) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockActor.sol:MockActor.log b/logs/storage/MockActor.sol:MockActor.log deleted file mode 100644 index 87f6178c..00000000 --- a/logs/storage/MockActor.sol:MockActor.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockActor.sol:MockActor:_target (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log b/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log deleted file mode 100644 index 2d1ae176..00000000 --- a/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log +++ /dev/null @@ -1,2 +0,0 @@ -src/mocks/forwarder/MockForwarderTarget.sol:MockForwarderTarget:owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/forwarder/MockForwarderTarget.sol:MockForwarderTarget:data (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicBase.log b/logs/storage/MockLogic.sol:MockLogicBase.log deleted file mode 100644 index e4194ab3..00000000 --- a/logs/storage/MockLogic.sol:MockLogicBase.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicBase:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicV1.log b/logs/storage/MockLogic.sol:MockLogicV1.log deleted file mode 100644 index 808478be..00000000 --- a/logs/storage/MockLogic.sol:MockLogicV1.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicV1:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicV2.log b/logs/storage/MockLogic.sol:MockLogicV2.log deleted file mode 100644 index fd63f46e..00000000 --- a/logs/storage/MockLogic.sol:MockLogicV2.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicV2:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log deleted file mode 100644 index ce86c075..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetCore:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log deleted file mode 100644 index ca0dfaf4..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetV1:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log deleted file mode 100644 index c67332e8..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetV2:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log b/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log deleted file mode 100644 index 52a58ea6..00000000 --- a/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet:_precompileSortValidatorAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log b/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log deleted file mode 100644 index f725feef..00000000 --- a/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUSortValidators.sol:MockPCUSortValidators:_precompileSortValidatorAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log b/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log deleted file mode 100644 index 1b14189f..00000000 --- a/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign:_precompileValidateDoubleSignAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log b/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log deleted file mode 100644 index 0fcf5bb7..00000000 --- a/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality:_precompileValidateFastFinalityAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log b/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log deleted file mode 100644 index 93e02c72..00000000 --- a/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log +++ /dev/null @@ -1,47 +0,0 @@ -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initialized (storage_slot: 278) (offset: 0) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_epochs (storage_slot: 279) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log b/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log deleted file mode 100644 index 1a407314..00000000 --- a/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log +++ /dev/null @@ -1,45 +0,0 @@ -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log b/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log deleted file mode 100644 index 591a1ff9..00000000 --- a/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log +++ /dev/null @@ -1,38 +0,0 @@ -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashFastFinalityAmount (storage_slot: 29) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_fastFinalityJailUntilBlock (storage_slot: 30) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_processedEvidence (storage_slot: 31) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 32) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedTrustedOrg (storage_slot: 53) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedGovernanceAdmin (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingSlashed (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingThreshold (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingSlashAmount (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 58) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedMaintenance (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_missingVotesRatioTier1 (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_missingVotesRatioTier2 (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_jailDurationForMissingVotesRatioTier2 (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_skipBridgeOperatorSlashingThreshold (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 113) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:lastUnavailabilitySlashedBlock (storage_slot: 163) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityIndicator (storage_slot: 164) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityTier1Threshold (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityTier2Threshold (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 167) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_checkBailedOutAtPeriod (storage_slot: 219) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_creditScore (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_gainCreditScore (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_maxCreditScore (storage_slot: 222) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bailOutCostMultiplier (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_cutOffPercentageAfterBailout (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 225) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_initialized (storage_slot: 275) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_initializing (storage_slot: 275) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockSorting.sol:MockSorting.log b/logs/storage/MockSorting.sol:MockSorting.log deleted file mode 100644 index f74bb34b..00000000 --- a/logs/storage/MockSorting.sol:MockSorting.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/sorting/MockSorting.sol:MockSorting:data (storage_slot: 0) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockStaking.sol:MockStaking.log b/logs/storage/MockStaking.sol:MockStaking.log deleted file mode 100644 index 4d0ca927..00000000 --- a/logs/storage/MockStaking.sol:MockStaking.log +++ /dev/null @@ -1,10 +0,0 @@ -src/mocks/MockStaking.sol:MockStaking:_accumulatedRps (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_userReward (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_stakingPool (storage_slot: 2) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:______gap (storage_slot: 3) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockStaking.sol:MockStaking:_stakingAmount (storage_slot: 53) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_periodSlashed (storage_slot: 54) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_stakingTotal (storage_slot: 55) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:lastUpdatedPeriod (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:pendingReward (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:poolAddr (storage_slot: 58) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log b/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log deleted file mode 100644 index 289cda1d..00000000 --- a/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/MockTransferFallback.sol:MockPaymentFallbackExpensive:array (storage_slot: 0) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockTransferFallback.sol:MockTransfer.log b/logs/storage/MockTransferFallback.sol:MockTransfer.log deleted file mode 100644 index 86a2f036..00000000 --- a/logs/storage/MockTransferFallback.sol:MockTransfer.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/MockTransferFallback.sol:MockTransfer:track (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockValidatorContract.sol:MockValidatorContract.log b/logs/storage/MockValidatorContract.sol:MockValidatorContract.log deleted file mode 100644 index 22f150da..00000000 --- a/logs/storage/MockValidatorContract.sol:MockValidatorContract.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/ronin/MockValidatorContract.sol:MockValidatorContract:_currentPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockValidatorSet.sol:MockValidatorSet.log b/logs/storage/MockValidatorSet.sol:MockValidatorSet.log deleted file mode 100644 index aa1c0f87..00000000 --- a/logs/storage/MockValidatorSet.sol:MockValidatorSet.log +++ /dev/null @@ -1 +0,0 @@ -test/mocks/MockValidatorSet.sol:MockValidatorSet:_period (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/NetworkConfig.sol:NetworkConfig.log b/logs/storage/NetworkConfig.sol:NetworkConfig.log deleted file mode 100644 index 741ea1a8..00000000 --- a/logs/storage/NetworkConfig.sol:NetworkConfig.log +++ /dev/null @@ -1,2 +0,0 @@ -script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 0) (offset: 0) (type: mapping(enum Network => struct NetworkConfig.NetworkData)) (numberOfBytes: 32) -script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 1) (offset: 0) (type: mapping(uint256 => enum Network)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Profile.sol:Profile.log b/logs/storage/Profile.sol:Profile.log deleted file mode 100644 index cda28fd2..00000000 --- a/logs/storage/Profile.sol:Profile.log +++ /dev/null @@ -1,5 +0,0 @@ -src/ronin/profile/Profile.sol:Profile:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/Profile.sol:Profile:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/Profile.sol:Profile:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) -src/ronin/profile/Profile.sol:Profile:_initialized (storage_slot: 51) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/profile/Profile.sol:Profile:_initializing (storage_slot: 51) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/ProfileHandler.sol:ProfileHandler.log b/logs/storage/ProfileHandler.sol:ProfileHandler.log deleted file mode 100644 index e20a196d..00000000 --- a/logs/storage/ProfileHandler.sol:ProfileHandler.log +++ /dev/null @@ -1,3 +0,0 @@ -src/ronin/profile/ProfileHandler.sol:ProfileHandler:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/ProfileHandler.sol:ProfileHandler:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/ProfileHandler.sol:ProfileHandler:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ProfileStorage.sol:ProfileStorage.log b/logs/storage/ProfileStorage.sol:ProfileStorage.log deleted file mode 100644 index c5901219..00000000 --- a/logs/storage/ProfileStorage.sol:ProfileStorage.log +++ /dev/null @@ -1,3 +0,0 @@ -src/ronin/profile/ProfileStorage.sol:ProfileStorage:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/ProfileStorage.sol:ProfileStorage:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/ProfileStorage.sol:ProfileStorage:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log b/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log deleted file mode 100644 index 030c7832..00000000 --- a/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log +++ /dev/null @@ -1 +0,0 @@ -lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol:ReentrancyGuard:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RewardCalculation.sol:RewardCalculation.log b/logs/storage/RewardCalculation.sol:RewardCalculation.log deleted file mode 100644 index a0c73f41..00000000 --- a/logs/storage/RewardCalculation.sol:RewardCalculation.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_accumulatedRps (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_userReward (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_stakingPool (storage_slot: 2) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:______gap (storage_slot: 3) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log b/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log deleted file mode 100644 index 9cd914d9..00000000 --- a/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log +++ /dev/null @@ -1,9 +0,0 @@ -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedGovernanceAdmin (storage_slot: 3) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedBridge (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:roninChainId (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:DOMAIN_SEPARATOR (storage_slot: 6) (offset: 0) (type: bytes32) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedValidator (storage_slot: 7) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:_emergencyExitPoll (storage_slot: 8) (offset: 0) (type: mapping(bytes32 => struct IsolatedGovernance.Vote)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log b/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log deleted file mode 100644 index 2182fd66..00000000 --- a/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log +++ /dev/null @@ -1,13 +0,0 @@ -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_num (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_denom (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_totalWeight (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_nonce (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_consensusWeight (storage_slot: 5) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_governorWeight (storage_slot: 6) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_bridgeVoterWeight (storage_slot: 7) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_addedBlock (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_consensusList (storage_slot: 9) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_governorList (storage_slot: 10) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_bridgeVoterList (storage_slot: 11) (offset: 0) (type: address[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log b/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log deleted file mode 100644 index 63f50686..00000000 --- a/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log +++ /dev/null @@ -1,45 +0,0 @@ -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/RuntimeConfig.sol:RuntimeConfig.log b/logs/storage/RuntimeConfig.sol:RuntimeConfig.log deleted file mode 100644 index e82e095a..00000000 --- a/logs/storage/RuntimeConfig.sol:RuntimeConfig.log +++ /dev/null @@ -1 +0,0 @@ -script/configs/RuntimeConfig.sol:RuntimeConfig:_options (storage_slot: 0) (offset: 0) (type: struct RuntimeConfig.Options) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Script.sol:Script.log b/logs/storage/Script.sol:Script.log deleted file mode 100644 index 2ec2cf03..00000000 --- a/logs/storage/Script.sol:Script.log +++ /dev/null @@ -1,8 +0,0 @@ -lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/Signers.sol:SignerUtils.log b/logs/storage/Signers.sol:SignerUtils.log new file mode 100644 index 00000000..efa2af9d --- /dev/null +++ b/logs/storage/Signers.sol:SignerUtils.log @@ -0,0 +1,3 @@ +test/utils/Signers.sol:SignerUtils:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/utils/Signers.sol:SignerUtils:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/utils/Signers.sol:SignerUtils:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log b/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log deleted file mode 100644 index 6c8f7051..00000000 --- a/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_missingVotesRatioTier1 (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_missingVotesRatioTier2 (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_jailDurationForMissingVotesRatioTier2 (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_skipBridgeOperatorSlashingThreshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:______gap (storage_slot: 5) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log b/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log deleted file mode 100644 index af9e0312..00000000 --- a/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedTrustedOrg (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedGovernanceAdmin (storage_slot: 2) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingSlashed (storage_slot: 3) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingThreshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingSlashAmount (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log b/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log deleted file mode 100644 index b6dc66a4..00000000 --- a/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) \ No newline at end of file diff --git a/logs/storage/SlashFastFinality.sol:SlashFastFinality.log b/logs/storage/SlashFastFinality.sol:SlashFastFinality.log deleted file mode 100644 index 3111c5b1..00000000 --- a/logs/storage/SlashFastFinality.sol:SlashFastFinality.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_slashFastFinalityAmount (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_fastFinalityJailUntilBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_processedEvidence (storage_slot: 2) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:______gap (storage_slot: 3) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) \ No newline at end of file diff --git a/logs/storage/SlashIndicator.sol:SlashIndicator.log b/logs/storage/SlashIndicator.sol:SlashIndicator.log deleted file mode 100644 index 4ad5b31d..00000000 --- a/logs/storage/SlashIndicator.sol:SlashIndicator.log +++ /dev/null @@ -1,38 +0,0 @@ -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashFastFinalityAmount (storage_slot: 29) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_fastFinalityJailUntilBlock (storage_slot: 30) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_processedEvidence (storage_slot: 31) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 32) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedTrustedOrg (storage_slot: 53) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedGovernanceAdmin (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingSlashed (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingThreshold (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingSlashAmount (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 58) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedMaintenance (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_missingVotesRatioTier1 (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_missingVotesRatioTier2 (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_jailDurationForMissingVotesRatioTier2 (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_skipBridgeOperatorSlashingThreshold (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 113) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:lastUnavailabilitySlashedBlock (storage_slot: 163) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityIndicator (storage_slot: 164) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityTier1Threshold (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityTier2Threshold (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 167) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_checkBailedOutAtPeriod (storage_slot: 219) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_creditScore (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_gainCreditScore (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_maxCreditScore (storage_slot: 222) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bailOutCostMultiplier (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_cutOffPercentageAfterBailout (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 225) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_initialized (storage_slot: 275) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_initializing (storage_slot: 275) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/SlashUnavailability.sol:SlashUnavailability.log b/logs/storage/SlashUnavailability.sol:SlashUnavailability.log deleted file mode 100644 index 197eae77..00000000 --- a/logs/storage/SlashUnavailability.sol:SlashUnavailability.log +++ /dev/null @@ -1,8 +0,0 @@ -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:lastUnavailabilitySlashedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityIndicator (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityTier1Threshold (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityTier2Threshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:______gap (storage_slot: 7) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashingExecution.sol:SlashingExecution.log b/logs/storage/SlashingExecution.sol:SlashingExecution.log deleted file mode 100644 index b74e53ad..00000000 --- a/logs/storage/SlashingExecution.sol:SlashingExecution.log +++ /dev/null @@ -1,33 +0,0 @@ -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedSlashIndicator (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedStakingContract (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedTrustedOrg (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_maxValidatorNumber (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:validatorCount (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_validators (storage_slot: 113) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_validatorMap (storage_slot: 114) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_maxPrioritizedValidatorNumber (storage_slot: 115) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 116) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningReward (storage_slot: 166) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_delegatingReward (storage_slot: 167) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_totalFastFinalityReward (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_fastFinalityReward (storage_slot: 169) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_totalDeprecatedReward (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExitLockedAmount (storage_slot: 171) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExpiryDuration (storage_slot: 172) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lockedConsensusList (storage_slot: 173) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_exitInfo (storage_slot: 174) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lockedFundReleased (storage_slot: 175) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 176) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/Staking.sol:Staking.log b/logs/storage/Staking.sol:Staking.log deleted file mode 100644 index ea051cf3..00000000 --- a/logs/storage/Staking.sol:Staking.log +++ /dev/null @@ -1,18 +0,0 @@ -src/ronin/staking/Staking.sol:Staking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/Staking.sol:Staking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/Staking.sol:Staking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/Staking.sol:Staking:_minValidatorStakingAmount (storage_slot: 108) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_maxCommissionRate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_minCommissionRate (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 111) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 159) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/Staking.sol:Staking:_initialized (storage_slot: 209) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/staking/Staking.sol:Staking:_initializing (storage_slot: 209) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StakingVesting.sol:StakingVesting.log b/logs/storage/StakingVesting.sol:StakingVesting.log deleted file mode 100644 index 7d90c530..00000000 --- a/logs/storage/StakingVesting.sol:StakingVesting.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/StakingVesting.sol:StakingVesting:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/StakingVesting.sol:StakingVesting:_initialized (storage_slot: 0) (offset: 20) (type: uint8) (numberOfBytes: 1) -src/ronin/StakingVesting.sol:StakingVesting:_initializing (storage_slot: 0) (offset: 21) (type: bool) (numberOfBytes: 1) -src/ronin/StakingVesting.sol:StakingVesting:_blockProducerBonusPerBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:_bridgeOperatorBonusPerBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:lastBlockSendingBonus (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:_fastFinalityRewardPercentage (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/TimingStorage.sol:TimingStorage.log b/logs/storage/TimingStorage.sol:TimingStorage.log deleted file mode 100644 index 168f4da4..00000000 --- a/logs/storage/TimingStorage.sol:TimingStorage.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log b/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log deleted file mode 100644 index f2b067cf..00000000 --- a/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_maxValidatorNumber (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:validatorCount (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_validators (storage_slot: 3) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_validatorMap (storage_slot: 4) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_maxPrioritizedValidatorNumber (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log b/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log deleted file mode 100644 index 05579d12..00000000 --- a/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_maxValidatorNumber (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:validatorCount (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_validators (storage_slot: 3) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_validatorMap (storage_slot: 4) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_maxPrioritizedValidatorNumber (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/VaultForwarder.sol:VaultForwarder.log b/logs/storage/VaultForwarder.sol:VaultForwarder.log deleted file mode 100644 index fb8421bf..00000000 --- a/logs/storage/VaultForwarder.sol:VaultForwarder.log +++ /dev/null @@ -1,2 +0,0 @@ -src/ronin/VaultForwarder.sol:VaultForwarder:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) -src/ronin/VaultForwarder.sol:VaultForwarder:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) \ No newline at end of file From 6a28e430bd3a519ad66a263ad2e0b2d88192fe98 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 5 Dec 2023 14:40:31 +0700 Subject: [PATCH 03/73] test: setup integration test --- .../BridgeManager_IntergrationTest.t.sol | 10 ++-- test/init-test/InitTest.sol | 60 ++++++++++--------- test/init-test/Structs.sol | 27 +++++---- 3 files changed, 52 insertions(+), 45 deletions(-) diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol index 58c34241..a0de2069 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol @@ -11,6 +11,7 @@ import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; import {Base_Test} from "@ronin/test/Base.t.sol"; import {SignerUtils} from "@ronin/test/utils/Signers.sol"; +import {InitTestOutput} from "@ronin/test/init-test/Structs.sol"; import {InitTest} from "@ronin/test/init-test/InitTest.sol"; import "./BridgeManagerInterface.sol"; @@ -28,7 +29,10 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { _setOperators(_getSigners(_operatorNum)); _prepareDeploymentArgs(); - init(); + InitTestOutput memory output = init(); + + _bridgeContract = MockBridge(output.bridgeContractAddress); + _bridgeManagerContract = RoninBridgeManager(output.roninBridgeManagerAddress); } function _prepareDeploymentArgs() internal { @@ -44,9 +48,5 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { } } - function _deploy() internal { - _bridgeContract = new MockBridge(); - } - function test_abc() external {} } diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 446fed91..7fcf47ed 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -7,7 +7,6 @@ import "./Structs.sol"; import {DefaultTestConfig} from "./DefaultTestConfig.sol"; -import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import {TransparentUpgradeableProxyV2} from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; import {BridgeTracking} from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; @@ -15,14 +14,12 @@ import {BridgeSlash} from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; import {BridgeReward} from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import {MainchainBridgeManager} from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; contract InitTest is Base_Test { - address _proxyAdmin; InitTestInput internal _inputArguments; constructor() { - _proxyAdmin = _deployProxyAdmin(); - _inputArguments.roninGeneralConfig = DefaultTestConfig.get().roninGeneralConfig; _inputArguments.maintenanceArguments = DefaultTestConfig.get().maintenanceArguments; _inputArguments.stakingVestingArguments = DefaultTestConfig.get().stakingVestingArguments; @@ -62,17 +59,21 @@ contract InitTest is Base_Test { function init() public returns (InitTestOutput memory output) { _prepareAddressForGeneralConfig(); - output.bridgeTrackingAddress = _deployBridgeTracking(); - output.bridgeSlashAddress = _deployBridgeSlash(); - output.bridgeRewardAddress = _deployBridgeReward(); - output.roninBridgeManagerAddress = _deployRoninBridgeManager(); - output.mainchainBridgeManagerAddress = _deployMainchainBridgeManager(); + + output.bridgeContractAddress = payable(_deployBridgeContract()); + output.bridgeTrackingAddress = payable(_deployBridgeTracking()); + output.bridgeSlashAddress = payable(_deployBridgeSlash()); + output.bridgeRewardAddress = payable(_deployBridgeReward()); + output.roninBridgeManagerAddress = payable(_deployRoninBridgeManager()); + output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); } function _prepareAddressForGeneralConfig() internal { - uint256 nonce = 1; + uint256 nonce = 0; address deployer = address(this); - + nonce += 2; + _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; + _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; nonce += 2; _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(deployer, nonce); nonce += 2; @@ -83,20 +84,26 @@ contract InitTest is Base_Test { nonce += 1; _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(deployer, nonce); - console2.log("Deployer", deployer); - console2.log("Expected bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); - console2.log("Expected bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); - console2.log("Expected bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); - console2.log("Expected bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + // console2.log("Deployer", deployer); + // console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); + // console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); + // console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); + // console2.log(" > bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); } - function _deployBridgeContract() internal {} + function _deployBridgeContract() internal returns (address) { + MockBridge logic = new MockBridge(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2(address(logic), address(this), abi.encode()); + address bridgeContract = address(proxy); + vm.label(bridgeContract, "BridgeContract"); + return bridgeContract; + } function _deployBridgeTracking() internal returns (address) { BridgeTracking logic = new BridgeTracking(); TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( address(logic), - _proxyAdmin, + _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, abi.encodeCall( BridgeTracking.initialize, ( @@ -116,7 +123,7 @@ contract InitTest is Base_Test { BridgeSlash logic = new BridgeSlash(); TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( address(logic), - _proxyAdmin, + _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, abi.encodeCall( BridgeSlash.initialize, ( @@ -135,9 +142,11 @@ contract InitTest is Base_Test { function _deployBridgeReward() internal returns (address) { BridgeReward logic = new BridgeReward(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2{ + value: _inputArguments.bridgeRewardArguments.topupAmount + }( address(logic), - _proxyAdmin, + _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, abi.encodeCall( BridgeReward.initialize, ( @@ -151,7 +160,7 @@ contract InitTest is Base_Test { ) ); address result = address(proxy); - vm.label(result, "BridgeSlashContract"); + vm.label(result, "BridgeRewardProxy"); assertEq(result, _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); return result; } @@ -198,6 +207,7 @@ contract InitTest is Base_Test { ); address result = address(bridgeManager); + vm.label(result, "RoninBridgeManager"); assertEq(result, _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); return result; } @@ -231,14 +241,10 @@ contract InitTest is Base_Test { options, targets ); - + vm.label(address(bridgeManager), "MainchainBridgeManager"); return address(bridgeManager); } - function _deployProxyAdmin() internal returns (address) { - return address(new ProxyAdmin()); - } - function _calculateAddress(address deployer, uint256 nonce) internal pure returns (AddressExtended memory rs) { rs.nonce = nonce; rs.addr = computeCreateAddress(deployer, nonce); diff --git a/test/init-test/Structs.sol b/test/init-test/Structs.sol index 1e31b49b..afa6e96c 100644 --- a/test/init-test/Structs.sol +++ b/test/init-test/Structs.sol @@ -157,17 +157,18 @@ struct InitTestInput { } struct InitTestOutput { - address roninGovernanceAdminAddress; - address maintenanceContractAddress; - address roninTrustedOrganizationAddress; - address fastFinalityTrackingAddress; - address slashContractAddress; - address stakingContractAddress; - address stakingVestingContractAddress; - address validatorContractAddress; - address bridgeTrackingAddress; - address bridgeSlashAddress; - address bridgeRewardAddress; - address roninBridgeManagerAddress; - address mainchainBridgeManagerAddress; + address payable bridgeContractAddress; + address payable roninGovernanceAdminAddress; + address payable maintenanceContractAddress; + address payable roninTrustedOrganizationAddress; + address payable fastFinalityTrackingAddress; + address payable slashContractAddress; + address payable stakingContractAddress; + address payable stakingVestingContractAddress; + address payable validatorContractAddress; + address payable bridgeTrackingAddress; + address payable bridgeSlashAddress; + address payable bridgeRewardAddress; + address payable roninBridgeManagerAddress; + address payable mainchainBridgeManagerAddress; } From 175d78ade485a50faa27c886b40690a5a921bd4c Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 5 Dec 2023 14:41:38 +0700 Subject: [PATCH 04/73] chore: storage layout --- logs/contract-code-sizes.log | 1 - logs/storage/InitTest.sol:InitTest.log | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 252f9194..0bdff231 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -38,7 +38,6 @@ | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | -| ProxyAdmin | 1.683 | 22.893 | | RoninBridgeManager | 24.579 | -0.003 | | RoninGatewayV3 | 19.755 | 4.821 | | SignerUtils | 0.155 | 24.421 | diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log index 8e04232f..faeda060 100644 --- a/logs/storage/InitTest.sol:InitTest.log +++ b/logs/storage/InitTest.sol:InitTest.log @@ -1,5 +1,4 @@ test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 8) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 9) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) \ No newline at end of file +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) \ No newline at end of file From bb82db25a57cc65c2d2a8fae2da7ec7142ca2c65 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Mon, 11 Dec 2023 14:58:49 +0700 Subject: [PATCH 05/73] test: setup init test --- logs/contract-code-sizes.log | 59 ------------------- .../BridgeManager_IntergrationTest.t.sol | 49 ++++++++++++--- .../setConfig.RoninBridgeManager.t.sol | 15 +++++ test/init-test/InitTest.sol | 17 +++--- test/utils/Signers.sol | 10 ++-- 5 files changed, 70 insertions(+), 80 deletions(-) create mode 100644 test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 0bdff231..e69de29b 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -1,59 +0,0 @@ -| Contract | Size (kB) | Margin (kB) | -|-------------------------------------------------|-----------|-------------| -| Address | 0.086 | 24.49 | -| AddressArrayUtils | 0.086 | 24.49 | -| Ballot | 0.086 | 24.49 | -| BridgeManagerInterface | 0.933 | 23.643 | -| BridgeOperatorsBallot | 0.166 | 24.41 | -| BridgeReward | 6.031 | 18.545 | -| BridgeSlash | 5.635 | 18.941 | -| BridgeTracking | 6.873 | 17.703 | -| DefaultTestConfig | 3.367 | 21.209 | -| ECDSA | 0.086 | 24.49 | -| ERC1967Proxy | 0.177 | 24.399 | -| ERC20 | 2.172 | 22.404 | -| ERC20PresetMinterPauser | 6.368 | 18.208 | -| EnumerableSet | 0.086 | 24.49 | -| ErrorHandler | 0.086 | 24.49 | -| GlobalProposal | 0.166 | 24.41 | -| HasBridgeDeprecated | 0.063 | 24.513 | -| HasValidatorDeprecated | 0.063 | 24.513 | -| IsolatedGovernance | 0.086 | 24.49 | -| LibArrayUtils | 0.086 | 24.49 | -| LibTUint256Slot | 0.086 | 24.49 | -| MainchainBridgeManager | 19.332 | 5.244 | -| MainchainGatewayV3 | 18.187 | 6.389 | -| Math | 0.086 | 24.49 | -| MockBridge | 1.303 | 23.273 | -| MockBridgeManager | 1.247 | 23.329 | -| MockBridgeReward | 6.77 | 17.806 | -| MockBridgeSlash | 1.447 | 23.129 | -| MockBridgeTracking | 1.969 | 22.607 | -| MockGatewayForTracking | 1.662 | 22.914 | -| MockRoninBridgeManager | 24.579 | -0.003 | -| MockRoninGatewayV3Extended | 20.038 | 4.538 | -| MockTUint256Slot | 2.729 | 21.847 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.15 | 23.426 | -| MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | -| PRBMathUtils | 0.063 | 24.513 | -| PauseEnforcer | 4.548 | 20.028 | -| Proposal | 0.166 | 24.41 | -| RoninBridgeManager | 24.579 | -0.003 | -| RoninGatewayV3 | 19.755 | 4.821 | -| SignerUtils | 0.155 | 24.421 | -| StdStyle | 0.086 | 24.49 | -| StorageSlot | 0.086 | 24.49 | -| Strings | 0.086 | 24.49 | -| Token | 0.214 | 24.362 | -| Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.068 | 22.508 | -| TransparentUpgradeableProxyV2 | 2.361 | 22.215 | -| console | 0.086 | 24.49 | -| console2 | 0.086 | 24.49 | -| safeconsole | 0.086 | 24.49 | -| stdError | 0.591 | 23.985 | -| stdJson | 0.086 | 24.49 | -| stdMath | 0.086 | 24.49 | -| stdStorage | 0.086 | 24.49 | -| stdStorageSafe | 0.086 | 24.49 | - diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol index a0de2069..ee284d8e 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol @@ -5,40 +5,66 @@ import {console2} from "forge-std/console2.sol"; import {StdStyle} from "forge-std/StdStyle.sol"; import {IBridgeManager} from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; -import {MockBridgeManager} from "@ronin/contracts/mocks/ronin/MockBridgeManager.sol"; -import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; +import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import {MainchainBridgeManager} from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import {ContractType} from "@ronin/contracts/utils/ContractType.sol"; import {Base_Test} from "@ronin/test/Base.t.sol"; import {SignerUtils} from "@ronin/test/utils/Signers.sol"; -import {InitTestOutput} from "@ronin/test/init-test/Structs.sol"; import {InitTest} from "@ronin/test/init-test/InitTest.sol"; +import {DefaultTestConfig} from "@ronin/test/init-test/DefaultTestConfig.sol"; +import "@ronin/test/init-test/Structs.sol"; import "./BridgeManagerInterface.sol"; contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { uint256 internal _operatorNum; uint256 internal _bridgeAdminNumerator; uint256 internal _bridgeAdminDenominator; + Account[] internal _operators; + Account[] internal _governors; MockBridge internal _bridgeContract; - RoninBridgeManager internal _bridgeManagerContract; - Account[] internal _operators; + RoninBridgeManager internal _roninBridgeManager; + MainchainBridgeManager internal _mainchainBridgeManager; + BridgeManagerInterface _bridgeManagerInterface; function setUp() public virtual { - _setOperators(_getSigners(_operatorNum)); + _operatorNum = 6; + _setOperators(getSigners(_operatorNum)); + _setGovernors(getSigners(_operatorNum)); _prepareDeploymentArgs(); InitTestOutput memory output = init(); _bridgeContract = MockBridge(output.bridgeContractAddress); - _bridgeManagerContract = RoninBridgeManager(output.roninBridgeManagerAddress); + _roninBridgeManager = RoninBridgeManager(output.roninBridgeManagerAddress); + _mainchainBridgeManager = MainchainBridgeManager(output.mainchainBridgeManagerAddress); + + vm.roll(1); } function _prepareDeploymentArgs() internal { - _operatorNum = 6; _bridgeAdminNumerator = 2; _bridgeAdminDenominator = 4; + + BridgeManagerMemberStruct[] memory members = new BridgeManagerMemberStruct[](_operatorNum); + for (uint256 i; i < members.length; i++) { + members[i].operator = _operators[i].addr; + members[i].governor = _governors[i].addr; + members[i].weight = 100; + } + + BridgeManagerArguments memory arg = BridgeManagerArguments({ + numerator: _bridgeAdminNumerator, + denominator: _bridgeAdminDenominator, + expiryDuration: DefaultTestConfig.get().bridgeManagerArguments.expiryDuration, + members: members, + targets: DefaultTestConfig.get().bridgeManagerArguments.targets + }); + + setBridgeManagerArgs(arg); } function _setOperators(Account[] memory operators) internal { @@ -48,5 +74,10 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { } } - function test_abc() external {} + function _setGovernors(Account[] memory governors) internal { + delete _governors; + for (uint256 i; i < governors.length; i++) { + _governors.push(governors[i]); + } + } } diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol new file mode 100644 index 00000000..e751364a --- /dev/null +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "../BridgeManager_IntergrationTest.t.sol"; + +contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { + function setUp() public virtual override { + super.setUp(); + } + + function test_setConfigCorrect() external { + address bridgeContract = _roninBridgeManager.getContract(ContractType.BRIDGE); + address[] memory bridgeOperators = _roninBridgeManager.getBridgeOperators(); + } +} diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 7fcf47ed..33d5615c 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -42,7 +42,7 @@ contract InitTest is Base_Test { _inputArguments.bridgeManagerArguments.members.push(arg.members[i]); } delete _inputArguments.bridgeManagerArguments.targets; - for (uint256 i; i < arg.members.length; i++) { + for (uint256 i; i < arg.targets.length; i++) { _inputArguments.bridgeManagerArguments.targets.push(arg.targets[i]); } } @@ -65,14 +65,15 @@ contract InitTest is Base_Test { output.bridgeSlashAddress = payable(_deployBridgeSlash()); output.bridgeRewardAddress = payable(_deployBridgeReward()); output.roninBridgeManagerAddress = payable(_deployRoninBridgeManager()); - output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); + // output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); } function _prepareAddressForGeneralConfig() internal { uint256 nonce = 0; address deployer = address(this); - nonce += 2; + nonce += 1; _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; + nonce += 1; _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; nonce += 2; _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(deployer, nonce); @@ -84,11 +85,11 @@ contract InitTest is Base_Test { nonce += 1; _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(deployer, nonce); - // console2.log("Deployer", deployer); - // console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); - // console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); - // console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); - // console2.log(" > bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + console2.log("Deployer", deployer); + console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); + console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); + console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); + console2.log(" > bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); } function _deployBridgeContract() internal returns (address) { diff --git a/test/utils/Signers.sol b/test/utils/Signers.sol index 706277aa..5a184497 100644 --- a/test/utils/Signers.sol +++ b/test/utils/Signers.sol @@ -7,13 +7,15 @@ contract SignerUtils is StdCheats { uint256 public constant ACCOUNT_SIGNER = uint256(keccak256("@ronin-bridge-contract.signer.index")); uint256 internal _accountNonce; - function _getSigners(uint256 num) internal returns (Account[] memory accounts) { + function getSigners(uint256 num) internal returns (Account[] memory accounts) { + require(num >= 1, "Invalid number of signers"); uint256 startIdx = _accountNonce; - uint256 endIdx = _accountNonce += num; + uint256 endIdx = _accountNonce + num - 1; accounts = new Account[](num); - for (uint256 i = startIdx; i < endIdx; i++) { - accounts[i] = makeAccount(string(abi.encodePacked(ACCOUNT_SIGNER, i))); + for (uint256 i = startIdx; i <= endIdx; i++) { + accounts[i - startIdx] = makeAccount(string(abi.encodePacked(ACCOUNT_SIGNER, i))); } + _accountNonce += num - 1; } } From 208ba22137b1c19662ecb63d53b7fb91a41ca002 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 13 Dec 2023 14:08:52 +0700 Subject: [PATCH 06/73] chore: lint test --- foundry.toml | 1 + .../bridge-manager/BridgeManagerInterface.sol | 8 +++--- .../BridgeManager_IntergrationTest.t.sol | 26 +++++++++---------- test/init-test/InitTest.sol | 18 ++++++------- test/utils/Signers.sol | 2 +- 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/foundry.toml b/foundry.toml index c5d3cece..72a071b4 100644 --- a/foundry.toml +++ b/foundry.toml @@ -26,6 +26,7 @@ evm_version = 'shanghai' [fmt] line_length = 120 tab_width = 2 +bracket_spacing = true [profile.default.fuzz] runs = 256 diff --git a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol index f0afff8e..84367217 100644 --- a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol +++ b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.19; // import "@openzeppelin/contracts/" -import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import {SignerUtils} from "@ronin/test/utils/Signers.sol"; -import {GlobalProposal} from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import { SignerUtils } from "@ronin/test/utils/Signers.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; contract BridgeManagerInterface is SignerUtils { RoninBridgeManager internal _contract; @@ -29,5 +29,5 @@ contract BridgeManagerInterface is SignerUtils { bytes memory calldata_, uint256 gasAmount_, uint256 nonce_ - ) public view returns (GlobalProposal.GlobalProposalDetail memory rs) {} + ) public view returns (GlobalProposal.GlobalProposalDetail memory rs) { } } diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol index ee284d8e..02653965 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol @@ -1,19 +1,19 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import {console2} from "forge-std/console2.sol"; -import {StdStyle} from "forge-std/StdStyle.sol"; - -import {IBridgeManager} from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; -import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; -import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import {MainchainBridgeManager} from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; -import {ContractType} from "@ronin/contracts/utils/ContractType.sol"; - -import {Base_Test} from "@ronin/test/Base.t.sol"; -import {SignerUtils} from "@ronin/test/utils/Signers.sol"; -import {InitTest} from "@ronin/test/init-test/InitTest.sol"; -import {DefaultTestConfig} from "@ronin/test/init-test/DefaultTestConfig.sol"; +import { console2 } from "forge-std/console2.sol"; +import { StdStyle } from "forge-std/StdStyle.sol"; + +import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; +import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; + +import { Base_Test } from "@ronin/test/Base.t.sol"; +import { SignerUtils } from "@ronin/test/utils/Signers.sol"; +import { InitTest } from "@ronin/test/init-test/InitTest.sol"; +import { DefaultTestConfig } from "@ronin/test/init-test/DefaultTestConfig.sol"; import "@ronin/test/init-test/Structs.sol"; import "./BridgeManagerInterface.sol"; diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 33d5615c..2c5a2df3 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -1,20 +1,20 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import {console2} from "forge-std/console2.sol"; +import { console2 } from "forge-std/console2.sol"; import "../Base.t.sol"; import "./Structs.sol"; -import {DefaultTestConfig} from "./DefaultTestConfig.sol"; +import { DefaultTestConfig } from "./DefaultTestConfig.sol"; -import {TransparentUpgradeableProxyV2} from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; +import { TransparentUpgradeableProxyV2 } from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; -import {BridgeTracking} from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; -import {BridgeSlash} from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; -import {BridgeReward} from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; -import {RoninBridgeManager} from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import {MainchainBridgeManager} from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; -import {MockBridge} from "@ronin/contracts/mocks/MockBridge.sol"; +import { BridgeTracking } from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; +import { BridgeSlash } from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; +import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; contract InitTest is Base_Test { InitTestInput internal _inputArguments; diff --git a/test/utils/Signers.sol b/test/utils/Signers.sol index 5a184497..b20e5905 100644 --- a/test/utils/Signers.sol +++ b/test/utils/Signers.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import {StdCheats} from "forge-std/StdCheats.sol"; +import { StdCheats } from "forge-std/StdCheats.sol"; contract SignerUtils is StdCheats { uint256 public constant ACCOUNT_SIGNER = uint256(keccak256("@ronin-bridge-contract.signer.index")); From cd915f90936e406aca3be2fbf9278bf7a9e09c7c Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 14 Dec 2023 11:53:19 +0700 Subject: [PATCH 07/73] test: done setup --- .../bridge-manager/BridgeManagerInterface.sol | 1 - test/init-test/InitTest.sol | 42 ++++++++++++------- test/utils/Signers.sol | 2 +- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol index 84367217..62c7862b 100644 --- a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol +++ b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -// import "@openzeppelin/contracts/" import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { SignerUtils } from "@ronin/test/utils/Signers.sol"; import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 2c5a2df3..20013dc5 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -15,9 +15,12 @@ import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; +import { AddressArrayUtils } from "@ronin/contracts/libraries/AddressArrayUtils.sol"; contract InitTest is Base_Test { InitTestInput internal _inputArguments; + address internal _deployer; + address internal _proxyAdmin; constructor() { _inputArguments.roninGeneralConfig = DefaultTestConfig.get().roninGeneralConfig; @@ -58,45 +61,54 @@ contract InitTest is Base_Test { } function init() public returns (InitTestOutput memory output) { + _deployer = makeAddr("deployer"); + vm.deal(_deployer, _inputArguments.bridgeRewardArguments.topupAmount); + _proxyAdmin = makeAddr("proxyAdmin"); + _prepareAddressForGeneralConfig(); + vm.startPrank(_deployer); output.bridgeContractAddress = payable(_deployBridgeContract()); output.bridgeTrackingAddress = payable(_deployBridgeTracking()); output.bridgeSlashAddress = payable(_deployBridgeSlash()); output.bridgeRewardAddress = payable(_deployBridgeReward()); output.roninBridgeManagerAddress = payable(_deployRoninBridgeManager()); - // output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); + output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); + vm.stopPrank(); } function _prepareAddressForGeneralConfig() internal { - uint256 nonce = 0; - address deployer = address(this); - nonce += 1; - _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; - nonce += 1; - _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(deployer, nonce).addr; + uint256 nonce = 1; + _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; + // nonce += 2; + // _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; nonce += 2; - _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(deployer, nonce); + _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(_deployer, nonce); nonce += 2; - _inputArguments.roninGeneralConfig.bridgeSlashContract = _calculateAddress(deployer, nonce); + _inputArguments.roninGeneralConfig.bridgeSlashContract = _calculateAddress(_deployer, nonce); nonce += 2; - _inputArguments.roninGeneralConfig.bridgeRewardContract = _calculateAddress(deployer, nonce); + _inputArguments.roninGeneralConfig.bridgeRewardContract = _calculateAddress(_deployer, nonce); nonce += 1; - _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(deployer, nonce); + _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(_deployer, nonce); + nonce += 1; + _inputArguments.mainchainGeneralConfig.bridgeManagerContract = _calculateAddress(_deployer, nonce); - console2.log("Deployer", deployer); + console2.log("Deployer", _deployer); + console2.log(" > bridgeContract", _inputArguments.roninGeneralConfig.bridgeContract); console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); - console2.log(" > bridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + console2.log(" > roninBridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); + console2.log(" > mainchainBridgeManagerContract", _inputArguments.mainchainGeneralConfig.bridgeContract); } function _deployBridgeContract() internal returns (address) { MockBridge logic = new MockBridge(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2(address(logic), address(this), abi.encode()); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2(address(logic), _proxyAdmin, abi.encode()); address bridgeContract = address(proxy); - vm.label(bridgeContract, "BridgeContract"); + vm.label(bridgeContract, "RoninBridgeContract"); + assertEq(bridgeContract, _inputArguments.roninGeneralConfig.bridgeContract); return bridgeContract; } diff --git a/test/utils/Signers.sol b/test/utils/Signers.sol index b20e5905..d3c610f3 100644 --- a/test/utils/Signers.sol +++ b/test/utils/Signers.sol @@ -16,6 +16,6 @@ contract SignerUtils is StdCheats { for (uint256 i = startIdx; i <= endIdx; i++) { accounts[i - startIdx] = makeAccount(string(abi.encodePacked(ACCOUNT_SIGNER, i))); } - _accountNonce += num - 1; + _accountNonce += num; } } From c84f2741f6c02229079ccb7626e8f40dd4cc56de Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 14 Dec 2023 11:53:41 +0700 Subject: [PATCH 08/73] chore: storage layout --- logs/contract-code-sizes.log | 59 ++++++++++++++++++++++++++ logs/storage/InitTest.sol:InitTest.log | 4 +- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index e69de29b..0bdff231 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -0,0 +1,59 @@ +| Contract | Size (kB) | Margin (kB) | +|-------------------------------------------------|-----------|-------------| +| Address | 0.086 | 24.49 | +| AddressArrayUtils | 0.086 | 24.49 | +| Ballot | 0.086 | 24.49 | +| BridgeManagerInterface | 0.933 | 23.643 | +| BridgeOperatorsBallot | 0.166 | 24.41 | +| BridgeReward | 6.031 | 18.545 | +| BridgeSlash | 5.635 | 18.941 | +| BridgeTracking | 6.873 | 17.703 | +| DefaultTestConfig | 3.367 | 21.209 | +| ECDSA | 0.086 | 24.49 | +| ERC1967Proxy | 0.177 | 24.399 | +| ERC20 | 2.172 | 22.404 | +| ERC20PresetMinterPauser | 6.368 | 18.208 | +| EnumerableSet | 0.086 | 24.49 | +| ErrorHandler | 0.086 | 24.49 | +| GlobalProposal | 0.166 | 24.41 | +| HasBridgeDeprecated | 0.063 | 24.513 | +| HasValidatorDeprecated | 0.063 | 24.513 | +| IsolatedGovernance | 0.086 | 24.49 | +| LibArrayUtils | 0.086 | 24.49 | +| LibTUint256Slot | 0.086 | 24.49 | +| MainchainBridgeManager | 19.332 | 5.244 | +| MainchainGatewayV3 | 18.187 | 6.389 | +| Math | 0.086 | 24.49 | +| MockBridge | 1.303 | 23.273 | +| MockBridgeManager | 1.247 | 23.329 | +| MockBridgeReward | 6.77 | 17.806 | +| MockBridgeSlash | 1.447 | 23.129 | +| MockBridgeTracking | 1.969 | 22.607 | +| MockGatewayForTracking | 1.662 | 22.914 | +| MockRoninBridgeManager | 24.579 | -0.003 | +| MockRoninGatewayV3Extended | 20.038 | 4.538 | +| MockTUint256Slot | 2.729 | 21.847 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.15 | 23.426 | +| MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | +| PRBMathUtils | 0.063 | 24.513 | +| PauseEnforcer | 4.548 | 20.028 | +| Proposal | 0.166 | 24.41 | +| RoninBridgeManager | 24.579 | -0.003 | +| RoninGatewayV3 | 19.755 | 4.821 | +| SignerUtils | 0.155 | 24.421 | +| StdStyle | 0.086 | 24.49 | +| StorageSlot | 0.086 | 24.49 | +| Strings | 0.086 | 24.49 | +| Token | 0.214 | 24.362 | +| Transfer | 0.166 | 24.41 | +| TransparentUpgradeableProxy | 2.068 | 22.508 | +| TransparentUpgradeableProxyV2 | 2.361 | 22.215 | +| console | 0.086 | 24.49 | +| console2 | 0.086 | 24.49 | +| safeconsole | 0.086 | 24.49 | +| stdError | 0.591 | 23.985 | +| stdJson | 0.086 | 24.49 | +| stdMath | 0.086 | 24.49 | +| stdStorage | 0.086 | 24.49 | +| stdStorageSafe | 0.086 | 24.49 | + diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log index faeda060..93db9889 100644 --- a/logs/storage/InitTest.sol:InitTest.log +++ b/logs/storage/InitTest.sol:InitTest.log @@ -1,4 +1,6 @@ test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) \ No newline at end of file +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) +test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file From 7524c08d9e8b87210e6034117e1ce1a38d2eac99 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 16 Jan 2024 17:15:17 +0700 Subject: [PATCH 09/73] test(BridgeManager): add set config test --- .../set-config/setConfig.RoninBridgeManager.t.sol | 9 ++++++++- test/init-test/InitTest.sol | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index e751364a..5aeaf67b 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -8,8 +8,15 @@ contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { super.setUp(); } - function test_setConfigCorrect() external { + function test_setBridgeContract() external { address bridgeContract = _roninBridgeManager.getContract(ContractType.BRIDGE); + assertEq(bridgeContract, address(_bridgeContract)); + } + + function test_setBridgeOperatorsContract() external { address[] memory bridgeOperators = _roninBridgeManager.getBridgeOperators(); + for (uint256 i; i < bridgeOperators.length; i++) { + assertEq(bridgeOperators[i], _operators[i].addr); + } } } diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 20013dc5..4890f4ea 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -80,8 +80,8 @@ contract InitTest is Base_Test { function _prepareAddressForGeneralConfig() internal { uint256 nonce = 1; _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; - // nonce += 2; - // _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; + _inputArguments.mainchainGeneralConfig.bridgeContract = _inputArguments.roninGeneralConfig.bridgeContract; + nonce += 2; _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(_deployer, nonce); nonce += 2; @@ -107,7 +107,7 @@ contract InitTest is Base_Test { MockBridge logic = new MockBridge(); TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2(address(logic), _proxyAdmin, abi.encode()); address bridgeContract = address(proxy); - vm.label(bridgeContract, "RoninBridgeContract"); + vm.label(bridgeContract, "BridgeContract"); assertEq(bridgeContract, _inputArguments.roninGeneralConfig.bridgeContract); return bridgeContract; } From 98e051d4834364da57f07104b413017c09aedeee Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 10:31:46 +0700 Subject: [PATCH 10/73] chore: storage layout --- logs/contract-code-sizes.log | 12 +++++++++++- logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- ...BaseGeneralConfig.sol:BaseGeneralConfig.log | 18 ++++++++++++++++++ .../BridgeMigration.sol:BridgeMigration.log | 12 ++++++++++++ .../ContractConfig.sol:ContractConfig.log | 7 +++++++ ...onfigExtended.sol:GeneralConfigExtended.log | 18 ++++++++++++++++++ .../MigrationConfig.sol:MigrationConfig.log | 1 + logs/storage/MockERC20.sol:MockERC20.log | 10 ++++++++++ logs/storage/MockERC721.sol:MockERC721.log | 7 +++++++ .../NetworkConfig.sol:NetworkConfig.log | 4 ++++ logs/storage/Ownable.sol:Ownable.log | 2 +- logs/storage/ProxyAdmin.sol:ProxyAdmin.log | 2 +- .../RuntimeConfig.sol:RuntimeConfig.log | 3 +++ logs/storage/Script.sol:Script.log | 8 ++++++++ .../StdAssertions.sol:StdAssertions.log | 4 ++-- logs/storage/StdChains.sol:StdChains.log | 10 +++++----- logs/storage/StdCheats.sol:StdCheats.log | 4 ++-- logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- logs/storage/WalletConfig.sol:WalletConfig.log | 3 +++ 21 files changed, 117 insertions(+), 16 deletions(-) create mode 100644 logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log create mode 100644 logs/storage/BridgeMigration.sol:BridgeMigration.log create mode 100644 logs/storage/ContractConfig.sol:ContractConfig.log create mode 100644 logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log create mode 100644 logs/storage/MigrationConfig.sol:MigrationConfig.log create mode 100644 logs/storage/MockERC20.sol:MockERC20.log create mode 100644 logs/storage/MockERC721.sol:MockERC721.log create mode 100644 logs/storage/NetworkConfig.sol:NetworkConfig.log create mode 100644 logs/storage/RuntimeConfig.sol:RuntimeConfig.log create mode 100644 logs/storage/Script.sol:Script.log create mode 100644 logs/storage/WalletConfig.sol:WalletConfig.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 0bdff231..85fcfcc4 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -2,7 +2,9 @@ |-------------------------------------------------|-----------|-------------| | Address | 0.086 | 24.49 | | AddressArrayUtils | 0.086 | 24.49 | +| ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | +| BaseGeneralConfig | 12.892 | 11.684 | | BridgeManagerInterface | 0.933 | 23.643 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.031 | 18.545 | @@ -19,7 +21,12 @@ | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | +| JSONParserLib | 0.086 | 24.49 | | LibArrayUtils | 0.086 | 24.49 | +| LibErrorHandler | 0.086 | 24.49 | +| LibProxy | 0.086 | 24.49 | +| LibSharedAddress | 0.086 | 24.49 | +| LibString | 0.086 | 24.49 | | LibTUint256Slot | 0.086 | 24.49 | | MainchainBridgeManager | 19.332 | 5.244 | | MainchainGatewayV3 | 18.187 | 6.389 | @@ -29,6 +36,8 @@ | MockBridgeReward | 6.77 | 17.806 | | MockBridgeSlash | 1.447 | 23.129 | | MockBridgeTracking | 1.969 | 22.607 | +| MockERC20 | 3.687 | 20.889 | +| MockERC721 | 3.825 | 20.751 | | MockGatewayForTracking | 1.662 | 22.914 | | MockRoninBridgeManager | 24.579 | -0.003 | | MockRoninGatewayV3Extended | 20.038 | 4.538 | @@ -38,6 +47,7 @@ | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | +| ProxyAdmin | 1.683 | 22.893 | | RoninBridgeManager | 24.579 | -0.003 | | RoninGatewayV3 | 19.755 | 4.821 | | SignerUtils | 0.155 | 24.421 | @@ -46,7 +56,7 @@ | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.068 | 22.508 | +| TransparentUpgradeableProxy | 2.188 | 22.388 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 6370ed55..340d50a2 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8c099a55..8f188344 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 8756115b..3fd0d5a8 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log new file mode 100644 index 00000000..b5b757ab --- /dev/null +++ b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log @@ -0,0 +1,18 @@ +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/BridgeMigration.sol:BridgeMigration.log b/logs/storage/BridgeMigration.sol:BridgeMigration.log new file mode 100644 index 00000000..0de92842 --- /dev/null +++ b/logs/storage/BridgeMigration.sol:BridgeMigration.log @@ -0,0 +1,12 @@ +script/BridgeMigration.sol:BridgeMigration:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/BridgeMigration.sol:BridgeMigration:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:_overriddenArgs (storage_slot: 12) (offset: 0) (type: bytes) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:_deployScript (storage_slot: 13) (offset: 0) (type: mapping(TContract => contract IMigrationScript)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/ContractConfig.sol:ContractConfig.log b/logs/storage/ContractConfig.sol:ContractConfig.log new file mode 100644 index 00000000..a3572a17 --- /dev/null +++ b/logs/storage/ContractConfig.sol:ContractConfig.log @@ -0,0 +1,7 @@ +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_absolutePath (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_deploymentRoot (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractNameMap (storage_slot: 2) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAbsolutePathMap (storage_slot: 3) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAddrSet (storage_slot: 4) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAddrMap (storage_slot: 5) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractTypeMap (storage_slot: 6) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log new file mode 100644 index 00000000..04c96ceb --- /dev/null +++ b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log @@ -0,0 +1,18 @@ +script/GeneralConfigExtended.sol:GeneralConfigExtended:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MigrationConfig.sol:MigrationConfig.log b/logs/storage/MigrationConfig.sol:MigrationConfig.log new file mode 100644 index 00000000..6665c25c --- /dev/null +++ b/logs/storage/MigrationConfig.sol:MigrationConfig.log @@ -0,0 +1 @@ +lib/foundry-deployment-kit/script/configs/MigrationConfig.sol:MigrationConfig:_migrationConfig (storage_slot: 0) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockERC20.sol:MockERC20.log b/logs/storage/MockERC20.sol:MockERC20.log new file mode 100644 index 00000000..fa91f8fc --- /dev/null +++ b/logs/storage/MockERC20.sol:MockERC20.log @@ -0,0 +1,10 @@ +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:totalSupply (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:balanceOf (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:allowance (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_CHAIN_ID (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_DOMAIN_SEPARATOR (storage_slot: 7) (offset: 0) (type: bytes32) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:nonces (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:initialized (storage_slot: 9) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockERC721.sol:MockERC721.log b/logs/storage/MockERC721.sol:MockERC721.log new file mode 100644 index 00000000..b189dbef --- /dev/null +++ b/logs/storage/MockERC721.sol:MockERC721.log @@ -0,0 +1,7 @@ +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_ownerOf (storage_slot: 2) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:getApproved (storage_slot: 4) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:isApprovedForAll (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => bool))) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:initialized (storage_slot: 6) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/NetworkConfig.sol:NetworkConfig.log b/logs/storage/NetworkConfig.sol:NetworkConfig.log new file mode 100644 index 00000000..17280194 --- /dev/null +++ b/logs/storage/NetworkConfig.sol:NetworkConfig.log @@ -0,0 +1,4 @@ +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_deploymentRoot (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_isForkModeEnabled (storage_slot: 1) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 2) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 3) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Ownable.sol:Ownable.log b/logs/storage/Ownable.sol:Ownable.log index 797a7cd2..91fd8cb0 100644 --- a/logs/storage/Ownable.sol:Ownable.log +++ b/logs/storage/Ownable.sol:Ownable.log @@ -1 +1 @@ -lib/openzeppelin-contracts/contracts/access/Ownable.sol:Ownable:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/access/Ownable.sol:Ownable:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/ProxyAdmin.sol:ProxyAdmin.log b/logs/storage/ProxyAdmin.sol:ProxyAdmin.log index 419da578..83c22cc2 100644 --- a/logs/storage/ProxyAdmin.sol:ProxyAdmin.log +++ b/logs/storage/ProxyAdmin.sol:ProxyAdmin.log @@ -1 +1 @@ -lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/RuntimeConfig.sol:RuntimeConfig.log b/logs/storage/RuntimeConfig.sol:RuntimeConfig.log new file mode 100644 index 00000000..a4cd3542 --- /dev/null +++ b/logs/storage/RuntimeConfig.sol:RuntimeConfig.log @@ -0,0 +1,3 @@ +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Script.sol:Script.log b/logs/storage/Script.sol:Script.log new file mode 100644 index 00000000..12e34d2b --- /dev/null +++ b/logs/storage/Script.sol:Script.log @@ -0,0 +1,8 @@ +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 842900a4..982df57d 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index e38d8f5e..624d7975 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index 1fdff3d3..d02383a5 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 372cbe11..3e3afc09 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/WalletConfig.sol:WalletConfig.log b/logs/storage/WalletConfig.sol:WalletConfig.log new file mode 100644 index 00000000..d3defaba --- /dev/null +++ b/logs/storage/WalletConfig.sol:WalletConfig.log @@ -0,0 +1,3 @@ +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envPk (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envSender (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_trezorSender (storage_slot: 2) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file From 870f4f1d06dd26aaef38cf2a7b6debef2673acc6 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 10:32:42 +0700 Subject: [PATCH 11/73] test(BridgeManager): add set config test --- logs/contract-code-sizes.log | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 85fcfcc4..0bdff231 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -2,9 +2,7 @@ |-------------------------------------------------|-----------|-------------| | Address | 0.086 | 24.49 | | AddressArrayUtils | 0.086 | 24.49 | -| ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | -| BaseGeneralConfig | 12.892 | 11.684 | | BridgeManagerInterface | 0.933 | 23.643 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.031 | 18.545 | @@ -21,12 +19,7 @@ | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | -| JSONParserLib | 0.086 | 24.49 | | LibArrayUtils | 0.086 | 24.49 | -| LibErrorHandler | 0.086 | 24.49 | -| LibProxy | 0.086 | 24.49 | -| LibSharedAddress | 0.086 | 24.49 | -| LibString | 0.086 | 24.49 | | LibTUint256Slot | 0.086 | 24.49 | | MainchainBridgeManager | 19.332 | 5.244 | | MainchainGatewayV3 | 18.187 | 6.389 | @@ -36,8 +29,6 @@ | MockBridgeReward | 6.77 | 17.806 | | MockBridgeSlash | 1.447 | 23.129 | | MockBridgeTracking | 1.969 | 22.607 | -| MockERC20 | 3.687 | 20.889 | -| MockERC721 | 3.825 | 20.751 | | MockGatewayForTracking | 1.662 | 22.914 | | MockRoninBridgeManager | 24.579 | -0.003 | | MockRoninGatewayV3Extended | 20.038 | 4.538 | @@ -47,7 +38,6 @@ | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | -| ProxyAdmin | 1.683 | 22.893 | | RoninBridgeManager | 24.579 | -0.003 | | RoninGatewayV3 | 19.755 | 4.821 | | SignerUtils | 0.155 | 24.421 | @@ -56,7 +46,7 @@ | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.188 | 22.388 | +| TransparentUpgradeableProxy | 2.068 | 22.508 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | From 85409af794fad6e11cc92769fec75dff96229ac3 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 10:32:50 +0700 Subject: [PATCH 12/73] chore: storage layout --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 0bdff231..85651644 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -46,7 +46,7 @@ | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.068 | 22.508 | +| TransparentUpgradeableProxy | 2.188 | 22.388 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | From 913a44297cbfc5d274b0b955975ee701912583c8 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 10:45:25 +0700 Subject: [PATCH 13/73] chore: add ci scripts --- .../workflows/create-PR-deploy-to-release.yml | 64 +++++ .github/workflows/create-PR-implement.yml | 1 - .../create-PR-release-to-network.yml | 47 ++++ .github/workflows/create-PR-release.yml | 241 +++--------------- .github/workflows/create-release-tag.yml | 64 +++++ .github/workflows/{unittest.yml => test.yml} | 22 +- 6 files changed, 225 insertions(+), 214 deletions(-) create mode 100644 .github/workflows/create-PR-deploy-to-release.yml create mode 100644 .github/workflows/create-PR-release-to-network.yml create mode 100644 .github/workflows/create-release-tag.yml rename .github/workflows/{unittest.yml => test.yml} (60%) diff --git a/.github/workflows/create-PR-deploy-to-release.yml b/.github/workflows/create-PR-deploy-to-release.yml new file mode 100644 index 00000000..bf1c04be --- /dev/null +++ b/.github/workflows/create-PR-deploy-to-release.yml @@ -0,0 +1,64 @@ +name: Create PR Deploy to Release + +on: + push: + branches: + - deploy/* + pull_request: + types: + - opened + branches: + - 'deploy/**' + +env: + HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} + +permissions: + contents: write + pull-requests: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Set Env + run: | + echo "PR_BRANCH=merge/${HEAD_BRANCH}" >> $GITHUB_ENV + echo "VERSION=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\///' | cut -d'-' -f1)" >> $GITHUB_ENV + echo "NETWORK=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\/v[0-9\.]*-\(.*\)/\1/')" >> $GITHUB_ENV + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: 'release/${{ env.VERSION }}' + fetch-depth: 0 + fetch-tags: 'true' + + - name: Get Testnet Latest Tag + if: ${{ env.NETWORK == 'testnet' }} + run: | + echo "LATESTTAG=$(git describe --tags --match "*testnet*" --abbrev=0)" >> $GITHUB_ENV + + - name: Get Mainnet Latest Tag + if: ${{ env.NETWORK == 'mainnet' }} + run: | + echo "LATESTTAG=$(git describe --tags --match "*mainnet*" --abbrev=0)" >> $GITHUB_ENV + + - name: Reset promotion branch + run: | + git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} + git reset --hard ${HEAD_BRANCH} + + - name: Generate Release note + id: template + run: | + echo "VERSION=${{ env.VERSION }} - SHA: ${{ github.sha }}" > CHANGELOG.md + + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 #v5.0.2 + with: + labels: automated PR + delete-branch: true + title: 'chore(`release/${{ env.VERSION }}`): merge from `${{ env.HEAD_BRANCH}}`' + body: ${{ steps.template.outputs.result }} + branch: ${{ env.PR_BRANCH }} diff --git a/.github/workflows/create-PR-implement.yml b/.github/workflows/create-PR-implement.yml index 606a4769..33d00a59 100644 --- a/.github/workflows/create-PR-implement.yml +++ b/.github/workflows/create-PR-implement.yml @@ -46,6 +46,5 @@ jobs: branch: ${{ env.HEAD_BRANCH }} base: ${{env.FEATURE_BRANCH}} labels: automated PR - team-reviewers: axieinfinity/smart-contract title: 'feat(${{env.FEATURE_NAME}}): implement `${{env.IMPLEMENT_NAME}}`' body: ${{ steps.template.outputs.result }} \ No newline at end of file diff --git a/.github/workflows/create-PR-release-to-network.yml b/.github/workflows/create-PR-release-to-network.yml new file mode 100644 index 00000000..bd52ca2e --- /dev/null +++ b/.github/workflows/create-PR-release-to-network.yml @@ -0,0 +1,47 @@ +name: Create PR from release to network + +on: + pull_request: + branches: + - release/* + types: + - closed + +permissions: + contents: write + pull-requests: write + +env: + HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} + RELEASE_BRANCH: ${{ github.event.pull_request.base.ref}} + +jobs: + merge-release-to-network: + runs-on: ubuntu-latest + if: ${{ (github.event.pull_request.merged == true) && (contains(github.head_ref, 'deploy') || contains(github.ref_name, 'deploy')) }} + steps: + - name: Set Env + run: | + echo "PR_BRANCH=merge/${HEAD_BRANCH}" >> $GITHUB_ENV + echo "VERSION=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\///' | cut -d'-' -f1)" >> $GITHUB_ENV + echo "NETWORK=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\/v[0-9\.]*-\(.*\)/\1/')" >> $GITHUB_ENV + + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ env.NETWORK }} + + - name: Reset promotion branch + run: | + git fetch origin ${RELEASE_BRANCH}:${RELEASE_BRANCH} + git reset --hard ${RELEASE_BRANCH} + + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 #v5.0.2 + with: + labels: automated PR + delete-branch: true + title: 'chore(`${{ env.NETWORK }}`): merge from `${{ env.HEAD_BRANCH}}`' + body: ${{ steps.template.outputs.result }} + branch: ${{env.PR_BRANCH}} diff --git a/.github/workflows/create-PR-release.yml b/.github/workflows/create-PR-release.yml index b40cfd56..87944c64 100644 --- a/.github/workflows/create-PR-release.yml +++ b/.github/workflows/create-PR-release.yml @@ -13,213 +13,53 @@ env: HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} jobs: - mergeRelease2FeatureRnsUnified: + fetchAllFeatureBranches: runs-on: ubuntu-latest - steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/rns-unified" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/rns-unified - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/rns-unified - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(rns-unified): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - - mergeRelease2FeatureController: - runs-on: ubuntu-latest - steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/controller" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/controller - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/controller - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(controller): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - - mergeRelease2FeatureDomainPrice: - runs-on: ubuntu-latest - steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/domain-price" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/domain-price - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/domain-price - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(domain-price): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - mergeRelease2FeatureAuction: - runs-on: ubuntu-latest steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/auction" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/auction - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/auction - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(auction): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - - mergeRelease2FeaturePublicResolver: - runs-on: ubuntu-latest - steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/public-resolver" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/public-resolver - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/public-resolver - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(public-resolver): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - - mergeRelease2FeatureCI: - runs-on: ubuntu-latest - steps: - - name: Set env - run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/ci" >> $GITHUB_ENV - - uses: actions/checkout@v3 - with: - ref: feature/ci - - name: Reset promotion branch - run: | - git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} - git reset --hard ${HEAD_BRANCH} - - - name: Render template - id: template - uses: chuhlomin/render-template@v1.4 - with: - template: .github/template/create-pull-request.md - vars: | - fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/ci - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - labels: automated PR - team-reviewers: axieinfinity/smart-contract - delete-branch: true - title: 'chore(ci): merge from `${{env.HEAD_BRANCH}}`' - body: ${{ steps.template.outputs.result }} - branch: ${{env.PR_BRANCH}} - - mergeRelease2FeatureReverseRegistrar: + - id: step1 + name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - id: step2 + name: List all the remote feature branches + run: | + branches=$(git branch -r | grep -E '.*origin\/feature\/.*' | sed -e "s/.*origin\///" | tr "\n" " ") + JSON="[" + for branch in ${branches[@]}; do + echo $branch + JSONline="\"$branch\"," + # we don't need to iterate on the same branch over and over, so + # onnly include it when it wasn't included + if [[ "$JSON" != *"$JSONline"* ]]; then + JSON="$JSON$JSONline" + fi + done + # Remove last "," and add the closing bracket + if [[ $JSON == *, ]]; then + JSON="${JSON%?}" + fi + JSON="$JSON]" + echo $JSON + echo "BRANCHES={\"branch_name\": $( echo "$JSON" )}" >> "$GITHUB_OUTPUT" + outputs: + BRANCHES: ${{ steps.step2.outputs.BRANCHES }} + + mergeRelease2FeatureRepo: runs-on: ubuntu-latest + needs: fetchAllFeatureBranches + strategy: + matrix: ${{ fromJSON(needs.fetchAllFeatureBranches.outputs.BRANCHES) }} steps: - name: Set env run: | - echo "PR_BRANCH=merge/${HEAD_BRANCH}-feature/reverse-registrar" >> $GITHUB_ENV + echo "PR_BRANCH=merge/${HEAD_BRANCH}-${{matrix.branch_name}}" >> $GITHUB_ENV + echo "FEATURE_NAME=$(echo ${{matrix.branch_name}} | cut -d'/' -f2)" >> $GITHUB_ENV - uses: actions/checkout@v3 with: - ref: feature/reverse-registrar + ref: ${{matrix.branch_name}} - name: Reset promotion branch run: | git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} @@ -232,14 +72,13 @@ jobs: template: .github/template/create-pull-request.md vars: | fromBranch: ${{env.HEAD_BRANCH}} - toBranch: feature/reverse-registrar + toBranch: ${{matrix.branch_name}} - name: Create Pull Request uses: peter-evans/create-pull-request@v5 with: labels: automated PR - team-reviewers: axieinfinity/smart-contract delete-branch: true - title: 'chore(reverse-registrar): merge from `${{env.HEAD_BRANCH}}`' + title: 'chore(`${{env.FEATURE_NAME}}`): merge from `${{env.HEAD_BRANCH}}`' body: ${{ steps.template.outputs.result }} branch: ${{env.PR_BRANCH}} diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml new file mode 100644 index 00000000..23a41c24 --- /dev/null +++ b/.github/workflows/create-release-tag.yml @@ -0,0 +1,64 @@ +name: Create Release Tag + +on: + pull_request: + types: [closed] + branches: + - mainnet + - testnet + +env: + HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} + +permissions: + contents: write + pull-requests: write + +jobs: + create-release-tag: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + steps: + - name: Set Env + run: | + echo "VERSION=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\///' | cut -d'-' -f1)" >> $GITHUB_ENV + echo "NETWORK=$(echo -n ${{ env.HEAD_BRANCH }} | sed 's/.*deploy\/v[0-9\.]*-\(.*\)/\1/')" >> $GITHUB_ENV + + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ env.NETWORK }} + fetch-depth: 0 + fetch-tags: 'true' + + - name: Set Mainnet Tag + if: ${{ env.NETWORK == 'mainnet' }} + run: | + echo "TAG=${{ env.VERSION }}" >> $GITHUB_ENV + + - name: Set Testnet Tag + if: ${{ env.NETWORK == 'testnet' }} + run: | + echo "TAG=${{ env.VERSION }}-testnet" >> $GITHUB_ENV + + - name: Get Testnet Latest Tag + if: ${{ env.NETWORK == 'testnet' }} + run: | + echo "LATESTTAG=$(git describe --tags --match "*testnet*" --abbrev=0)" >> $GITHUB_ENV + + - name: Get Mainnet Latest Tag + if: ${{ env.NETWORK == 'mainnet' }} + run: | + echo "LATESTTAG=$(git describe --tags --match "*mainnet*" --abbrev=0)" >> $GITHUB_ENV + + - name: Create release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ env.TAG }} + run: | + gh release create "$tag" \ + --repo "$GITHUB_REPOSITORY" \ + --title "${{ env.NETWORK }} release ${{ env.VERSION }}" \ + --target "${{ env.NETWORK }}" \ + --notes-start-tag "${{ env.LATESTTAG }}" \ + --generate-notes \ No newline at end of file diff --git a/.github/workflows/unittest.yml b/.github/workflows/test.yml similarity index 60% rename from .github/workflows/unittest.yml rename to .github/workflows/test.yml index 6e82e46f..ad49e528 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,5 @@ -name: Run tests +name: test + on: push: branches: @@ -13,13 +14,8 @@ on: - 'feature/*' - 'features/*' -permissions: - contents: read - packages: read - -concurrency: - group: ${{ github.head_ref || github.run_id }} - cancel-in-progress: true +env: + FOUNDRY_PROFILE: ci jobs: check: @@ -29,20 +25,22 @@ jobs: name: Foundry project runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v3 with: submodules: recursive - name: Install Foundry - uses: foundry-rs/foundry-toolchain@cb603ca0abb544f301eaed59ac0baf579aa6aecf #v1.0.10 + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly - name: Run Forge build run: | forge --version - forge build --names + forge build id: build - name: Run Forge tests run: | - forge test --no-match-path '*forking/*' -vvv + forge test -vvv id: test From e3267c4024c39d403a48bbe16f5bc1710d4ddf3c Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 10:46:07 +0700 Subject: [PATCH 14/73] chore: storage layout --- logs/contract-code-sizes.log | 13 ++++- ..._NonConditional_GatewayUpgrade_Approve.log | 30 ------------ ...lation_20231016_ReconfigBridgeTracking.log | 30 ------------ logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- ...aseGeneralConfig.sol:BaseGeneralConfig.log | 18 +++++++ logs/storage/BaseStaking.sol:BaseStaking.log | 11 ----- ...erInterface.sol:BridgeManagerInterface.log | 5 ++ .../BridgeMigration.sol:BridgeMigration.log | 12 +++++ .../CandidateManager.sol:CandidateManager.log | 8 ---- .../CandidateStaking.sol:CandidateStaking.log | 15 ------ ...oinbaseExecution.sol:CoinbaseExecution.log | 43 ----------------- .../CommonStorage.sol:CommonStorage.log | 31 ------------ .../ContractConfig.sol:ContractConfig.log | 9 +++- logs/storage/CreditScore.sol:CreditScore.log | 9 ---- .../DelegatorStaking.sol:DelegatorStaking.log | 12 ----- ...dSlots.sol:HasBridgeTrackingDeprecated.log | 1 - ...Slots.sol:HasGovernanceAdminDeprecated.log | 1 - ...atedSlots.sol:HasMaintenanceDeprecated.log | 1 - ...dSlots.sol:HasSlashIndicatorDeprecated.log | 1 - ...precatedSlots.sol:HasStakingDeprecated.log | 1 - ...dSlots.sol:HasStakingVestingDeprecated.log | 1 - ...catedSlots.sol:HasTrustedOrgDeprecated.log | 1 - .../EmergencyExit.sol:EmergencyExit.log | 39 --------------- ...alityTracking.sol:FastFinalityTracking.log | 4 -- logs/storage/Forwarder.sol:Forwarder.log | 2 - ...nfigExtended.sol:GeneralConfigExtended.log | 18 +++++++ .../GovernanceAdmin.sol:GovernanceAdmin.log | 7 --- logs/storage/InitTest.sol:InitTest.log | 6 +++ .../JailingStorage.sol:JailingStorage.log | 7 --- logs/storage/Maintenance.sol:Maintenance.log | 10 ---- .../MigrationConfig.sol:MigrationConfig.log | 1 + logs/storage/MockActor.sol:MockActor.log | 1 - logs/storage/MockERC20.sol:MockERC20.log | 10 ++++ logs/storage/MockERC721.sol:MockERC721.log | 7 +++ ...orwarderTarget.sol:MockForwarderTarget.log | 2 - logs/storage/MockLogic.sol:MockLogicBase.log | 1 - logs/storage/MockLogic.sol:MockLogicV1.log | 1 - logs/storage/MockLogic.sol:MockLogicV2.log | 1 - ...datorSet.sol:MockLogicValidatorSetCore.log | 1 - ...lidatorSet.sol:MockLogicValidatorSetV1.log | 1 - ...lidatorSet.sol:MockLogicValidatorSetV2.log | 1 - ...lidatorSet.sol:MockPCUPickValidatorSet.log | 1 - ...rtValidators.sol:MockPCUSortValidators.log | 1 - ...ubleSign.sol:MockPCUValidateDoubleSign.log | 1 - ...nality.sol:MockPCUValidateFastFinality.log | 1 - ...nded.sol:MockRoninValidatorSetExtended.log | 47 ------------------- ...ockRoninValidatorSetOverridePrecompile.log | 45 ------------------ ...xtended.sol:MockSlashIndicatorExtended.log | 38 --------------- logs/storage/MockSorting.sol:MockSorting.log | 1 - logs/storage/MockStaking.sol:MockStaking.log | 10 ---- ...lback.sol:MockPaymentFallbackExpensive.log | 1 - .../MockTransferFallback.sol:MockTransfer.log | 1 - ...atorContract.sol:MockValidatorContract.log | 1 - .../MockValidatorSet.sol:MockValidatorSet.log | 1 - .../NetworkConfig.sol:NetworkConfig.log | 6 ++- logs/storage/Ownable.sol:Ownable.log | 2 +- logs/storage/Profile.sol:Profile.log | 5 -- .../ProfileHandler.sol:ProfileHandler.log | 3 -- .../ProfileStorage.sol:ProfileStorage.log | 3 -- logs/storage/ProxyAdmin.sol:ProxyAdmin.log | 2 +- .../ReentrancyGuard.sol:ReentrancyGuard.log | 1 - ...ewardCalculation.sol:RewardCalculation.log | 4 -- ...vernanceAdmin.sol:RoninGovernanceAdmin.log | 9 ---- ...anization.sol:RoninTrustedOrganization.log | 13 ----- ...oninValidatorSet.sol:RoninValidatorSet.log | 45 ------------------ .../RuntimeConfig.sol:RuntimeConfig.log | 4 +- logs/storage/Script.sol:Script.log | 16 +++---- logs/storage/Signers.sol:SignerUtils.log | 3 ++ ...BridgeOperator.sol:SlashBridgeOperator.log | 6 --- ...lashBridgeVoting.sol:SlashBridgeVoting.log | 7 --- .../SlashDoubleSign.sol:SlashDoubleSign.log | 6 --- ...lashFastFinality.sol:SlashFastFinality.log | 4 -- .../SlashIndicator.sol:SlashIndicator.log | 38 --------------- ...Unavailability.sol:SlashUnavailability.log | 8 ---- ...lashingExecution.sol:SlashingExecution.log | 33 ------------- logs/storage/Staking.sol:Staking.log | 18 ------- .../StakingVesting.sol:StakingVesting.log | 7 --- .../StdAssertions.sol:StdAssertions.log | 4 +- logs/storage/StdChains.sol:StdChains.log | 10 ++-- logs/storage/StdCheats.sol:StdCheats.log | 4 +- logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- .../TimingStorage.sol:TimingStorage.log | 6 --- ...orInfoStorage.sol:ValidatorInfoStorage.log | 7 --- ...foStorageV2.sol:ValidatorInfoStorageV2.log | 7 --- .../VaultForwarder.sol:VaultForwarder.log | 2 - .../storage/WalletConfig.sol:WalletConfig.log | 3 ++ 88 files changed, 132 insertions(+), 684 deletions(-) delete mode 100644 logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log delete mode 100644 logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log create mode 100644 logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log delete mode 100644 logs/storage/BaseStaking.sol:BaseStaking.log create mode 100644 logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log create mode 100644 logs/storage/BridgeMigration.sol:BridgeMigration.log delete mode 100644 logs/storage/CandidateManager.sol:CandidateManager.log delete mode 100644 logs/storage/CandidateStaking.sol:CandidateStaking.log delete mode 100644 logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log delete mode 100644 logs/storage/CommonStorage.sol:CommonStorage.log delete mode 100644 logs/storage/CreditScore.sol:CreditScore.log delete mode 100644 logs/storage/DelegatorStaking.sol:DelegatorStaking.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log delete mode 100644 logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log delete mode 100644 logs/storage/EmergencyExit.sol:EmergencyExit.log delete mode 100644 logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log delete mode 100644 logs/storage/Forwarder.sol:Forwarder.log create mode 100644 logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log delete mode 100644 logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log create mode 100644 logs/storage/InitTest.sol:InitTest.log delete mode 100644 logs/storage/JailingStorage.sol:JailingStorage.log delete mode 100644 logs/storage/Maintenance.sol:Maintenance.log create mode 100644 logs/storage/MigrationConfig.sol:MigrationConfig.log delete mode 100644 logs/storage/MockActor.sol:MockActor.log create mode 100644 logs/storage/MockERC20.sol:MockERC20.log create mode 100644 logs/storage/MockERC721.sol:MockERC721.log delete mode 100644 logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicBase.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicV1.log delete mode 100644 logs/storage/MockLogic.sol:MockLogicV2.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log delete mode 100644 logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log delete mode 100644 logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log delete mode 100644 logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log delete mode 100644 logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log delete mode 100644 logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log delete mode 100644 logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log delete mode 100644 logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log delete mode 100644 logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log delete mode 100644 logs/storage/MockSorting.sol:MockSorting.log delete mode 100644 logs/storage/MockStaking.sol:MockStaking.log delete mode 100644 logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log delete mode 100644 logs/storage/MockTransferFallback.sol:MockTransfer.log delete mode 100644 logs/storage/MockValidatorContract.sol:MockValidatorContract.log delete mode 100644 logs/storage/MockValidatorSet.sol:MockValidatorSet.log delete mode 100644 logs/storage/Profile.sol:Profile.log delete mode 100644 logs/storage/ProfileHandler.sol:ProfileHandler.log delete mode 100644 logs/storage/ProfileStorage.sol:ProfileStorage.log delete mode 100644 logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log delete mode 100644 logs/storage/RewardCalculation.sol:RewardCalculation.log delete mode 100644 logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log delete mode 100644 logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log delete mode 100644 logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log create mode 100644 logs/storage/Signers.sol:SignerUtils.log delete mode 100644 logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log delete mode 100644 logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log delete mode 100644 logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log delete mode 100644 logs/storage/SlashFastFinality.sol:SlashFastFinality.log delete mode 100644 logs/storage/SlashIndicator.sol:SlashIndicator.log delete mode 100644 logs/storage/SlashUnavailability.sol:SlashUnavailability.log delete mode 100644 logs/storage/SlashingExecution.sol:SlashingExecution.log delete mode 100644 logs/storage/Staking.sol:Staking.log delete mode 100644 logs/storage/StakingVesting.sol:StakingVesting.log delete mode 100644 logs/storage/TimingStorage.sol:TimingStorage.log delete mode 100644 logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log delete mode 100644 logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log delete mode 100644 logs/storage/VaultForwarder.sol:VaultForwarder.log create mode 100644 logs/storage/WalletConfig.sol:WalletConfig.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 14ecbfb5..f749dd1d 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -2,7 +2,9 @@ |-------------------------------------------------|-----------|-------------| | Address | 0.086 | 24.49 | | AddressArrayUtils | 0.086 | 24.49 | +| ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | +| BaseGeneralConfig | 12.892 | 11.684 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.031 | 18.545 | | BridgeSlash | 5.635 | 18.941 | @@ -13,11 +15,17 @@ | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | +| GeneralConfigExtended | 13.451 | 11.125 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | +| JSONParserLib | 0.086 | 24.49 | | LibArrayUtils | 0.086 | 24.49 | +| LibErrorHandler | 0.086 | 24.49 | +| LibProxy | 0.086 | 24.49 | +| LibSharedAddress | 0.086 | 24.49 | +| LibString | 0.086 | 24.49 | | LibTUint256Slot | 0.086 | 24.49 | | MainchainBridgeManager | 19.332 | 5.244 | | MainchainGatewayV3 | 18.187 | 6.389 | @@ -27,6 +35,8 @@ | MockBridgeReward | 6.77 | 17.806 | | MockBridgeSlash | 1.447 | 23.129 | | MockBridgeTracking | 1.969 | 22.607 | +| MockERC20 | 3.687 | 20.889 | +| MockERC721 | 3.825 | 20.751 | | MockGatewayForTracking | 1.662 | 22.914 | | MockRoninBridgeManager | 24.579 | -0.003 | | MockRoninGatewayV3Extended | 20.038 | 4.538 | @@ -36,6 +46,7 @@ | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | +| ProxyAdmin | 1.683 | 22.893 | | RoninBridgeManager | 24.579 | -0.003 | | RoninGatewayV3 | 19.755 | 4.821 | | StdStyle | 0.086 | 24.49 | @@ -43,7 +54,7 @@ | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.068 | 22.508 | +| TransparentUpgradeableProxy | 2.188 | 22.388 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | diff --git a/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log b/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log deleted file mode 100644 index 9c5c39c5..00000000 --- a/logs/storage/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.log +++ /dev/null @@ -1,30 +0,0 @@ -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_sender (storage_slot: 11) (offset: 5) (type: address) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_network (storage_slot: 11) (offset: 25) (type: enum Network) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_config (storage_slot: 12) (offset: 0) (type: contract GeneralConfig) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_alreadySetUp (storage_slot: 12) (offset: 20) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_overriddenArgs (storage_slot: 13) (offset: 0) (type: bytes) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_logger (storage_slot: 14) (offset: 0) (type: contract LogGenerator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_deployScript (storage_slot: 15) (offset: 0) (type: mapping(enum ContractKey => contract IDeployScript)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_staking (storage_slot: 16) (offset: 0) (type: contract Staking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninGateway (storage_slot: 17) (offset: 0) (type: contract RoninGatewayV3) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeTracking (storage_slot: 18) (offset: 0) (type: contract BridgeTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_slashIndicator (storage_slot: 19) (offset: 0) (type: contract SlashIndicator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_validatorSet (storage_slot: 20) (offset: 0) (type: contract RoninValidatorSet) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_stakingVesting (storage_slot: 21) (offset: 0) (type: contract StakingVesting) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_trustedOrgs (storage_slot: 22) (offset: 0) (type: contract RoninTrustedOrganization) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_fastFinalityTracking (storage_slot: 23) (offset: 0) (type: contract FastFinalityTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninGovernanceAdmin (storage_slot: 24) (offset: 0) (type: contract RoninGovernanceAdmin) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeSlash (storage_slot: 25) (offset: 0) (type: contract BridgeSlash) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_bridgeReward (storage_slot: 26) (offset: 0) (type: contract BridgeReward) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_roninBridgeManager (storage_slot: 27) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve.sol:Simulation_20231003_REP002AndREP003_RON_NonConditional_GatewayUpgrade_Approve:_depositCount (storage_slot: 28) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log b/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log deleted file mode 100644 index ce28053c..00000000 --- a/logs/storage/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking.log +++ /dev/null @@ -1,30 +0,0 @@ -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_sender (storage_slot: 11) (offset: 5) (type: address) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_network (storage_slot: 11) (offset: 25) (type: enum Network) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_config (storage_slot: 12) (offset: 0) (type: contract GeneralConfig) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_alreadySetUp (storage_slot: 12) (offset: 20) (type: bool) (numberOfBytes: 1) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_overriddenArgs (storage_slot: 13) (offset: 0) (type: bytes) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_logger (storage_slot: 14) (offset: 0) (type: contract LogGenerator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_deployScript (storage_slot: 15) (offset: 0) (type: mapping(enum ContractKey => contract IDeployScript)) (numberOfBytes: 32) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_staking (storage_slot: 16) (offset: 0) (type: contract Staking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninGateway (storage_slot: 17) (offset: 0) (type: contract RoninGatewayV3) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeTracking (storage_slot: 18) (offset: 0) (type: contract BridgeTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_slashIndicator (storage_slot: 19) (offset: 0) (type: contract SlashIndicator) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_validatorSet (storage_slot: 20) (offset: 0) (type: contract RoninValidatorSet) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_stakingVesting (storage_slot: 21) (offset: 0) (type: contract StakingVesting) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_trustedOrgs (storage_slot: 22) (offset: 0) (type: contract RoninTrustedOrganization) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_fastFinalityTracking (storage_slot: 23) (offset: 0) (type: contract FastFinalityTracking) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninGovernanceAdmin (storage_slot: 24) (offset: 0) (type: contract RoninGovernanceAdmin) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeSlash (storage_slot: 25) (offset: 0) (type: contract BridgeSlash) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_bridgeReward (storage_slot: 26) (offset: 0) (type: contract BridgeReward) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_roninBridgeManager (storage_slot: 27) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -script/20231003-rep-002-rep-003/20231016_ReconfigBridgeTracking.sol:Simulation_20231016_ReconfigBridgeTracking:_depositCount (storage_slot: 28) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 6370ed55..340d50a2 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8c099a55..8f188344 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 8756115b..3fd0d5a8 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log new file mode 100644 index 00000000..b5b757ab --- /dev/null +++ b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log @@ -0,0 +1,18 @@ +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/BaseStaking.sol:BaseStaking.log b/logs/storage/BaseStaking.sol:BaseStaking.log deleted file mode 100644 index 5d335a80..00000000 --- a/logs/storage/BaseStaking.sol:BaseStaking.log +++ /dev/null @@ -1,11 +0,0 @@ -src/ronin/staking/BaseStaking.sol:BaseStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/BaseStaking.sol:BaseStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/BaseStaking.sol:BaseStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/BaseStaking.sol:BaseStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log new file mode 100644 index 00000000..65f53f69 --- /dev/null +++ b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log @@ -0,0 +1,5 @@ +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_contract (storage_slot: 9) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) +test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_signers (storage_slot: 10) (offset: 0) (type: struct StdCheatsSafe.Account[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/BridgeMigration.sol:BridgeMigration.log b/logs/storage/BridgeMigration.sol:BridgeMigration.log new file mode 100644 index 00000000..0de92842 --- /dev/null +++ b/logs/storage/BridgeMigration.sol:BridgeMigration.log @@ -0,0 +1,12 @@ +script/BridgeMigration.sol:BridgeMigration:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/BridgeMigration.sol:BridgeMigration:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) +script/BridgeMigration.sol:BridgeMigration:_overriddenArgs (storage_slot: 12) (offset: 0) (type: bytes) (numberOfBytes: 32) +script/BridgeMigration.sol:BridgeMigration:_deployScript (storage_slot: 13) (offset: 0) (type: mapping(TContract => contract IMigrationScript)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/CandidateManager.sol:CandidateManager.log b/logs/storage/CandidateManager.sol:CandidateManager.log deleted file mode 100644 index bdeb4552..00000000 --- a/logs/storage/CandidateManager.sol:CandidateManager.log +++ /dev/null @@ -1,8 +0,0 @@ -src/ronin/validator/CandidateManager.sol:CandidateManager:______deprecatedStakingContract (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CandidateManager.sol:CandidateManager:_maxValidatorCandidate (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidates (storage_slot: 2) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateIndex (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateInfo (storage_slot: 4) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_minEffectiveDaysOnwards (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:_candidateCommissionChangeSchedule (storage_slot: 6) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/CandidateManager.sol:CandidateManager:______gap (storage_slot: 7) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/CandidateStaking.sol:CandidateStaking.log b/logs/storage/CandidateStaking.sol:CandidateStaking.log deleted file mode 100644 index f0c10a4c..00000000 --- a/logs/storage/CandidateStaking.sol:CandidateStaking.log +++ /dev/null @@ -1,15 +0,0 @@ -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_minValidatorStakingAmount (storage_slot: 108) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_maxCommissionRate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:_minCommissionRate (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/CandidateStaking.sol:CandidateStaking:______gap (storage_slot: 111) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log b/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log deleted file mode 100644 index a9fc400f..00000000 --- a/logs/storage/CoinbaseExecution.sol:CoinbaseExecution.log +++ /dev/null @@ -1,43 +0,0 @@ -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedStakingVesting (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedBridgeTracking (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedMaintenance (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedSlashIndicator (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedStakingContract (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxValidatorCandidate (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidates (storage_slot: 114) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateIndex (storage_slot: 115) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateInfo (storage_slot: 116) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_minEffectiveDaysOnwards (storage_slot: 117) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_candidateCommissionChangeSchedule (storage_slot: 118) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 119) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______deprecatedTrustedOrg (storage_slot: 167) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxValidatorNumber (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:validatorCount (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_validators (storage_slot: 170) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_validatorMap (storage_slot: 171) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_maxPrioritizedValidatorNumber (storage_slot: 172) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 173) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_miningReward (storage_slot: 223) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_delegatingReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_totalFastFinalityReward (storage_slot: 225) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_fastFinalityReward (storage_slot: 226) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_totalDeprecatedReward (storage_slot: 227) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExitLockedAmount (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_emergencyExpiryDuration (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lockedConsensusList (storage_slot: 230) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_exitInfo (storage_slot: 231) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:_lockedFundReleased (storage_slot: 232) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/CoinbaseExecution.sol:CoinbaseExecution:______gap (storage_slot: 233) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/CommonStorage.sol:CommonStorage.log b/logs/storage/CommonStorage.sol:CommonStorage.log deleted file mode 100644 index 496ce3f8..00000000 --- a/logs/storage/CommonStorage.sol:CommonStorage.log +++ /dev/null @@ -1,31 +0,0 @@ -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______deprecatedTrustedOrg (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_maxValidatorNumber (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:validatorCount (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_validators (storage_slot: 111) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_validatorMap (storage_slot: 112) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_maxPrioritizedValidatorNumber (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 114) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_miningReward (storage_slot: 164) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_delegatingReward (storage_slot: 165) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_totalFastFinalityReward (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_fastFinalityReward (storage_slot: 167) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_totalDeprecatedReward (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExitLockedAmount (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_emergencyExpiryDuration (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lockedConsensusList (storage_slot: 171) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_exitInfo (storage_slot: 172) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:_lockedFundReleased (storage_slot: 173) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/CommonStorage.sol:CommonStorage:______gap (storage_slot: 174) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/ContractConfig.sol:ContractConfig.log b/logs/storage/ContractConfig.sol:ContractConfig.log index 6a4bfa74..a3572a17 100644 --- a/logs/storage/ContractConfig.sol:ContractConfig.log +++ b/logs/storage/ContractConfig.sol:ContractConfig.log @@ -1,2 +1,7 @@ -script/configs/ContractConfig.sol:ContractConfig:_contractNameMap (storage_slot: 0) (offset: 0) (type: mapping(enum ContractKey => string)) (numberOfBytes: 32) -script/configs/ContractConfig.sol:ContractConfig:_contractAddrMap (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) \ No newline at end of file +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_absolutePath (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_deploymentRoot (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractNameMap (storage_slot: 2) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAbsolutePathMap (storage_slot: 3) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAddrSet (storage_slot: 4) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractAddrMap (storage_slot: 5) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/ContractConfig.sol:ContractConfig:_contractTypeMap (storage_slot: 6) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/CreditScore.sol:CreditScore.log b/logs/storage/CreditScore.sol:CreditScore.log deleted file mode 100644 index 16460f69..00000000 --- a/logs/storage/CreditScore.sol:CreditScore.log +++ /dev/null @@ -1,9 +0,0 @@ -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______deprecatedMaintenance (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_checkBailedOutAtPeriod (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_creditScore (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_gainCreditScore (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_maxCreditScore (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_bailOutCostMultiplier (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:_cutOffPercentageAfterBailout (storage_slot: 7) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/CreditScore.sol:CreditScore:______gap (storage_slot: 8) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/DelegatorStaking.sol:DelegatorStaking.log b/logs/storage/DelegatorStaking.sol:DelegatorStaking.log deleted file mode 100644 index c61104f9..00000000 --- a/logs/storage/DelegatorStaking.sol:DelegatorStaking.log +++ /dev/null @@ -1,12 +0,0 @@ -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/DelegatorStaking.sol:DelegatorStaking:______gap (storage_slot: 108) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log deleted file mode 100644 index 0febbc68..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasBridgeTrackingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasBridgeTrackingDeprecated:______deprecatedBridgeTracking (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log deleted file mode 100644 index e6272b38..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasGovernanceAdminDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasGovernanceAdminDeprecated:______deprecatedGovernanceAdmin (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log deleted file mode 100644 index dbf4b7f9..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasMaintenanceDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasMaintenanceDeprecated:______deprecatedMaintenance (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log deleted file mode 100644 index a662ed6b..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasSlashIndicatorDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasSlashIndicatorDeprecated:______deprecatedSlashIndicator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log deleted file mode 100644 index 087ef625..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasStakingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasStakingDeprecated:______deprecatedStakingContract (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log deleted file mode 100644 index d54a8106..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasStakingVestingDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasStakingVestingDeprecated:______deprecatedStakingVesting (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log b/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log deleted file mode 100644 index 7e172367..00000000 --- a/logs/storage/DeprecatedSlots.sol:HasTrustedOrgDeprecated.log +++ /dev/null @@ -1 +0,0 @@ -src/utils/DeprecatedSlots.sol:HasTrustedOrgDeprecated:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/EmergencyExit.sol:EmergencyExit.log b/logs/storage/EmergencyExit.sol:EmergencyExit.log deleted file mode 100644 index d4d1a1c5..00000000 --- a/logs/storage/EmergencyExit.sol:EmergencyExit.log +++ /dev/null @@ -1,39 +0,0 @@ -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedStakingContract (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxValidatorCandidate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidates (storage_slot: 110) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateIndex (storage_slot: 111) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateInfo (storage_slot: 112) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_minEffectiveDaysOnwards (storage_slot: 113) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_candidateCommissionChangeSchedule (storage_slot: 114) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 115) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______deprecatedTrustedOrg (storage_slot: 163) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxValidatorNumber (storage_slot: 164) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:validatorCount (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_validators (storage_slot: 166) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_validatorMap (storage_slot: 167) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_maxPrioritizedValidatorNumber (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_miningReward (storage_slot: 219) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_delegatingReward (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_totalFastFinalityReward (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_fastFinalityReward (storage_slot: 222) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_totalDeprecatedReward (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExitLockedAmount (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_emergencyExpiryDuration (storage_slot: 225) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lockedConsensusList (storage_slot: 226) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_exitInfo (storage_slot: 227) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:_lockedFundReleased (storage_slot: 228) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/EmergencyExit.sol:EmergencyExit:______gap (storage_slot: 229) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log b/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log deleted file mode 100644 index ee98716d..00000000 --- a/logs/storage/FastFinalityTracking.sol:FastFinalityTracking.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_tracker (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(address => uint256))) (numberOfBytes: 32) -src/ronin/fast-finality/FastFinalityTracking.sol:FastFinalityTracking:_latestTrackingBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Forwarder.sol:Forwarder.log b/logs/storage/Forwarder.sol:Forwarder.log deleted file mode 100644 index 3bbe2ca0..00000000 --- a/logs/storage/Forwarder.sol:Forwarder.log +++ /dev/null @@ -1,2 +0,0 @@ -src/extensions/forwarder/Forwarder.sol:Forwarder:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) -src/extensions/forwarder/Forwarder.sol:Forwarder:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log new file mode 100644 index 00000000..04c96ceb --- /dev/null +++ b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log @@ -0,0 +1,18 @@ +script/GeneralConfigExtended.sol:GeneralConfigExtended:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log b/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log deleted file mode 100644 index 9fde3fd0..00000000 --- a/logs/storage/GovernanceAdmin.sol:GovernanceAdmin.log +++ /dev/null @@ -1,7 +0,0 @@ -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:______deprecatedGovernanceAdmin (storage_slot: 3) (offset: 0) (type: address) (numberOfBytes: 20) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:______deprecatedBridge (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:roninChainId (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/extensions/GovernanceAdmin.sol:GovernanceAdmin:DOMAIN_SEPARATOR (storage_slot: 6) (offset: 0) (type: bytes32) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log new file mode 100644 index 00000000..93db9889 --- /dev/null +++ b/logs/storage/InitTest.sol:InitTest.log @@ -0,0 +1,6 @@ +test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) +test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) +test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/JailingStorage.sol:JailingStorage.log b/logs/storage/JailingStorage.sol:JailingStorage.log deleted file mode 100644 index c49d99a9..00000000 --- a/logs/storage/JailingStorage.sol:JailingStorage.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_miningRewardDeprecatedAtPeriod (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_miningRewardBailoutCutOffAtPeriod (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_blockProducerJailedBlock (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_emergencyExitJailedTimestamp (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:_cannotBailoutUntilBlock (storage_slot: 5) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/JailingStorage.sol:JailingStorage:______gap (storage_slot: 6) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) \ No newline at end of file diff --git a/logs/storage/Maintenance.sol:Maintenance.log b/logs/storage/Maintenance.sol:Maintenance.log deleted file mode 100644 index 506085b2..00000000 --- a/logs/storage/Maintenance.sol:Maintenance.log +++ /dev/null @@ -1,10 +0,0 @@ -src/ronin/Maintenance.sol:Maintenance:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/Maintenance.sol:Maintenance:_initialized (storage_slot: 0) (offset: 20) (type: uint8) (numberOfBytes: 1) -src/ronin/Maintenance.sol:Maintenance:_initializing (storage_slot: 0) (offset: 21) (type: bool) (numberOfBytes: 1) -src/ronin/Maintenance.sol:Maintenance:_schedule (storage_slot: 1) (offset: 0) (type: mapping(address => struct IMaintenance.Schedule)) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:minMaintenanceDurationInBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxMaintenanceDurationInBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:minOffsetToStartSchedule (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxOffsetToStartSchedule (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:maxSchedule (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/Maintenance.sol:Maintenance:cooldownSecsToMaintain (storage_slot: 7) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MigrationConfig.sol:MigrationConfig.log b/logs/storage/MigrationConfig.sol:MigrationConfig.log new file mode 100644 index 00000000..6665c25c --- /dev/null +++ b/logs/storage/MigrationConfig.sol:MigrationConfig.log @@ -0,0 +1 @@ +lib/foundry-deployment-kit/script/configs/MigrationConfig.sol:MigrationConfig:_migrationConfig (storage_slot: 0) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockActor.sol:MockActor.log b/logs/storage/MockActor.sol:MockActor.log deleted file mode 100644 index 87f6178c..00000000 --- a/logs/storage/MockActor.sol:MockActor.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockActor.sol:MockActor:_target (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockERC20.sol:MockERC20.log b/logs/storage/MockERC20.sol:MockERC20.log new file mode 100644 index 00000000..fa91f8fc --- /dev/null +++ b/logs/storage/MockERC20.sol:MockERC20.log @@ -0,0 +1,10 @@ +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:totalSupply (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:balanceOf (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:allowance (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_CHAIN_ID (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_DOMAIN_SEPARATOR (storage_slot: 7) (offset: 0) (type: bytes32) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:nonces (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:initialized (storage_slot: 9) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockERC721.sol:MockERC721.log b/logs/storage/MockERC721.sol:MockERC721.log new file mode 100644 index 00000000..b189dbef --- /dev/null +++ b/logs/storage/MockERC721.sol:MockERC721.log @@ -0,0 +1,7 @@ +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_ownerOf (storage_slot: 2) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:getApproved (storage_slot: 4) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:isApprovedForAll (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => bool))) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:initialized (storage_slot: 6) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log b/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log deleted file mode 100644 index 2d1ae176..00000000 --- a/logs/storage/MockForwarderTarget.sol:MockForwarderTarget.log +++ /dev/null @@ -1,2 +0,0 @@ -src/mocks/forwarder/MockForwarderTarget.sol:MockForwarderTarget:owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/forwarder/MockForwarderTarget.sol:MockForwarderTarget:data (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicBase.log b/logs/storage/MockLogic.sol:MockLogicBase.log deleted file mode 100644 index e4194ab3..00000000 --- a/logs/storage/MockLogic.sol:MockLogicBase.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicBase:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicV1.log b/logs/storage/MockLogic.sol:MockLogicV1.log deleted file mode 100644 index 808478be..00000000 --- a/logs/storage/MockLogic.sol:MockLogicV1.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicV1:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogic.sol:MockLogicV2.log b/logs/storage/MockLogic.sol:MockLogicV2.log deleted file mode 100644 index fd63f46e..00000000 --- a/logs/storage/MockLogic.sol:MockLogicV2.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogic.sol:MockLogicV2:_value (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log deleted file mode 100644 index ce86c075..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetCore.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetCore:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log deleted file mode 100644 index ca0dfaf4..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV1.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetV1:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log b/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log deleted file mode 100644 index c67332e8..00000000 --- a/logs/storage/MockLogicValidatorSet.sol:MockLogicValidatorSetV2.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/utils/version-control/MockLogicValidatorSet.sol:MockLogicValidatorSetV2:_lastUpdatedPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log b/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log deleted file mode 100644 index 52a58ea6..00000000 --- a/logs/storage/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUPickValidatorSet.sol:MockPCUPickValidatorSet:_precompileSortValidatorAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log b/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log deleted file mode 100644 index f725feef..00000000 --- a/logs/storage/MockPCUSortValidators.sol:MockPCUSortValidators.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUSortValidators.sol:MockPCUSortValidators:_precompileSortValidatorAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log b/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log deleted file mode 100644 index 1b14189f..00000000 --- a/logs/storage/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUValidateDoubleSign.sol:MockPCUValidateDoubleSign:_precompileValidateDoubleSignAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log b/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log deleted file mode 100644 index 0fcf5bb7..00000000 --- a/logs/storage/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/precompile-usages/MockPCUValidateFastFinality.sol:MockPCUValidateFastFinality:_precompileValidateFastFinalityAddress (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log b/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log deleted file mode 100644 index 93e02c72..00000000 --- a/logs/storage/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended.log +++ /dev/null @@ -1,47 +0,0 @@ -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_initialized (storage_slot: 278) (offset: 0) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetExtended.sol:MockRoninValidatorSetExtended:_epochs (storage_slot: 279) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log b/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log deleted file mode 100644 index 1a407314..00000000 --- a/logs/storage/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile.log +++ /dev/null @@ -1,45 +0,0 @@ -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/mocks/validator/MockRoninValidatorSetOverridePrecompile.sol:MockRoninValidatorSetOverridePrecompile:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log b/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log deleted file mode 100644 index 591a1ff9..00000000 --- a/logs/storage/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended.log +++ /dev/null @@ -1,38 +0,0 @@ -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashFastFinalityAmount (storage_slot: 29) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_fastFinalityJailUntilBlock (storage_slot: 30) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_processedEvidence (storage_slot: 31) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 32) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedTrustedOrg (storage_slot: 53) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedGovernanceAdmin (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingSlashed (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingThreshold (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bridgeVotingSlashAmount (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 58) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______deprecatedMaintenance (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_missingVotesRatioTier1 (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_missingVotesRatioTier2 (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_jailDurationForMissingVotesRatioTier2 (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_skipBridgeOperatorSlashingThreshold (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 113) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:lastUnavailabilitySlashedBlock (storage_slot: 163) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityIndicator (storage_slot: 164) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityTier1Threshold (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_unavailabilityTier2Threshold (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 167) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_checkBailedOutAtPeriod (storage_slot: 219) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_creditScore (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_gainCreditScore (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_maxCreditScore (storage_slot: 222) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_bailOutCostMultiplier (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_cutOffPercentageAfterBailout (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:______gap (storage_slot: 225) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_initialized (storage_slot: 275) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/MockSlashIndicatorExtended.sol:MockSlashIndicatorExtended:_initializing (storage_slot: 275) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockSorting.sol:MockSorting.log b/logs/storage/MockSorting.sol:MockSorting.log deleted file mode 100644 index f74bb34b..00000000 --- a/logs/storage/MockSorting.sol:MockSorting.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/sorting/MockSorting.sol:MockSorting:data (storage_slot: 0) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockStaking.sol:MockStaking.log b/logs/storage/MockStaking.sol:MockStaking.log deleted file mode 100644 index 4d0ca927..00000000 --- a/logs/storage/MockStaking.sol:MockStaking.log +++ /dev/null @@ -1,10 +0,0 @@ -src/mocks/MockStaking.sol:MockStaking:_accumulatedRps (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_userReward (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_stakingPool (storage_slot: 2) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:______gap (storage_slot: 3) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/mocks/MockStaking.sol:MockStaking:_stakingAmount (storage_slot: 53) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_periodSlashed (storage_slot: 54) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:_stakingTotal (storage_slot: 55) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:lastUpdatedPeriod (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:pendingReward (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/MockStaking.sol:MockStaking:poolAddr (storage_slot: 58) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log b/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log deleted file mode 100644 index 289cda1d..00000000 --- a/logs/storage/MockTransferFallback.sol:MockPaymentFallbackExpensive.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/MockTransferFallback.sol:MockPaymentFallbackExpensive:array (storage_slot: 0) (offset: 0) (type: uint256[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockTransferFallback.sol:MockTransfer.log b/logs/storage/MockTransferFallback.sol:MockTransfer.log deleted file mode 100644 index 86a2f036..00000000 --- a/logs/storage/MockTransferFallback.sol:MockTransfer.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/MockTransferFallback.sol:MockTransfer:track (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockValidatorContract.sol:MockValidatorContract.log b/logs/storage/MockValidatorContract.sol:MockValidatorContract.log deleted file mode 100644 index 22f150da..00000000 --- a/logs/storage/MockValidatorContract.sol:MockValidatorContract.log +++ /dev/null @@ -1 +0,0 @@ -src/mocks/ronin/MockValidatorContract.sol:MockValidatorContract:_currentPeriod (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockValidatorSet.sol:MockValidatorSet.log b/logs/storage/MockValidatorSet.sol:MockValidatorSet.log deleted file mode 100644 index aa1c0f87..00000000 --- a/logs/storage/MockValidatorSet.sol:MockValidatorSet.log +++ /dev/null @@ -1 +0,0 @@ -test/mocks/MockValidatorSet.sol:MockValidatorSet:_period (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/NetworkConfig.sol:NetworkConfig.log b/logs/storage/NetworkConfig.sol:NetworkConfig.log index 741ea1a8..17280194 100644 --- a/logs/storage/NetworkConfig.sol:NetworkConfig.log +++ b/logs/storage/NetworkConfig.sol:NetworkConfig.log @@ -1,2 +1,4 @@ -script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 0) (offset: 0) (type: mapping(enum Network => struct NetworkConfig.NetworkData)) (numberOfBytes: 32) -script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 1) (offset: 0) (type: mapping(uint256 => enum Network)) (numberOfBytes: 32) \ No newline at end of file +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_deploymentRoot (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_isForkModeEnabled (storage_slot: 1) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 2) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 3) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Ownable.sol:Ownable.log b/logs/storage/Ownable.sol:Ownable.log index 797a7cd2..91fd8cb0 100644 --- a/logs/storage/Ownable.sol:Ownable.log +++ b/logs/storage/Ownable.sol:Ownable.log @@ -1 +1 @@ -lib/openzeppelin-contracts/contracts/access/Ownable.sol:Ownable:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/access/Ownable.sol:Ownable:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/Profile.sol:Profile.log b/logs/storage/Profile.sol:Profile.log deleted file mode 100644 index cda28fd2..00000000 --- a/logs/storage/Profile.sol:Profile.log +++ /dev/null @@ -1,5 +0,0 @@ -src/ronin/profile/Profile.sol:Profile:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/Profile.sol:Profile:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/Profile.sol:Profile:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) -src/ronin/profile/Profile.sol:Profile:_initialized (storage_slot: 51) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/profile/Profile.sol:Profile:_initializing (storage_slot: 51) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/ProfileHandler.sol:ProfileHandler.log b/logs/storage/ProfileHandler.sol:ProfileHandler.log deleted file mode 100644 index e20a196d..00000000 --- a/logs/storage/ProfileHandler.sol:ProfileHandler.log +++ /dev/null @@ -1,3 +0,0 @@ -src/ronin/profile/ProfileHandler.sol:ProfileHandler:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/ProfileHandler.sol:ProfileHandler:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/ProfileHandler.sol:ProfileHandler:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ProfileStorage.sol:ProfileStorage.log b/logs/storage/ProfileStorage.sol:ProfileStorage.log deleted file mode 100644 index c5901219..00000000 --- a/logs/storage/ProfileStorage.sol:ProfileStorage.log +++ /dev/null @@ -1,3 +0,0 @@ -src/ronin/profile/ProfileStorage.sol:ProfileStorage:_id2Profile (storage_slot: 0) (offset: 0) (type: mapping(address => struct IProfile.CandidateProfile)) (numberOfBytes: 32) -src/ronin/profile/ProfileStorage.sol:ProfileStorage:_registry (storage_slot: 1) (offset: 0) (type: mapping(uint256 => bool)) (numberOfBytes: 32) -src/ronin/profile/ProfileStorage.sol:ProfileStorage:__gap (storage_slot: 2) (offset: 0) (type: bytes32[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ProxyAdmin.sol:ProxyAdmin.log b/logs/storage/ProxyAdmin.sol:ProxyAdmin.log index 419da578..83c22cc2 100644 --- a/logs/storage/ProxyAdmin.sol:ProxyAdmin.log +++ b/logs/storage/ProxyAdmin.sol:ProxyAdmin.log @@ -1 +1 @@ -lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log b/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log deleted file mode 100644 index 030c7832..00000000 --- a/logs/storage/ReentrancyGuard.sol:ReentrancyGuard.log +++ /dev/null @@ -1 +0,0 @@ -lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol:ReentrancyGuard:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RewardCalculation.sol:RewardCalculation.log b/logs/storage/RewardCalculation.sol:RewardCalculation.log deleted file mode 100644 index a0c73f41..00000000 --- a/logs/storage/RewardCalculation.sol:RewardCalculation.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_accumulatedRps (storage_slot: 0) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_userReward (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:_stakingPool (storage_slot: 2) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/RewardCalculation.sol:RewardCalculation:______gap (storage_slot: 3) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log b/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log deleted file mode 100644 index 9cd914d9..00000000 --- a/logs/storage/RoninGovernanceAdmin.sol:RoninGovernanceAdmin.log +++ /dev/null @@ -1,9 +0,0 @@ -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedGovernanceAdmin (storage_slot: 3) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedBridge (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:roninChainId (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:DOMAIN_SEPARATOR (storage_slot: 6) (offset: 0) (type: bytes32) (numberOfBytes: 32) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:______deprecatedValidator (storage_slot: 7) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/RoninGovernanceAdmin.sol:RoninGovernanceAdmin:_emergencyExitPoll (storage_slot: 8) (offset: 0) (type: mapping(bytes32 => struct IsolatedGovernance.Vote)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log b/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log deleted file mode 100644 index 2182fd66..00000000 --- a/logs/storage/RoninTrustedOrganization.sol:RoninTrustedOrganization.log +++ /dev/null @@ -1,13 +0,0 @@ -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_num (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_denom (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_totalWeight (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_nonce (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_consensusWeight (storage_slot: 5) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_governorWeight (storage_slot: 6) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_bridgeVoterWeight (storage_slot: 7) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_addedBlock (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_consensusList (storage_slot: 9) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_governorList (storage_slot: 10) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/multi-chains/RoninTrustedOrganization.sol:RoninTrustedOrganization:_bridgeVoterList (storage_slot: 11) (offset: 0) (type: address[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log b/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log deleted file mode 100644 index 63f50686..00000000 --- a/logs/storage/RoninValidatorSet.sol:RoninValidatorSet.log +++ /dev/null @@ -1,45 +0,0 @@ -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_numberOfBlocksInEpoch (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lastUpdatedBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lastUpdatedPeriod (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_currentPeriodStartAtBlock (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 6) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningRewardDeprecatedAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningRewardBailoutCutOffAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 57) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_blockProducerJailedBlock (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExitJailedTimestamp (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_cannotBailoutUntilBlock (storage_slot: 60) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 61) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedStakingVesting (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedBridgeTracking (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedMaintenance (storage_slot: 111) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedSlashIndicator (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedStakingContract (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxValidatorCandidate (storage_slot: 114) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidates (storage_slot: 115) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateIndex (storage_slot: 116) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateInfo (storage_slot: 117) (offset: 0) (type: mapping(address => struct ICandidateManager.ValidatorCandidate)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_minEffectiveDaysOnwards (storage_slot: 118) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_candidateCommissionChangeSchedule (storage_slot: 119) (offset: 0) (type: mapping(address => struct ICandidateManager.CommissionSchedule)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 120) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______deprecatedTrustedOrg (storage_slot: 168) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxValidatorNumber (storage_slot: 169) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:validatorCount (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_validators (storage_slot: 171) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_validatorMap (storage_slot: 172) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_maxPrioritizedValidatorNumber (storage_slot: 173) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 174) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_miningReward (storage_slot: 224) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_delegatingReward (storage_slot: 225) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_totalFastFinalityReward (storage_slot: 226) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_fastFinalityReward (storage_slot: 227) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_totalDeprecatedReward (storage_slot: 228) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExitLockedAmount (storage_slot: 229) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_emergencyExpiryDuration (storage_slot: 230) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lockedConsensusList (storage_slot: 231) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_exitInfo (storage_slot: 232) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:_lockedFundReleased (storage_slot: 233) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/RoninValidatorSet.sol:RoninValidatorSet:______gap (storage_slot: 234) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/RuntimeConfig.sol:RuntimeConfig.log b/logs/storage/RuntimeConfig.sol:RuntimeConfig.log index e82e095a..a4cd3542 100644 --- a/logs/storage/RuntimeConfig.sol:RuntimeConfig.log +++ b/logs/storage/RuntimeConfig.sol:RuntimeConfig.log @@ -1 +1,3 @@ -script/configs/RuntimeConfig.sol:RuntimeConfig:_options (storage_slot: 0) (offset: 0) (type: struct RuntimeConfig.Options) (numberOfBytes: 32) \ No newline at end of file +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/RuntimeConfig.sol:RuntimeConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Script.sol:Script.log b/logs/storage/Script.sol:Script.log index 2ec2cf03..12e34d2b 100644 --- a/logs/storage/Script.sol:Script.log +++ b/logs/storage/Script.sol:Script.log @@ -1,8 +1,8 @@ -lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/Signers.sol:SignerUtils.log b/logs/storage/Signers.sol:SignerUtils.log new file mode 100644 index 00000000..efa2af9d --- /dev/null +++ b/logs/storage/Signers.sol:SignerUtils.log @@ -0,0 +1,3 @@ +test/utils/Signers.sol:SignerUtils:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +test/utils/Signers.sol:SignerUtils:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +test/utils/Signers.sol:SignerUtils:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log b/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log deleted file mode 100644 index 6c8f7051..00000000 --- a/logs/storage/SlashBridgeOperator.sol:SlashBridgeOperator.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_missingVotesRatioTier1 (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_missingVotesRatioTier2 (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_jailDurationForMissingVotesRatioTier2 (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:_skipBridgeOperatorSlashingThreshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeOperator.sol:SlashBridgeOperator:______gap (storage_slot: 5) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log b/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log deleted file mode 100644 index af9e0312..00000000 --- a/logs/storage/SlashBridgeVoting.sol:SlashBridgeVoting.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedTrustedOrg (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______deprecatedGovernanceAdmin (storage_slot: 2) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingSlashed (storage_slot: 3) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingThreshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:_bridgeVotingSlashAmount (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashBridgeVoting.sol:SlashBridgeVoting:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log b/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log deleted file mode 100644 index b6dc66a4..00000000 --- a/logs/storage/SlashDoubleSign.sol:SlashDoubleSign.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashDoubleSign.sol:SlashDoubleSign:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) \ No newline at end of file diff --git a/logs/storage/SlashFastFinality.sol:SlashFastFinality.log b/logs/storage/SlashFastFinality.sol:SlashFastFinality.log deleted file mode 100644 index 3111c5b1..00000000 --- a/logs/storage/SlashFastFinality.sol:SlashFastFinality.log +++ /dev/null @@ -1,4 +0,0 @@ -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_slashFastFinalityAmount (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_fastFinalityJailUntilBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:_processedEvidence (storage_slot: 2) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashFastFinality.sol:SlashFastFinality:______gap (storage_slot: 3) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) \ No newline at end of file diff --git a/logs/storage/SlashIndicator.sol:SlashIndicator.log b/logs/storage/SlashIndicator.sol:SlashIndicator.log deleted file mode 100644 index 4ad5b31d..00000000 --- a/logs/storage/SlashIndicator.sol:SlashIndicator.log +++ /dev/null @@ -1,38 +0,0 @@ -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashDoubleSignAmount (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_doubleSigningJailUntilBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_doubleSigningOffsetLimitBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_submittedEvidence (storage_slot: 4) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 5) (offset: 0) (type: uint256[24]) (numberOfBytes: 768) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashFastFinalityAmount (storage_slot: 29) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_fastFinalityJailUntilBlock (storage_slot: 30) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_processedEvidence (storage_slot: 31) (offset: 0) (type: mapping(bytes32 => bool)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 32) (offset: 0) (type: uint256[21]) (numberOfBytes: 672) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedTrustedOrg (storage_slot: 53) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedGovernanceAdmin (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingSlashed (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingThreshold (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bridgeVotingSlashAmount (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 58) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______deprecatedMaintenance (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_missingVotesRatioTier1 (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_missingVotesRatioTier2 (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_jailDurationForMissingVotesRatioTier2 (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_skipBridgeOperatorSlashingThreshold (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 113) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:lastUnavailabilitySlashedBlock (storage_slot: 163) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityIndicator (storage_slot: 164) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityTier1Threshold (storage_slot: 165) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_unavailabilityTier2Threshold (storage_slot: 166) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 167) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 169) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_checkBailedOutAtPeriod (storage_slot: 219) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_creditScore (storage_slot: 220) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_gainCreditScore (storage_slot: 221) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_maxCreditScore (storage_slot: 222) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_bailOutCostMultiplier (storage_slot: 223) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_cutOffPercentageAfterBailout (storage_slot: 224) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:______gap (storage_slot: 225) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_initialized (storage_slot: 275) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/slash-indicator/SlashIndicator.sol:SlashIndicator:_initializing (storage_slot: 275) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/SlashUnavailability.sol:SlashUnavailability.log b/logs/storage/SlashUnavailability.sol:SlashUnavailability.log deleted file mode 100644 index 197eae77..00000000 --- a/logs/storage/SlashUnavailability.sol:SlashUnavailability.log +++ /dev/null @@ -1,8 +0,0 @@ -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:lastUnavailabilitySlashedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityIndicator (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(uint256 => uint256))) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityTier1Threshold (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_unavailabilityTier2Threshold (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_slashAmountForUnavailabilityTier2Threshold (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:_jailDurationForUnavailabilityTier2Threshold (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/slash-indicator/SlashUnavailability.sol:SlashUnavailability:______gap (storage_slot: 7) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/SlashingExecution.sol:SlashingExecution.log b/logs/storage/SlashingExecution.sol:SlashingExecution.log deleted file mode 100644 index b74e53ad..00000000 --- a/logs/storage/SlashingExecution.sol:SlashingExecution.log +++ /dev/null @@ -1,33 +0,0 @@ -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningRewardDeprecatedAtPeriod (storage_slot: 54) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningRewardBailoutCutOffAtPeriod (storage_slot: 55) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedBridgeRewardDeprecatedAtPeriod (storage_slot: 56) (offset: 0) (type: mapping(address => mapping(uint256 => bool))) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_blockProducerJailedBlock (storage_slot: 57) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExitJailedTimestamp (storage_slot: 58) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_cannotBailoutUntilBlock (storage_slot: 59) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 60) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedSlashIndicator (storage_slot: 108) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedStakingContract (storage_slot: 109) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______deprecatedTrustedOrg (storage_slot: 110) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_maxValidatorNumber (storage_slot: 111) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:validatorCount (storage_slot: 112) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_validators (storage_slot: 113) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_validatorMap (storage_slot: 114) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_maxPrioritizedValidatorNumber (storage_slot: 115) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 116) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_miningReward (storage_slot: 166) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_delegatingReward (storage_slot: 167) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_totalFastFinalityReward (storage_slot: 168) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_fastFinalityReward (storage_slot: 169) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_totalDeprecatedReward (storage_slot: 170) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExitLockedAmount (storage_slot: 171) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_emergencyExpiryDuration (storage_slot: 172) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lockedConsensusList (storage_slot: 173) (offset: 0) (type: address[]) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_exitInfo (storage_slot: 174) (offset: 0) (type: mapping(address => struct ICommonInfo.EmergencyExitInfo)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:_lockedFundReleased (storage_slot: 175) (offset: 0) (type: mapping(address => bool)) (numberOfBytes: 32) -src/ronin/validator/SlashingExecution.sol:SlashingExecution:______gap (storage_slot: 176) (offset: 0) (type: uint256[44]) (numberOfBytes: 1408) \ No newline at end of file diff --git a/logs/storage/Staking.sol:Staking.log b/logs/storage/Staking.sol:Staking.log deleted file mode 100644 index ea051cf3..00000000 --- a/logs/storage/Staking.sol:Staking.log +++ /dev/null @@ -1,18 +0,0 @@ -src/ronin/staking/Staking.sol:Staking:_status (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_accumulatedRps (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(uint256 => struct PeriodWrapperConsumer.PeriodWrapper))) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_userReward (storage_slot: 2) (offset: 0) (type: mapping(address => mapping(address => struct IRewardPool.UserRewardFields))) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_stakingPool (storage_slot: 3) (offset: 0) (type: mapping(address => struct IRewardPool.PoolFields)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 4) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/Staking.sol:Staking:______deprecatedValidator (storage_slot: 54) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/staking/Staking.sol:Staking:_stakingPool (storage_slot: 55) (offset: 0) (type: mapping(address => struct IBaseStaking.PoolDetail)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_cooldownSecsToUndelegate (storage_slot: 56) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_waitingSecsToRevoke (storage_slot: 57) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_adminOfActivePoolMapping (storage_slot: 58) (offset: 0) (type: mapping(address => address)) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 59) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) -src/ronin/staking/Staking.sol:Staking:_minValidatorStakingAmount (storage_slot: 108) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_maxCommissionRate (storage_slot: 109) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:_minCommissionRate (storage_slot: 110) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 111) (offset: 0) (type: uint256[48]) (numberOfBytes: 1536) -src/ronin/staking/Staking.sol:Staking:______gap (storage_slot: 159) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) -src/ronin/staking/Staking.sol:Staking:_initialized (storage_slot: 209) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/staking/Staking.sol:Staking:_initializing (storage_slot: 209) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StakingVesting.sol:StakingVesting.log b/logs/storage/StakingVesting.sol:StakingVesting.log deleted file mode 100644 index 7d90c530..00000000 --- a/logs/storage/StakingVesting.sol:StakingVesting.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/StakingVesting.sol:StakingVesting:______deprecatedValidator (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/StakingVesting.sol:StakingVesting:_initialized (storage_slot: 0) (offset: 20) (type: uint8) (numberOfBytes: 1) -src/ronin/StakingVesting.sol:StakingVesting:_initializing (storage_slot: 0) (offset: 21) (type: bool) (numberOfBytes: 1) -src/ronin/StakingVesting.sol:StakingVesting:_blockProducerBonusPerBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:_bridgeOperatorBonusPerBlock (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:lastBlockSendingBonus (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/StakingVesting.sol:StakingVesting:_fastFinalityRewardPercentage (storage_slot: 4) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 842900a4..982df57d 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index e38d8f5e..624d7975 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index 1fdff3d3..d02383a5 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 372cbe11..3e3afc09 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/TimingStorage.sol:TimingStorage.log b/logs/storage/TimingStorage.sol:TimingStorage.log deleted file mode 100644 index 168f4da4..00000000 --- a/logs/storage/TimingStorage.sol:TimingStorage.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_numberOfBlocksInEpoch (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/TimingStorage.sol:TimingStorage:______gap (storage_slot: 5) (offset: 0) (type: uint256[49]) (numberOfBytes: 1568) \ No newline at end of file diff --git a/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log b/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log deleted file mode 100644 index f2b067cf..00000000 --- a/logs/storage/ValidatorInfoStorage.sol:ValidatorInfoStorage.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_maxValidatorNumber (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:validatorCount (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_validators (storage_slot: 3) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_validatorMap (storage_slot: 4) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:_maxPrioritizedValidatorNumber (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorage.sol:ValidatorInfoStorage:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log b/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log deleted file mode 100644 index 05579d12..00000000 --- a/logs/storage/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2.log +++ /dev/null @@ -1,7 +0,0 @@ -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:______deprecatedTrustedOrg (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_maxValidatorNumber (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:validatorCount (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_validators (storage_slot: 3) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_validatorMap (storage_slot: 4) (offset: 0) (type: mapping(address => enum EnumFlags.ValidatorFlag)) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:_maxPrioritizedValidatorNumber (storage_slot: 5) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol:ValidatorInfoStorageV2:______gap (storage_slot: 6) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/VaultForwarder.sol:VaultForwarder.log b/logs/storage/VaultForwarder.sol:VaultForwarder.log deleted file mode 100644 index fb8421bf..00000000 --- a/logs/storage/VaultForwarder.sol:VaultForwarder.log +++ /dev/null @@ -1,2 +0,0 @@ -src/ronin/VaultForwarder.sol:VaultForwarder:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) -src/ronin/VaultForwarder.sol:VaultForwarder:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/WalletConfig.sol:WalletConfig.log b/logs/storage/WalletConfig.sol:WalletConfig.log new file mode 100644 index 00000000..d3defaba --- /dev/null +++ b/logs/storage/WalletConfig.sol:WalletConfig.log @@ -0,0 +1,3 @@ +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envPk (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envSender (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_trezorSender (storage_slot: 2) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file From cc7177d208ec0f2bed896e6fd480a2a8d7f2fd74 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 14:01:38 +0700 Subject: [PATCH 15/73] test(BridgeManager): add configs test --- ...ol => BridgeManager_IntegrationTest.t.sol} | 10 +++++ .../setConfig.MainchainManager.t.sol | 40 +++++++++++++++++++ .../setConfig.RoninBridgeManager.t.sol | 24 +++++++++-- test/init-test/InitTest.sol | 2 + 4 files changed, 73 insertions(+), 3 deletions(-) rename test/bridge/integration/bridge-manager/{BridgeManager_IntergrationTest.t.sol => BridgeManager_IntegrationTest.t.sol} (85%) create mode 100644 test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol similarity index 85% rename from test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol rename to test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol index 02653965..577f8ccf 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntergrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol @@ -9,6 +9,9 @@ import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import { BridgeSlash } from "src/ronin/gateway/BridgeSlash.sol"; +import { BridgeTracking } from "src/ronin/gateway/BridgeTracking.sol"; +import { BridgeReward } from "src/ronin/gateway/BridgeReward.sol"; import { Base_Test } from "@ronin/test/Base.t.sol"; import { SignerUtils } from "@ronin/test/utils/Signers.sol"; @@ -26,6 +29,9 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { MockBridge internal _bridgeContract; RoninBridgeManager internal _roninBridgeManager; + BridgeTracking internal _bridgeTracking; + BridgeSlash internal _bridgeSlash; + BridgeReward internal _bridgeReward; MainchainBridgeManager internal _mainchainBridgeManager; BridgeManagerInterface _bridgeManagerInterface; @@ -40,6 +46,10 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { _bridgeContract = MockBridge(output.bridgeContractAddress); _roninBridgeManager = RoninBridgeManager(output.roninBridgeManagerAddress); + _bridgeSlash = BridgeSlash(output.bridgeSlashAddress); + _bridgeReward = BridgeReward(output.bridgeRewardAddress); + _bridgeTracking = BridgeTracking(output.bridgeTrackingAddress); + _mainchainBridgeManager = MainchainBridgeManager(output.mainchainBridgeManagerAddress); vm.roll(1); diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol new file mode 100644 index 00000000..e83beba9 --- /dev/null +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "../BridgeManager_IntegrationTest.t.sol"; + +contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { + function setUp() public virtual override { + super.setUp(); + } + + function test_configBridgeContractCorrectly() external { + address bridgeContract = _mainchainBridgeManager.getContract(ContractType.BRIDGE); + assertEq(bridgeContract, address(_bridgeContract)); + } + + function test_configBridgeOperatorsCorrectly() external { + address[] memory bridgeOperators = _mainchainBridgeManager.getBridgeOperators(); + + for (uint256 i; i < bridgeOperators.length; i++) { + assertEq(bridgeOperators[i], _operators[i].addr); + } + } + + function test_configTargetsCorrectly() external { + GlobalProposal.TargetOption[] memory targets = new GlobalProposal.TargetOption[](5); + targets[0] = GlobalProposal.TargetOption.BridgeManager; + targets[1] = GlobalProposal.TargetOption.GatewayContract; + targets[2] = GlobalProposal.TargetOption.BridgeSlash; + targets[3] = GlobalProposal.TargetOption.BridgeReward; + targets[4] = GlobalProposal.TargetOption.BridgeTracking; + + address[] memory results = _mainchainBridgeManager.resolveTargets(targets); + + assertEq(results[0], address(_mainchainBridgeManager)); + assertEq(results[1], address(_bridgeContract)); + assertEq(results[2], address(DEFAULT_ADDRESS)); + assertEq(results[3], address(DEFAULT_ADDRESS)); + assertEq(results[4], address(DEFAULT_ADDRESS)); + } +} diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index 5aeaf67b..f13f10da 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -1,22 +1,40 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "../BridgeManager_IntergrationTest.t.sol"; +import "../BridgeManager_IntegrationTest.t.sol"; contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { function setUp() public virtual override { super.setUp(); } - function test_setBridgeContract() external { + function test_configBridgeContractCorrectly() external { address bridgeContract = _roninBridgeManager.getContract(ContractType.BRIDGE); assertEq(bridgeContract, address(_bridgeContract)); } - function test_setBridgeOperatorsContract() external { + function test_configBridgeOperatorsCorrectly() external { address[] memory bridgeOperators = _roninBridgeManager.getBridgeOperators(); + for (uint256 i; i < bridgeOperators.length; i++) { assertEq(bridgeOperators[i], _operators[i].addr); } } + + function test_configTargetsCorrectly() external { + GlobalProposal.TargetOption[] memory targets = new GlobalProposal.TargetOption[](5); + targets[0] = GlobalProposal.TargetOption.BridgeManager; + targets[1] = GlobalProposal.TargetOption.GatewayContract; + targets[2] = GlobalProposal.TargetOption.BridgeSlash; + targets[3] = GlobalProposal.TargetOption.BridgeReward; + targets[4] = GlobalProposal.TargetOption.BridgeTracking; + + address[] memory results = _roninBridgeManager.resolveTargets(targets); + + assertEq(results[0], address(_roninBridgeManager)); + assertEq(results[1], address(_bridgeContract)); + assertEq(results[2], address(_bridgeSlash)); + assertEq(results[3], address(_bridgeReward)); + assertEq(results[4], address(_bridgeTracking)); + } } diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 4890f4ea..2c4f9e2d 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -18,6 +18,8 @@ import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; import { AddressArrayUtils } from "@ronin/contracts/libraries/AddressArrayUtils.sol"; contract InitTest is Base_Test { + address constant DEFAULT_ADDRESS = address(0); + InitTestInput internal _inputArguments; address internal _deployer; address internal _proxyAdmin; From 27785d1eab1004b6cf4404cf5567c0d6530d1178 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:12:03 +0700 Subject: [PATCH 16/73] test(BridgeManager): deploy mainchain gateway V3 --- lib/foundry-deployment-kit | 1 + .../BridgeManager_IntegrationTest.t.sol | 3 ++ .../setConfig.MainchainManager.t.sol | 4 +-- test/init-test/InitTest.sol | 34 +++++++++++++++++-- test/init-test/Structs.sol | 23 +++++++++++++ 5 files changed, 61 insertions(+), 4 deletions(-) create mode 160000 lib/foundry-deployment-kit diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit new file mode 160000 index 00000000..e17e2699 --- /dev/null +++ b/lib/foundry-deployment-kit @@ -0,0 +1 @@ +Subproject commit e17e2699290d58f6474087c4ecbe50ea38c2c19e diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol index 577f8ccf..375ca6b9 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol @@ -8,6 +8,7 @@ import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManage import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; import { BridgeSlash } from "src/ronin/gateway/BridgeSlash.sol"; import { BridgeTracking } from "src/ronin/gateway/BridgeTracking.sol"; @@ -28,6 +29,7 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { Account[] internal _governors; MockBridge internal _bridgeContract; + MainchainGatewayV3 internal _mainchainGatewayV3; RoninBridgeManager internal _roninBridgeManager; BridgeTracking internal _bridgeTracking; BridgeSlash internal _bridgeSlash; @@ -50,6 +52,7 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { _bridgeReward = BridgeReward(output.bridgeRewardAddress); _bridgeTracking = BridgeTracking(output.bridgeTrackingAddress); + _mainchainGatewayV3 = MainchainGatewayV3(output.mainchainGatewayV3Address); _mainchainBridgeManager = MainchainBridgeManager(output.mainchainBridgeManagerAddress); vm.roll(1); diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol index e83beba9..da199111 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol @@ -10,7 +10,7 @@ contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { function test_configBridgeContractCorrectly() external { address bridgeContract = _mainchainBridgeManager.getContract(ContractType.BRIDGE); - assertEq(bridgeContract, address(_bridgeContract)); + assertEq(bridgeContract, address(_mainchainGatewayV3)); } function test_configBridgeOperatorsCorrectly() external { @@ -32,7 +32,7 @@ contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { address[] memory results = _mainchainBridgeManager.resolveTargets(targets); assertEq(results[0], address(_mainchainBridgeManager)); - assertEq(results[1], address(_bridgeContract)); + assertEq(results[1], address(_mainchainGatewayV3)); assertEq(results[2], address(DEFAULT_ADDRESS)); assertEq(results[3], address(DEFAULT_ADDRESS)); assertEq(results[4], address(DEFAULT_ADDRESS)); diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 2c4f9e2d..57fe67e7 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -15,6 +15,7 @@ import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; +import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; import { AddressArrayUtils } from "@ronin/contracts/libraries/AddressArrayUtils.sol"; contract InitTest is Base_Test { @@ -71,6 +72,7 @@ contract InitTest is Base_Test { vm.startPrank(_deployer); output.bridgeContractAddress = payable(_deployBridgeContract()); + output.mainchainGatewayV3Address = payable(_deployMainchainGatewayV3()); output.bridgeTrackingAddress = payable(_deployBridgeTracking()); output.bridgeSlashAddress = payable(_deployBridgeSlash()); output.bridgeRewardAddress = payable(_deployBridgeReward()); @@ -82,7 +84,8 @@ contract InitTest is Base_Test { function _prepareAddressForGeneralConfig() internal { uint256 nonce = 1; _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; - _inputArguments.mainchainGeneralConfig.bridgeContract = _inputArguments.roninGeneralConfig.bridgeContract; + nonce += 2; + _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; nonce += 2; _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(_deployer, nonce); @@ -97,7 +100,8 @@ contract InitTest is Base_Test { _inputArguments.mainchainGeneralConfig.bridgeManagerContract = _calculateAddress(_deployer, nonce); console2.log("Deployer", _deployer); - console2.log(" > bridgeContract", _inputArguments.roninGeneralConfig.bridgeContract); + console2.log(" > roninGateway", _inputArguments.roninGeneralConfig.bridgeContract); + console2.log(" > mainchainGateway", _inputArguments.mainchainGeneralConfig.bridgeContract); console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); @@ -260,6 +264,32 @@ contract InitTest is Base_Test { return address(bridgeManager); } + function _deployMainchainGatewayV3() internal returns (address) { + MainchainGatewayV3 logic = new MainchainGatewayV3(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + address(logic), + _proxyAdmin, + abi.encodeCall( + MainchainGatewayV3.initialize, + ( + _inputArguments.mainchainGatewayV3Arguments.roleSetter, + _inputArguments.mainchainGatewayV3Arguments.wrappedToken, + _inputArguments.mainchainGatewayV3Arguments.roninChainId, + _inputArguments.mainchainGatewayV3Arguments.numerator, + _inputArguments.mainchainGatewayV3Arguments.highTierVWNumerator, + _inputArguments.mainchainGatewayV3Arguments.denominator, + _inputArguments.mainchainGatewayV3Arguments.addresses, + _inputArguments.mainchainGatewayV3Arguments.thresholds, + _inputArguments.mainchainGatewayV3Arguments.standards + ) + ) + ); + address mainchainGatewayContract = address(proxy); + vm.label(mainchainGatewayContract, "MainchainGatewayV3"); + assertEq(mainchainGatewayContract, _inputArguments.mainchainGeneralConfig.bridgeContract); + return mainchainGatewayContract; + } + function _calculateAddress(address deployer, uint256 nonce) internal pure returns (AddressExtended memory rs) { rs.nonce = nonce; rs.addr = computeCreateAddress(deployer, nonce); diff --git a/test/init-test/Structs.sol b/test/init-test/Structs.sol index afa6e96c..131c0552 100644 --- a/test/init-test/Structs.sol +++ b/test/init-test/Structs.sol @@ -2,6 +2,8 @@ pragma solidity ^0.8.19; import "@ronin/contracts/libraries/GlobalProposal.sol"; +import "@ronin/contracts/interfaces/IWETH.sol"; +import "@ronin/contracts/libraries/Token.sol"; struct MaintenanceArguments { uint256 minMaintenanceDurationInBlock; @@ -114,6 +116,25 @@ struct BridgeManagerArguments { TargetOptionStruct[] targets; } +struct MainchainGatewayV3Arguments { + address roleSetter; + IWETH wrappedToken; + uint256 roninChainId; + uint256 numerator; + uint256 highTierVWNumerator; + uint256 denominator; + // addresses[0]: mainchainTokens + // addresses[1]: roninTokens + // addresses[2]: withdrawalUnlockers + address[][3] addresses; + // thresholds[0]: highTierThreshold + // thresholds[1]: lockedThreshold + // thresholds[2]: unlockFeePercentages + // thresholds[3]: dailyWithdrawalLimit + uint256[][4] thresholds; + Token.Standard[] standards; +} + struct BridgeRewardArguments { uint256 rewardPerPeriod; uint256 topupAmount; @@ -154,6 +175,7 @@ struct InitTestInput { RoninGovernanceAdminArguments governanceAdminArguments; BridgeManagerArguments bridgeManagerArguments; BridgeRewardArguments bridgeRewardArguments; + MainchainGatewayV3Arguments mainchainGatewayV3Arguments; } struct InitTestOutput { @@ -171,4 +193,5 @@ struct InitTestOutput { address payable bridgeRewardAddress; address payable roninBridgeManagerAddress; address payable mainchainBridgeManagerAddress; + address payable mainchainGatewayV3Address; } From 7c3f21fa739ed0556a2691faac152d2599ee2c8c Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:13:32 +0700 Subject: [PATCH 17/73] chore: storage layout --- logs/storage/InitTest.sol:InitTest.log | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log index 93db9889..c6a4356d 100644 --- a/logs/storage/InitTest.sol:InitTest.log +++ b/logs/storage/InitTest.sol:InitTest.log @@ -1,6 +1,6 @@ test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) -test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3776) +test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 126) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 127) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file From 7aa03daa1a7440e11a25b7a24a72aa408e824f26 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:15:35 +0700 Subject: [PATCH 18/73] chore: lint code only --- test/Base.t.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/Base.t.sol b/test/Base.t.sol index 4ce74806..39602bd3 100644 --- a/test/Base.t.sol +++ b/test/Base.t.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.17 <0.9.0; -import {StdCheats} from "forge-std/Test.sol"; +import { StdCheats } from "forge-std/Test.sol"; -import {Assertions} from "./utils/Assertions.sol"; -import {Utils} from "./utils/Utils.sol"; +import { Assertions } from "./utils/Assertions.sol"; +import { Utils } from "./utils/Utils.sol"; -import {IBridgeManagerEvents} from "@ronin/contracts/interfaces/bridge/events/IBridgeManagerEvents.sol"; +import { IBridgeManagerEvents } from "@ronin/contracts/interfaces/bridge/events/IBridgeManagerEvents.sol"; -abstract contract Base_Test is Assertions, Utils, StdCheats, IBridgeManagerEvents {} +abstract contract Base_Test is Assertions, Utils, StdCheats, IBridgeManagerEvents { } From 8c094a3446fbc3c89fd2d260bcf176256482f917 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:50:50 +0700 Subject: [PATCH 19/73] test(BridgeManager): add deploy ronin gateway --- src/utils/DeprecatedSlots.sol | 2 +- .../BridgeManager_IntegrationTest.t.sol | 6 ++-- .../setConfig.RoninBridgeManager.t.sol | 4 +-- test/init-test/InitTest.sol | 36 ++++++++++++++----- test/init-test/Structs.sol | 15 +++++++- 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/utils/DeprecatedSlots.sol b/src/utils/DeprecatedSlots.sol index 296ddf70..3226d4c5 100644 --- a/src/utils/DeprecatedSlots.sol +++ b/src/utils/DeprecatedSlots.sol @@ -9,7 +9,7 @@ pragma solidity ^0.8.0; * The purpose of these contracts is to preserve the slots for already deployed contracts. */ contract HasBridgeDeprecated { - /// @custom:deprecated Previously `_bridgeContract` (non-zero value) + /// @custom:deprecated Previously `_roninGatewayV3Contract` (non-zero value) address internal ______deprecatedBridge; } diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol index 375ca6b9..61e7b7e6 100644 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol +++ b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol @@ -5,7 +5,7 @@ import { console2 } from "forge-std/console2.sol"; import { StdStyle } from "forge-std/StdStyle.sol"; import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; -import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; +import { MockRoninGatewayV3Extended } from "@ronin/contracts/mocks/ronin/MockRoninGatewayV3Extended.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; @@ -28,7 +28,7 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { Account[] internal _operators; Account[] internal _governors; - MockBridge internal _bridgeContract; + MockRoninGatewayV3Extended internal _roninGatewayV3Contract; MainchainGatewayV3 internal _mainchainGatewayV3; RoninBridgeManager internal _roninBridgeManager; BridgeTracking internal _bridgeTracking; @@ -46,7 +46,7 @@ contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { InitTestOutput memory output = init(); - _bridgeContract = MockBridge(output.bridgeContractAddress); + _roninGatewayV3Contract = MockRoninGatewayV3Extended(output.roninGatewayV3Address); _roninBridgeManager = RoninBridgeManager(output.roninBridgeManagerAddress); _bridgeSlash = BridgeSlash(output.bridgeSlashAddress); _bridgeReward = BridgeReward(output.bridgeRewardAddress); diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index f13f10da..b33fed83 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -10,7 +10,7 @@ contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { function test_configBridgeContractCorrectly() external { address bridgeContract = _roninBridgeManager.getContract(ContractType.BRIDGE); - assertEq(bridgeContract, address(_bridgeContract)); + assertEq(bridgeContract, address(_roninGatewayV3Contract)); } function test_configBridgeOperatorsCorrectly() external { @@ -32,7 +32,7 @@ contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { address[] memory results = _roninBridgeManager.resolveTargets(targets); assertEq(results[0], address(_roninBridgeManager)); - assertEq(results[1], address(_bridgeContract)); + assertEq(results[1], address(_roninGatewayV3Contract)); assertEq(results[2], address(_bridgeSlash)); assertEq(results[3], address(_bridgeReward)); assertEq(results[4], address(_bridgeTracking)); diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 57fe67e7..96e4f8a0 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -14,7 +14,8 @@ import { BridgeSlash } from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; -import { MockBridge } from "@ronin/contracts/mocks/MockBridge.sol"; +import { RoninGatewayV3 } from "@ronin/contracts/ronin/gateway/RoninGatewayV3.sol"; +import { MockRoninGatewayV3Extended } from "@ronin/contracts/mocks/ronin/MockRoninGatewayV3Extended.sol"; import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; import { AddressArrayUtils } from "@ronin/contracts/libraries/AddressArrayUtils.sol"; @@ -71,7 +72,7 @@ contract InitTest is Base_Test { _prepareAddressForGeneralConfig(); vm.startPrank(_deployer); - output.bridgeContractAddress = payable(_deployBridgeContract()); + output.roninGatewayV3Address = payable(_deployRoninGatewayV3Contract()); output.mainchainGatewayV3Address = payable(_deployMainchainGatewayV3()); output.bridgeTrackingAddress = payable(_deployBridgeTracking()); output.bridgeSlashAddress = payable(_deployBridgeSlash()); @@ -109,13 +110,30 @@ contract InitTest is Base_Test { console2.log(" > mainchainBridgeManagerContract", _inputArguments.mainchainGeneralConfig.bridgeContract); } - function _deployBridgeContract() internal returns (address) { - MockBridge logic = new MockBridge(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2(address(logic), _proxyAdmin, abi.encode()); - address bridgeContract = address(proxy); - vm.label(bridgeContract, "BridgeContract"); - assertEq(bridgeContract, _inputArguments.roninGeneralConfig.bridgeContract); - return bridgeContract; + function _deployRoninGatewayV3Contract() internal returns (address) { + MockRoninGatewayV3Extended logic = new MockRoninGatewayV3Extended(); + TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( + address(logic), + _proxyAdmin, + abi.encodeCall( + RoninGatewayV3.initialize, + ( + _inputArguments.roninGatewayV3Arguments.roleSetter, + _inputArguments.roninGatewayV3Arguments.numerator, + _inputArguments.roninGatewayV3Arguments.denominator, + _inputArguments.roninGatewayV3Arguments.trustedNumerator, + _inputArguments.roninGatewayV3Arguments.trustedDenominator, + _inputArguments.roninGatewayV3Arguments.withdrawalMigrators, + _inputArguments.roninGatewayV3Arguments.packedAddresses, + _inputArguments.roninGatewayV3Arguments.packedNumbers, + _inputArguments.roninGatewayV3Arguments.standards + ) + ) + ); + address roninGatewayContract = address(proxy); + vm.label(roninGatewayContract, "RoninGatewayV3"); + assertEq(roninGatewayContract, _inputArguments.roninGeneralConfig.bridgeContract); + return roninGatewayContract; } function _deployBridgeTracking() internal returns (address) { diff --git a/test/init-test/Structs.sol b/test/init-test/Structs.sol index 131c0552..c557d290 100644 --- a/test/init-test/Structs.sol +++ b/test/init-test/Structs.sol @@ -116,6 +116,18 @@ struct BridgeManagerArguments { TargetOptionStruct[] targets; } +struct RoninGatewayV3Arguments { + address roleSetter; + uint256 numerator; + uint256 denominator; + uint256 trustedNumerator; + uint256 trustedDenominator; + address[] withdrawalMigrators; + address[][2] packedAddresses; + uint256[][2] packedNumbers; + Token.Standard[] standards; +} + struct MainchainGatewayV3Arguments { address roleSetter; IWETH wrappedToken; @@ -175,11 +187,11 @@ struct InitTestInput { RoninGovernanceAdminArguments governanceAdminArguments; BridgeManagerArguments bridgeManagerArguments; BridgeRewardArguments bridgeRewardArguments; + RoninGatewayV3Arguments roninGatewayV3Arguments; MainchainGatewayV3Arguments mainchainGatewayV3Arguments; } struct InitTestOutput { - address payable bridgeContractAddress; address payable roninGovernanceAdminAddress; address payable maintenanceContractAddress; address payable roninTrustedOrganizationAddress; @@ -192,6 +204,7 @@ struct InitTestOutput { address payable bridgeSlashAddress; address payable bridgeRewardAddress; address payable roninBridgeManagerAddress; + address payable roninGatewayV3Address; address payable mainchainBridgeManagerAddress; address payable mainchainGatewayV3Address; } From a4c947b709ad73d44f6f6a10506e745138087ae1 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:51:20 +0700 Subject: [PATCH 20/73] chore: storage layout --- logs/storage/InitTest.sol:InitTest.log | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log index c6a4356d..a64374cd 100644 --- a/logs/storage/InitTest.sol:InitTest.log +++ b/logs/storage/InitTest.sol:InitTest.log @@ -1,6 +1,6 @@ test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3776) -test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 126) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 127) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 4128) +test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 137) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 138) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file From 164859f237a634bb79ae7f234821cbc488144574 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 15:53:00 +0700 Subject: [PATCH 21/73] chore: fix comment --- src/utils/DeprecatedSlots.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/DeprecatedSlots.sol b/src/utils/DeprecatedSlots.sol index 3226d4c5..296ddf70 100644 --- a/src/utils/DeprecatedSlots.sol +++ b/src/utils/DeprecatedSlots.sol @@ -9,7 +9,7 @@ pragma solidity ^0.8.0; * The purpose of these contracts is to preserve the slots for already deployed contracts. */ contract HasBridgeDeprecated { - /// @custom:deprecated Previously `_roninGatewayV3Contract` (non-zero value) + /// @custom:deprecated Previously `_bridgeContract` (non-zero value) address internal ______deprecatedBridge; } From bea17e5e2e8643ec1d0766758c8e07e5481c632e Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 16:13:51 +0700 Subject: [PATCH 22/73] test: add mock tokens --- src/mocks/token/MockERC20.sol | 12 +++++ src/mocks/token/MockWrapToken.sol | 74 +++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 src/mocks/token/MockERC20.sol create mode 100644 src/mocks/token/MockWrapToken.sol diff --git a/src/mocks/token/MockERC20.sol b/src/mocks/token/MockERC20.sol new file mode 100644 index 00000000..f76dc2ec --- /dev/null +++ b/src/mocks/token/MockERC20.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract MockERC20 is ERC20 { + constructor(string memory name, string memory symbol) ERC20(name, symbol) { } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} diff --git a/src/mocks/token/MockWrapToken.sol b/src/mocks/token/MockWrapToken.sol new file mode 100644 index 00000000..4c50d87e --- /dev/null +++ b/src/mocks/token/MockWrapToken.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GNU +pragma solidity ^0.8.0; + +/** + * @notice This contract MUST BE used in development only. + */ +contract MockWrapToken { + string public name; + string public symbol; + uint8 public decimals = 18; + + event Approval(address indexed src, address indexed guy, uint256 wad); + event Transfer(address indexed src, address indexed dst, uint256 wad); + event Deposit(address indexed dst, uint256 wad); + event Withdrawal(address indexed src, uint256 wad); + + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; + + constructor(string memory name_, string memory symbol_) { + name = name_; + symbol = symbol_; + } + + receive() external payable { + deposit(); + } + + fallback() external payable { + deposit(); + } + + function deposit() public payable { + balanceOf[msg.sender] += msg.value; + emit Deposit(msg.sender, msg.value); + } + + function withdraw(uint256 wad) public { + require(balanceOf[msg.sender] >= wad); + balanceOf[msg.sender] -= wad; + payable(msg.sender).transfer(wad); + emit Withdrawal(msg.sender, wad); + } + + function totalSupply() public view returns (uint256) { + return address(this).balance; + } + + function approve(address guy, uint256 wad) public returns (bool) { + allowance[msg.sender][guy] = wad; + emit Approval(msg.sender, guy, wad); + return true; + } + + function transfer(address dst, uint256 wad) public returns (bool) { + return transferFrom(msg.sender, dst, wad); + } + + function transferFrom(address src, address dst, uint256 wad) public returns (bool) { + require(balanceOf[src] >= wad); + + if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) { + require(allowance[src][msg.sender] >= wad); + allowance[src][msg.sender] -= wad; + } + + balanceOf[src] -= wad; + balanceOf[dst] += wad; + + emit Transfer(src, dst, wad); + + return true; + } +} From 8186246c4edd0af3f5f1a766edef34113bc3b976 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 16:14:09 +0700 Subject: [PATCH 23/73] chore: storage layout --- logs/contract-code-sizes.log | 2 ++ logs/storage/MockERC20.sol:MockERC20.log | 15 +++++---------- logs/storage/MockWrapToken.sol:MockWrapToken.log | 5 +++++ 3 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 logs/storage/MockWrapToken.sol:MockWrapToken.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 85651644..7059e25b 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -29,12 +29,14 @@ | MockBridgeReward | 6.77 | 17.806 | | MockBridgeSlash | 1.447 | 23.129 | | MockBridgeTracking | 1.969 | 22.607 | +| MockERC20 | 2.441 | 22.135 | | MockGatewayForTracking | 1.662 | 22.914 | | MockRoninBridgeManager | 24.579 | -0.003 | | MockRoninGatewayV3Extended | 20.038 | 4.538 | | MockTUint256Slot | 2.729 | 21.847 | | MockValidatorContract_OnlyTiming_ForHardhatTest | 1.15 | 23.426 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | +| MockWrapToken | 1.977 | 22.599 | | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | diff --git a/logs/storage/MockERC20.sol:MockERC20.log b/logs/storage/MockERC20.sol:MockERC20.log index fa91f8fc..7d484b3b 100644 --- a/logs/storage/MockERC20.sol:MockERC20.log +++ b/logs/storage/MockERC20.sol:MockERC20.log @@ -1,10 +1,5 @@ -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:totalSupply (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:balanceOf (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:allowance (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_CHAIN_ID (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_DOMAIN_SEPARATOR (storage_slot: 7) (offset: 0) (type: bytes32) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:nonces (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:initialized (storage_slot: 9) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +src/mocks/token/MockERC20.sol:MockERC20:_balances (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockERC20.sol:MockERC20:_allowances (storage_slot: 1) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) +src/mocks/token/MockERC20.sol:MockERC20:_totalSupply (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) +src/mocks/token/MockERC20.sol:MockERC20:_name (storage_slot: 3) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockERC20.sol:MockERC20:_symbol (storage_slot: 4) (offset: 0) (type: string) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockWrapToken.sol:MockWrapToken.log b/logs/storage/MockWrapToken.sol:MockWrapToken.log new file mode 100644 index 00000000..9aafaeef --- /dev/null +++ b/logs/storage/MockWrapToken.sol:MockWrapToken.log @@ -0,0 +1,5 @@ +src/mocks/token/MockWrapToken.sol:MockWrapToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/mocks/token/MockWrapToken.sol:MockWrapToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file From 0b060aa58a50915f6fe8ba929cb955756f1a9c38 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Wed, 17 Jan 2024 16:32:33 +0700 Subject: [PATCH 24/73] test(BridgeManager): add configs --- test/init-test/InitTest.sol | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol index 96e4f8a0..443d1404 100644 --- a/test/init-test/InitTest.sol +++ b/test/init-test/InitTest.sol @@ -35,10 +35,68 @@ contract InitTest is Base_Test { _inputArguments.governanceAdminArguments = DefaultTestConfig.get().governanceAdminArguments; _inputArguments.bridgeRewardArguments = DefaultTestConfig.get().bridgeRewardArguments; + setRoninGatewayArgs(DefaultTestConfig.get().roninGatewayV3Arguments); + setMainchainGatewayArgs(DefaultTestConfig.get().mainchainGatewayV3Arguments); setBridgeManagerArgs(DefaultTestConfig.get().bridgeManagerArguments); setRoninTrustedOrgArgs(DefaultTestConfig.get().roninTrustedOrganizationArguments); } + function setRoninGatewayArgs(RoninGatewayV3Arguments memory arg) public { + _inputArguments.roninGatewayV3Arguments.roleSetter = arg.roleSetter; + _inputArguments.roninGatewayV3Arguments.numerator = arg.numerator; + _inputArguments.roninGatewayV3Arguments.denominator = arg.denominator; + _inputArguments.roninGatewayV3Arguments.trustedNumerator = arg.trustedNumerator; + _inputArguments.roninGatewayV3Arguments.trustedDenominator = arg.trustedDenominator; + + delete _inputArguments.roninGatewayV3Arguments.withdrawalMigrators; + for (uint256 i; i < arg.withdrawalMigrators.length; i++) { + _inputArguments.roninGatewayV3Arguments.withdrawalMigrators.push(arg.withdrawalMigrators[i]); + } + for (uint256 index; index < 2; index++) { + delete _inputArguments.roninGatewayV3Arguments.packedAddresses[index]; + for (uint256 i; i < arg.packedAddresses[index].length; i++) { + _inputArguments.roninGatewayV3Arguments.packedAddresses[index].push(arg.packedAddresses[index][i]); + } + + delete _inputArguments.roninGatewayV3Arguments.packedNumbers[index]; + for (uint256 i; i < arg.packedNumbers[index].length; i++) { + _inputArguments.roninGatewayV3Arguments.packedNumbers[index].push(arg.packedNumbers[index][i]); + } + } + + delete _inputArguments.roninGatewayV3Arguments.standards; + for (uint256 i; i < arg.standards.length; i++) { + _inputArguments.roninGatewayV3Arguments.standards.push(arg.standards[i]); + } + } + + function setMainchainGatewayArgs(MainchainGatewayV3Arguments memory arg) public { + _inputArguments.mainchainGatewayV3Arguments.roleSetter = arg.roleSetter; + _inputArguments.mainchainGatewayV3Arguments.wrappedToken = arg.wrappedToken; + _inputArguments.mainchainGatewayV3Arguments.numerator = arg.numerator; + _inputArguments.mainchainGatewayV3Arguments.highTierVWNumerator = arg.highTierVWNumerator; + _inputArguments.mainchainGatewayV3Arguments.denominator = arg.denominator; + + for (uint256 index; index < 3; index++) { + delete _inputArguments.mainchainGatewayV3Arguments.addresses[index]; + for (uint256 i; i < arg.addresses[index].length; i++) { + _inputArguments.mainchainGatewayV3Arguments.addresses[index].push(arg.addresses[index][i]); + } + } + + for (uint256 index; index < 3; index++) { + delete _inputArguments.mainchainGatewayV3Arguments.thresholds[index]; + for (uint256 i; i < arg.thresholds[index].length; i++) { + _inputArguments.mainchainGatewayV3Arguments.thresholds[index].push(arg.thresholds[index][i]); + } + } + + delete _inputArguments.mainchainGatewayV3Arguments.standards; + for (uint256 i; i < arg.standards.length; i++) { + _inputArguments.mainchainGatewayV3Arguments.standards.push(arg.standards[i]); + } + } + function setBridgeManagerArgs(BridgeManagerArguments memory arg) public { _inputArguments.bridgeManagerArguments.denominator = arg.denominator; _inputArguments.bridgeManagerArguments.numerator = arg.numerator; From dbe09b19e44134ab19112b24904b771c91aee884 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 00:33:08 +0700 Subject: [PATCH 25/73] test: add scripts --- .gitmodules | 3 + foundry.toml | 2 +- remappings.txt | 3 +- run.sh | 1 + script/GeneralConfig.sol | 59 ++++++++++ script/Migration.s.sol | 32 +++++ script/contracts/BridgeManagerDeploy.s.sol | 1 + script/contracts/BridgeRewardDeploy.s.sol | 1 + script/contracts/BridgeSlashDeploy.s.sol | 1 + script/contracts/BridgeTrackingDeploy.s.sol | 1 + .../MainchainBridgeManagerDeploy.s.sol | 1 + .../contracts/MainchainGatewayV3Deploy.s.sol | 29 +++++ script/contracts/MockWrapERC20Deploy.s.sol | 1 + .../contracts/RoninBridgeManagerDeploy.s.sol | 1 + script/contracts/RoninGatewayV3Deploy.s.sol | 1 + script/contracts/token/AXSDeploy.s.sol | 16 +++ script/contracts/token/MockERC20Deploy.s.sol | 22 ++++ .../token/MockWrappedTokenDeploy.s.sol | 22 ++++ script/contracts/token/SLPDeploy.s.sol | 16 +++ script/contracts/token/USDCDeploy.s.sol | 16 +++ script/contracts/token/WETHDeploy.s.sol | 16 +++ script/contracts/token/WRONDeploy.s.sol | 16 +++ script/interfaces/ISharedArgument.sol | 110 ++++++++++++++++++ script/utils/Contract.sol | 43 +++++++ script/utils/Network.sol | 56 +++++++++ src/mocks/token/MockWrappedToken.sol | 74 ++++++++++++ upload-sig.sh | 1 + verify.sh | 75 ++++++++++++ 28 files changed, 618 insertions(+), 2 deletions(-) create mode 100755 run.sh create mode 100644 script/GeneralConfig.sol create mode 100644 script/Migration.s.sol create mode 100644 script/contracts/BridgeManagerDeploy.s.sol create mode 100644 script/contracts/BridgeRewardDeploy.s.sol create mode 100644 script/contracts/BridgeSlashDeploy.s.sol create mode 100644 script/contracts/BridgeTrackingDeploy.s.sol create mode 100644 script/contracts/MainchainBridgeManagerDeploy.s.sol create mode 100644 script/contracts/MainchainGatewayV3Deploy.s.sol create mode 100644 script/contracts/MockWrapERC20Deploy.s.sol create mode 100644 script/contracts/RoninBridgeManagerDeploy.s.sol create mode 100644 script/contracts/RoninGatewayV3Deploy.s.sol create mode 100644 script/contracts/token/AXSDeploy.s.sol create mode 100644 script/contracts/token/MockERC20Deploy.s.sol create mode 100644 script/contracts/token/MockWrappedTokenDeploy.s.sol create mode 100644 script/contracts/token/SLPDeploy.s.sol create mode 100644 script/contracts/token/USDCDeploy.s.sol create mode 100644 script/contracts/token/WETHDeploy.s.sol create mode 100644 script/contracts/token/WRONDeploy.s.sol create mode 100644 script/interfaces/ISharedArgument.sol create mode 100644 script/utils/Contract.sol create mode 100644 script/utils/Network.sol create mode 100644 src/mocks/token/MockWrappedToken.sol create mode 100644 upload-sig.sh create mode 100644 verify.sh diff --git a/.gitmodules b/.gitmodules index 5274dcbd..8deb9b9e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -15,3 +15,6 @@ [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/openzeppelin/openzeppelin-contracts +[submodule "lib/foundry-deployment-kit"] + path = lib/foundry-deployment-kit + url = https://github.com/axieinfinity/foundry-deployment-kit diff --git a/foundry.toml b/foundry.toml index 72a071b4..afeff1aa 100644 --- a/foundry.toml +++ b/foundry.toml @@ -11,7 +11,7 @@ libs = [ # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options -solc = '0.8.21' +solc = '0.8.23' extra_output = ["devdoc", "userdoc", "storagelayout"] fs_permissions = [{ access = "read-write", path = "./" }] evm_version = 'istanbul' diff --git a/remappings.txt b/remappings.txt index f56bd7f7..90474459 100644 --- a/remappings.txt +++ b/remappings.txt @@ -6,4 +6,5 @@ hardhat/=node_modules/hardhat/ @ronin/test/=test/ @prb/test/=lib/prb-test/src/ @prb/math/=lib/prb-math/ -solady/=lib/solady/src/ \ No newline at end of file +solady/=lib/solady/src/ +foundry-deployment-kit/=lib/foundry-deployment-kit/script/ \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 00000000..931b150b --- /dev/null +++ b/run.sh @@ -0,0 +1 @@ +source lib/foundry-deployment-kit/run.sh \ No newline at end of file diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol new file mode 100644 index 00000000..408133f4 --- /dev/null +++ b/script/GeneralConfig.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { BaseGeneralConfig } from "foundry-deployment-kit/BaseGeneralConfig.sol"; +import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol"; +import { Contract } from "./utils/Contract.sol"; +import { Network } from "./utils/Network.sol"; + +contract GeneralConfig is BaseGeneralConfig { + constructor() BaseGeneralConfig("", "deployments/") { } + + function _setUpNetworks() internal virtual override { + setNetworkInfo( + Network.Goerli.chainId(), + Network.Goerli.key(), + Network.Goerli.chainAlias(), + Network.Goerli.deploymentDir(), + Network.Goerli.envLabel(), + Network.Goerli.explorer() + ); + setNetworkInfo( + Network.EthMainnet.chainId(), + Network.EthMainnet.key(), + Network.EthMainnet.chainAlias(), + Network.EthMainnet.deploymentDir(), + Network.EthMainnet.envLabel(), + Network.EthMainnet.explorer() + ); + setNetworkInfo( + Network.RoninDevnet.chainId(), + Network.RoninDevnet.key(), + Network.RoninDevnet.chainAlias(), + Network.RoninDevnet.deploymentDir(), + Network.RoninDevnet.envLabel(), + Network.RoninDevnet.explorer() + ); + } + + function _setUpContracts() internal virtual override { + // map contract name + _mapContractName(Contract.BridgeTracking); + _mapContractName(Contract.BridgeSlash); + _mapContractName(Contract.BridgeReward); + _mapContractName(Contract.RoninGatewayV3); + _mapContractName(Contract.RoninBridgeManager); + _mapContractName(Contract.MainchainGatewayV3); + _mapContractName(Contract.MainchainBridgeManager); + + _contractNameMap[Contract.WETH.key()] = "MockWrapToken"; + _contractNameMap[Contract.WRON.key()] = "MockWrapToken"; + _contractNameMap[Contract.AXS.key()] = "MockERC20"; + _contractNameMap[Contract.SLP.key()] = "MockERC20"; + _contractNameMap[Contract.USDC.key()] = "MockERC20"; + } + + function _mapContractName(Contract contractEnum) internal { + _contractNameMap[contractEnum.key()] = contractEnum.name(); + } +} diff --git a/script/Migration.s.sol b/script/Migration.s.sol new file mode 100644 index 00000000..33b487fc --- /dev/null +++ b/script/Migration.s.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { BaseMigration } from "foundry-deployment-kit/BaseMigration.s.sol"; +import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol"; +import { GeneralConfig } from "./GeneralConfig.sol"; +import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; +import { Network } from "./utils/Network.sol"; + +contract Migration is BaseMigration { + ISharedArgument public constant config = ISharedArgument(address(CONFIG)); + + function _configByteCode() internal virtual override returns (bytes memory) { + return abi.encodePacked(type(GeneralConfig).creationCode); + } + + function _sharedArguments() internal virtual override returns (bytes memory rawArgs) { + ISharedArgument.SharedParameter memory param; + + if (network() == Network.Goerli.key()) { + // Undefined + } else if (network() == DefaultNetwork.RoninTestnet.key()) { + // Undefined + } else if (network() == DefaultNetwork.Local.key()) { + param.test.proxyAdmin = makeAddr("proxy-admin"); + } else { + revert("Migration: Network Unknown Shared Parameters Unimplemented!"); + } + + rawArgs = abi.encode(param); + } +} diff --git a/script/contracts/BridgeManagerDeploy.s.sol b/script/contracts/BridgeManagerDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/BridgeManagerDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/BridgeRewardDeploy.s.sol b/script/contracts/BridgeRewardDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/BridgeRewardDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/BridgeSlashDeploy.s.sol b/script/contracts/BridgeSlashDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/BridgeSlashDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/BridgeTrackingDeploy.s.sol b/script/contracts/BridgeTrackingDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/BridgeTrackingDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/MainchainBridgeManagerDeploy.s.sol b/script/contracts/MainchainBridgeManagerDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/MainchainBridgeManagerDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/MainchainGatewayV3Deploy.s.sol b/script/contracts/MainchainGatewayV3Deploy.s.sol new file mode 100644 index 00000000..820263b7 --- /dev/null +++ b/script/contracts/MainchainGatewayV3Deploy.s.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +contract MainchainGatewayV3Deploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.MainchainGatewayV3Param memory param = config.sharedArguments().mainchainGatewayV3; + + args = abi.encode( + param.roleSetter, + param.wrappedToken, + param.roninChainId, + param.numerator, + param.highTierVWNumerator, + param.denominator, + param.addresses, + param.thresholds, + param.standards + ); + } + + function run() public virtual returns (MainchainGatewayV3) { + return MainchainGatewayV3(_deployProxy(Contract.MainchainGatewayV3.key())); + } +} diff --git a/script/contracts/MockWrapERC20Deploy.s.sol b/script/contracts/MockWrapERC20Deploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/MockWrapERC20Deploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/RoninBridgeManagerDeploy.s.sol b/script/contracts/RoninBridgeManagerDeploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/RoninBridgeManagerDeploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/RoninGatewayV3Deploy.s.sol b/script/contracts/RoninGatewayV3Deploy.s.sol new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/script/contracts/RoninGatewayV3Deploy.s.sol @@ -0,0 +1 @@ + diff --git a/script/contracts/token/AXSDeploy.s.sol b/script/contracts/token/AXSDeploy.s.sol new file mode 100644 index 00000000..025454ed --- /dev/null +++ b/script/contracts/token/AXSDeploy.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { MockERC20Deploy } from "./MockERC20Deploy.s.sol"; + +contract AXSDeploy is MockERC20Deploy { + function _arguments() internal virtual override returns (ISharedArgument.MockERC20Param memory) { + return config.sharedArguments().axs; + } + + function _getContract() internal virtual override returns (Contract) { + return Contract.AXS; + } +} diff --git a/script/contracts/token/MockERC20Deploy.s.sol b/script/contracts/token/MockERC20Deploy.s.sol new file mode 100644 index 00000000..893d405b --- /dev/null +++ b/script/contracts/token/MockERC20Deploy.s.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { MockERC20 } from "@ronin/contracts/mocks/token/MockERC20.sol"; +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { Migration } from "../../Migration.s.sol"; + +abstract contract MockERC20Deploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.MockERC20Param memory param = _arguments(); + + args = abi.encode(param.name, param.symbol); + } + + function _arguments() internal virtual returns (ISharedArgument.MockERC20Param memory); + function _getContract() internal virtual returns (Contract); + + function run() public virtual returns (MockERC20) { + return MockERC20(_deployImmutable(_getContract().key())); + } +} diff --git a/script/contracts/token/MockWrappedTokenDeploy.s.sol b/script/contracts/token/MockWrappedTokenDeploy.s.sol new file mode 100644 index 00000000..cbdddb5c --- /dev/null +++ b/script/contracts/token/MockWrappedTokenDeploy.s.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { MockWrappedToken } from "@ronin/contracts/mocks/token/MockWrappedToken.sol"; +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { Migration } from "../../Migration.s.sol"; + +abstract contract MockWrappedTokenDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.MockWrappedTokenParam memory param = _arguments(); + + args = abi.encode(param.name, param.symbol); + } + + function _arguments() internal virtual returns (ISharedArgument.MockWrappedTokenParam memory); + function _getContract() internal virtual returns (Contract); + + function run() public virtual returns (MockWrappedToken) { + return MockWrappedToken(_deployImmutable(_getContract().key())); + } +} diff --git a/script/contracts/token/SLPDeploy.s.sol b/script/contracts/token/SLPDeploy.s.sol new file mode 100644 index 00000000..cbf329a3 --- /dev/null +++ b/script/contracts/token/SLPDeploy.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { MockERC20Deploy } from "./MockERC20Deploy.s.sol"; + +contract SLPDeploy is MockERC20Deploy { + function _arguments() internal virtual override returns (ISharedArgument.MockERC20Param memory) { + return config.sharedArguments().slp; + } + + function _getContract() internal virtual override returns (Contract) { + return Contract.SLP; + } +} diff --git a/script/contracts/token/USDCDeploy.s.sol b/script/contracts/token/USDCDeploy.s.sol new file mode 100644 index 00000000..5e519d8f --- /dev/null +++ b/script/contracts/token/USDCDeploy.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { MockERC20Deploy } from "./MockERC20Deploy.s.sol"; + +contract USDCDeploy is MockERC20Deploy { + function _arguments() internal virtual override returns (ISharedArgument.MockERC20Param memory) { + return config.sharedArguments().usdc; + } + + function _getContract() internal virtual override returns (Contract) { + return Contract.USDC; + } +} diff --git a/script/contracts/token/WETHDeploy.s.sol b/script/contracts/token/WETHDeploy.s.sol new file mode 100644 index 00000000..9282fcae --- /dev/null +++ b/script/contracts/token/WETHDeploy.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { MockWrappedTokenDeploy } from "./MockWrappedTokenDeploy.s.sol"; + +contract WETHDeploy is MockWrappedTokenDeploy { + function _arguments() internal virtual override returns (ISharedArgument.MockWrappedTokenParam memory) { + return config.sharedArguments().weth; + } + + function _getContract() internal virtual override returns (Contract) { + return Contract.WETH; + } +} diff --git a/script/contracts/token/WRONDeploy.s.sol b/script/contracts/token/WRONDeploy.s.sol new file mode 100644 index 00000000..0edd6965 --- /dev/null +++ b/script/contracts/token/WRONDeploy.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { MockWrappedTokenDeploy } from "./MockWrappedTokenDeploy.s.sol"; + +contract WRONDeploy is MockWrappedTokenDeploy { + function _arguments() internal virtual override returns (ISharedArgument.MockWrappedTokenParam memory) { + return config.sharedArguments().wron; + } + + function _getContract() internal virtual override returns (Contract) { + return Contract.WRON; + } +} diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol new file mode 100644 index 00000000..03604ac4 --- /dev/null +++ b/script/interfaces/ISharedArgument.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { IGeneralConfig } from "foundry-deployment-kit/interfaces/IGeneralConfig.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; + +interface ISharedArgument is IGeneralConfig { + struct BridgeManagerParam { + uint256 num; + uint256 denom; + uint256 roninChainId; + address bridgeContract; + address[] callbackRegisters; + address[] bridgeOperators; + address[] governors; + uint96[] voteWeights; + GlobalProposal.TargetOption[] targetOptions; + address[] targets; + } + + struct MainchainGatewayV3Param { + address roleSetter; + address wrappedToken; + uint256 roninChainId; + uint256 numerator; + uint256 highTierVWNumerator; + uint256 denominator; + // addresses[0]: mainchainTokens + // addresses[1]: roninTokens + // addresses[2]: withdrawalUnlockers + address[][3] addresses; + // thresholds[0]: highTierThreshold + // thresholds[1]: lockedThreshold + // thresholds[2]: unlockFeePercentages + // thresholds[3]: dailyWithdrawalLimit + uint256[][4] thresholds; + Token.Standard[] standards; + } + + struct RoninGatewayV3Param { + address roleSetter; + uint256 numerator; + uint256 denominator; + uint256 trustedNumerator; + uint256 trustedDenominator; + address[] withdrawalMigrators; + // packedAddresses[0]: roninTokens + // packedAddresses[1]: mainchainTokens + address[][2] packedAddresses; + // packedNumbers[0]: chainIds + // packedNumbers[1]: minimumThresholds + uint256[][2] packedNumbers; + Token.Standard[] standards; + } + + struct BridgeSlashParam { + address validatorContract; + address bridgeManagerContract; + address bridgeTrackingContract; + address dposGA; + } + + struct BridgeTrackingParam { + address bridgeContract; + address validatorContract; + uint256 startedAtBlock; + } + + struct BridgeRewardParam { + address bridgeManagerContract; + address bridgeTrackingContract; + address bridgeSlashContract; + address validatorSetContract; + address dposGA; + uint256 rewardPerPeriod; + } + + struct MockWrappedTokenParam { + string name; + string symbol; + } + + struct MockERC20Param { + string name; + string symbol; + } + + struct UnitTestParam { + address proxyAdmin; + } + + struct SharedParameter { + BridgeManagerParam mainchainBridgeManager; + MainchainGatewayV3Param mainchainGatewayV3; + BridgeManagerParam roninBridgeManager; + RoninGatewayV3Param roninGatewayV3; + BridgeSlashParam bridgeSlash; + BridgeTrackingParam bridgeTracking; + BridgeRewardParam bridgeReward; + MockWrappedTokenParam weth; + MockWrappedTokenParam wron; + MockERC20Param axs; + MockERC20Param slp; + MockERC20Param usdc; + UnitTestParam test; + } + + function sharedArguments() external view returns (SharedParameter memory param); +} diff --git a/script/utils/Contract.sol b/script/utils/Contract.sol new file mode 100644 index 00000000..bd20e691 --- /dev/null +++ b/script/utils/Contract.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import { LibString, TContract } from "foundry-deployment-kit/types/Types.sol"; + +enum Contract { + WETH, + WRON, + AXS, + SLP, + USDC, + BridgeTracking, + BridgeSlash, + BridgeReward, + RoninGatewayV3, + RoninBridgeManager, + MainchainGatewayV3, + MainchainBridgeManager +} + +using { key, name } for Contract global; + +function key(Contract contractEnum) pure returns (TContract) { + return TContract.wrap(LibString.packOne(name(contractEnum))); +} + +function name(Contract contractEnum) pure returns (string memory) { + if (contractEnum == Contract.WETH) return "WETH"; + if (contractEnum == Contract.WRON) return "WRON"; + if (contractEnum == Contract.AXS) return "AXS"; + if (contractEnum == Contract.SLP) return "SLP"; + if (contractEnum == Contract.USDC) return "USDC"; + + if (contractEnum == Contract.BridgeTracking) return "BridgeTracking"; + if (contractEnum == Contract.BridgeSlash) return "BridgeSlash"; + if (contractEnum == Contract.BridgeReward) return "BridgeReward"; + if (contractEnum == Contract.RoninGatewayV3) return "RoninGatewayV3"; + if (contractEnum == Contract.RoninBridgeManager) return "RoninBridgeManager"; + if (contractEnum == Contract.MainchainGatewayV3) return "MainchainGatewayV3"; + if (contractEnum == Contract.MainchainBridgeManager) return "MainchainBridgeManager"; + + revert("Contract: Unknown contract"); +} diff --git a/script/utils/Network.sol b/script/utils/Network.sol new file mode 100644 index 00000000..aa817211 --- /dev/null +++ b/script/utils/Network.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { LibString, TNetwork } from "foundry-deployment-kit/types/Types.sol"; + +enum Network { + Goerli, + EthMainnet, + RoninDevnet +} + +using { key, name, chainId, chainAlias, envLabel, deploymentDir, explorer } for Network global; + +function chainId(Network network) pure returns (uint256) { + if (network == Network.Goerli) return 5; + if (network == Network.EthMainnet) return 1; + if (network == Network.RoninDevnet) return 2022; + revert("Network: Unknown chain id"); +} + +function key(Network network) pure returns (TNetwork) { + return TNetwork.wrap(LibString.packOne(name(network))); +} + +function explorer(Network network) pure returns (string memory link) { + if (network == Network.Goerli) return "https://goerli.etherscan.io/"; + if (network == Network.EthMainnet) return "https://etherscan.io/"; +} + +function name(Network network) pure returns (string memory) { + if (network == Network.Goerli) return "Goerli"; + if (network == Network.RoninDevnet) return "RoninDevnet"; + if (network == Network.EthMainnet) return "EthMainnet"; + revert("Network: Unknown network name"); +} + +function deploymentDir(Network network) pure returns (string memory) { + if (network == Network.Goerli) return "goerli/"; + if (network == Network.EthMainnet) return "ethereum/"; + if (network == Network.RoninDevnet) return "ronin-devnet/"; + revert("Network: Unknown network deployment directory"); +} + +function envLabel(Network network) pure returns (string memory) { + if (network == Network.Goerli) return "TESTNET_PK"; + if (network == Network.RoninDevnet) return "DEVNET_PK"; + if (network == Network.EthMainnet) return "MAINNET_PK"; + revert("Network: Unknown private key env label"); +} + +function chainAlias(Network network) pure returns (string memory) { + if (network == Network.Goerli) return "goerli"; + if (network == Network.EthMainnet) return "ethereum"; + if (network == Network.RoninDevnet) return "ronin-devnet"; + revert("Network: Unknown network alias"); +} diff --git a/src/mocks/token/MockWrappedToken.sol b/src/mocks/token/MockWrappedToken.sol new file mode 100644 index 00000000..1cacf73c --- /dev/null +++ b/src/mocks/token/MockWrappedToken.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GNU +pragma solidity ^0.8.0; + +/** + * @notice This contract MUST BE used in development only. + */ +contract MockWrappedToken { + string public name; + string public symbol; + uint8 public decimals = 18; + + event Approval(address indexed src, address indexed guy, uint256 wad); + event Transfer(address indexed src, address indexed dst, uint256 wad); + event Deposit(address indexed dst, uint256 wad); + event Withdrawal(address indexed src, uint256 wad); + + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; + + constructor(string memory name_, string memory symbol_) { + name = name_; + symbol = symbol_; + } + + receive() external payable { + deposit(); + } + + fallback() external payable { + deposit(); + } + + function deposit() public payable { + balanceOf[msg.sender] += msg.value; + emit Deposit(msg.sender, msg.value); + } + + function withdraw(uint256 wad) public { + require(balanceOf[msg.sender] >= wad); + balanceOf[msg.sender] -= wad; + payable(msg.sender).transfer(wad); + emit Withdrawal(msg.sender, wad); + } + + function totalSupply() public view returns (uint256) { + return address(this).balance; + } + + function approve(address guy, uint256 wad) public returns (bool) { + allowance[msg.sender][guy] = wad; + emit Approval(msg.sender, guy, wad); + return true; + } + + function transfer(address dst, uint256 wad) public returns (bool) { + return transferFrom(msg.sender, dst, wad); + } + + function transferFrom(address src, address dst, uint256 wad) public returns (bool) { + require(balanceOf[src] >= wad); + + if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) { + require(allowance[src][msg.sender] >= wad); + allowance[src][msg.sender] -= wad; + } + + balanceOf[src] -= wad; + balanceOf[dst] += wad; + + emit Transfer(src, dst, wad); + + return true; + } +} diff --git a/upload-sig.sh b/upload-sig.sh new file mode 100644 index 00000000..ea7cb2b9 --- /dev/null +++ b/upload-sig.sh @@ -0,0 +1 @@ +source lib/foundry-deployment-kit/upload-sig.sh \ No newline at end of file diff --git a/verify.sh b/verify.sh new file mode 100644 index 00000000..28191ce2 --- /dev/null +++ b/verify.sh @@ -0,0 +1,75 @@ +# Default network value +network="2021" +networkName="ronin-testnet" +endpoint=https://sourcify.roninchain.com/server + +# Function to print usage and exit +usage() { + echo "Usage: $0 -c " + echo " -c: Specify the network (ronin-testnet or ronin-mainnet)" + exit 1 +} + +# Parse command-line options +while getopts "c:" opt; do + case $opt in + c) + case "$OPTARG" in + ronin-testnet) + child_folder="ronin-testnet" + network="2021" + networkName="ronin-testnet" + ;; + ronin-mainnet) + child_folder="ronin-mainnet" + network="2020" + networkName="ronin-mainnet" + ;; + *) + echo "Unknown network specified: $OPTARG" + usage + ;; + esac + ;; + *) + usage + ;; + esac +done + +yarn hardhat sourcify --endpoint ${endpoint} --network ${networkName} + +# ToDo(TuDo): make foundry verification perfectly match using sourcify +# # Shift the processed options out of the argument list +# shift $((OPTIND - 1)) + +# # Define the deployments folder by concatenating it with the child folder +# folder="deployments/$child_folder" + +# # Check if the specified folder exists +# if [ ! -d "$folder" ]; then +# echo "Error: The specified folder does not exist for the selected network." +# exit 1 +# fi +# # Loop through JSON files in the selected folder +# for file in "$folder"/*.json; do +# # Check if the file exists and is a regular file +# if [ -f "$file" ]; then +# # Exclude the .chainId file +# if [ "$(basename "$file")" != ".chainId" ]; then +# # Extract contractName and address from the JSON file +# contractName=$(jq -r '.contractName' "$file") +# address=$(jq -r '.address' "$file") +# absolutePath=$(jq -r '.ast.absolutePath' "$file") + +# # Check if contractName and address are not empty +# if [ -n "$contractName" ] && [ -n "$address" ]; then +# echo "$absolutePath" +# # Call the forge command for verification with the specified network +# forge verify-contract --verifier sourcify --verifier-url ${endpoint} -c "$network" "$address" "$absolutePath:$contractName" +# else +# echo "Error: Missing contractName or address in $file" +# fi +# fi +# fi +# done \ No newline at end of file From f53462dccc7c1a1923c03d4efea30dd1ba745f27 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 00:33:26 +0700 Subject: [PATCH 26/73] forge install: foundry-deployment-kit 68b8e5a83113275cae9f4332cc99924c18779887 --- lib/foundry-deployment-kit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit index e17e2699..68b8e5a8 160000 --- a/lib/foundry-deployment-kit +++ b/lib/foundry-deployment-kit @@ -1 +1 @@ -Subproject commit e17e2699290d58f6474087c4ecbe50ea38c2c19e +Subproject commit 68b8e5a83113275cae9f4332cc99924c18779887 From 9b58711eb72d0e5f50696d4e9fc04b81beddefd0 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 05:33:32 +0700 Subject: [PATCH 27/73] script: add deployment scripts --- logs/debug.ansi | 1527 +++++++++++++++++ remappings.txt | 1 + script/GeneralConfig.sol | 45 +- script/Migration.s.sol | 153 +- script/contracts/BridgeManagerDeploy.s.sol | 1 - script/contracts/BridgeRewardDeploy.s.sol | 32 + script/contracts/BridgeSlashDeploy.s.sol | 24 + script/contracts/BridgeTrackingDeploy.s.sol | 21 + .../MainchainBridgeManagerDeploy.s.sol | 32 + .../contracts/MainchainGatewayV3Deploy.s.sol | 24 +- script/contracts/MockWrapERC20Deploy.s.sol | 1 - .../contracts/RoninBridgeManagerDeploy.s.sol | 33 + script/contracts/RoninGatewayV3Deploy.s.sol | 32 + script/interfaces/ISharedArgument.sol | 3 + script/utils/Utils.sol | 46 + src/mocks/token/MockWrapToken.sol | 74 - test/bridge/integration/Base.t.sol | 65 + 17 files changed, 2026 insertions(+), 88 deletions(-) create mode 100644 logs/debug.ansi delete mode 100644 script/contracts/BridgeManagerDeploy.s.sol delete mode 100644 script/contracts/MockWrapERC20Deploy.s.sol create mode 100644 script/utils/Utils.sol delete mode 100644 src/mocks/token/MockWrapToken.sol create mode 100644 test/bridge/integration/Base.t.sol diff --git a/logs/debug.ansi b/logs/debug.ansi new file mode 100644 index 00000000..9a5ebdf4 --- /dev/null +++ b/logs/debug.ansi @@ -0,0 +1,1527 @@ +Compiling 11 files with 0.8.23 +Solc 0.8.23 finished in 24.97s +Compiler run successful! +2024-01-17T22:15:03.885799Z ERROR forge::runner: setUp failed reason=revert: StdCheats deployCode(string,bytes): Deployment failed. contract=0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496 + +Running 1 test for test/bridge/integration/Base.t.sol:Base_Integration +[FAIL. Reason: setup failed: revert: StdCheats deployCode(string,bytes): Deployment failed.] setUp() (gas: 0) +Logs: + Block Number: 1 | Timestamp: 1 | Gas Price: 0 | Block Gas Limit: 9223372036854775807 + + NetworkConfig: fork mode disabled, no active fork + NetworkConfig: fork mode disabled, no active fork + NetworkConfig: fork mode disabled, no active fork + NetworkConfig: fork mode disabled, no active fork + NetworkConfig: fork mode disabled, no active fork + NetworkConfig: fork mode disabled, no active fork + Deployer 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38 + > roninGateway 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496 + > mainchainGateway 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB + > bridgeTrackingContract 0x50EEf481cae4250d252Ae577A09bF514f224C6C4 + > bridgeSlashContract 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809 + > bridgeRewardContract 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351 + > roninBridgeManagerContract 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3 + > mainchainBridgeManagerContract 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1 + > WETH 0x978e3286EB805934215a88694d80b09aDed68D90 + > AXS 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb + > SLP 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4 + > USDC 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6 + > _deployProxy RoninGatewayV3 ... + > _deployLogic RoninGatewayV3 ... + RoninGatewayV3Logic will be deployed at: address/0x90193c961a926261b756d1e5bb255e67ff9498a1 (nonce: 3) + Skipping artifact generation for: (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1] + + RoninGatewayV3Proxy will be deployed at: address/0xa8452ec99ce0c64f20701db7dd3abdb607c00496 (nonce: 4) + Skipping artifact generation for: (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + + > _deployImmutable RoninBridgeManager ... + +Traces: + [1471827968] Base_Integration::setUp() + ├─ [1451388669] → new @0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f + │ ├─ [0] VM::makePersistent(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761]) + │ │ └─ ← () + │ ├─ [0] VM::allowCheatcodes(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761]) + │ │ └─ ← () + │ ├─ [0] VM::etch(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], 0x6080604052348015630000001257600080fd5b506040805160208082018352600082528251808401909352600c83526b6465706c6f796d656e74732f60a01b9083015290808281600d630000005683826300003b66565b50600e630000006782826300003b66565b5060149150630000007c905082826300003b66565b50630000008963000000c4565b50630000009663000002eb565b63000000a26300000409565b63000000ae630000055c565b63000000bb81630000056d565b5050630000453a565b60405163348051d760e11b815243600482015263000002e99063000002e290600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa158015630000011d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000014991908101906300003d48565b60405163348051d760e11b8152426004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa1580156300000196573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000001c291908101906300003d48565b60405163348051d760e11b81523a6004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa158015630000020f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000023b91908101906300003d48565b60405163348051d760e11b8152456004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa1580156300000288573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000002b491908101906300003d48565b60405160200163000002cb94939291906300003da4565b60408051601f198184030181529190526300000dd5565b6300000e0e565b565b630000034b63000002fe60006300000e60565b630000030c60006300000f2c565b630000031a60006300000f57565b630000032860006300001077565b6300000336600063000011b2565b6300000344600063000012e7565b6300001399565b63000003a4630000035e60016300000e60565b630000036c60016300000f2c565b630000037a60016300000f57565b630000038860016300001077565b6300000396600163000011b2565b6300000344600163000012e7565b63000003fd63000003b760026300000e60565b63000003c560026300000f2c565b63000003d360026300000f57565b63000003e160026300001077565b63000003ef600263000011b2565b6300000344600263000012e7565b63000002e96300001472565b63000004176000630000157d565b600f60006300000428816300001661565b81526020019081526020016000209081630000044691906300003b66565b5063000004556001630000157d565b600f6000630000046760016300001661565b81526020019081526020016000209081630000048591906300003b66565b5063000004c3630000049960016300000f2c565b63000004a760006300001661565b73505d91e8fd2091794b45b27f86c045529fa92cd76300001675565b630000050063000004d660026300000f2c565b63000004e460006300001661565b73a3e7d085e65cb0b916f6717da876b7be5cc92f036300001675565b630000053d630000051360026300000f2c565b630000052160016300001661565b73ca11bde05977b3631167028862be2a173976ca116300001675565b6300000550630000051360016300000f2c565b63000002e963000017b8565b63000002e96001600160e01b038116565b60405163130d191f60e11b815260609060008051602063000094488339815191529063261a323e9063000005a79085906004016300003ed1565b6020604051808303816000875af192505050801563000005e8575060408051601f3d908101601f1916820190925263000005e5918101906300003efa565b60015b63000006cb57604051630625e2cf60e51b815260008051602063000094488339815191529063c4bc59e09063000006259085906004016300003ed1565b600060405180830381865afa925050508015630000066957506040513d6000823e601f3d908101601f19168201604052630000066691908101906300003f1b565b60015b63000006c25763000006be6040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b5050565b90506300000728565b8063000007265763000007216040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b505050565b505b604051630625e2cf60e51b815260008051602063000094488339815191529063c4bc59e090630000075f9085906004016300003ed1565b600060405180830381865afa92505050801563000007a357506040513d6000823e601f3d908101601f1916820160405263000007a091908101906300003f1b565b60015b63000007f85763000006be6040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b905060005b8151811015630000072157600060008051602063000094ee83398151915260001c6001600160a01b031663c4bc59e0848481518110630000084457630000084463000040ab565b6020026020010151602001516040518263ffffffff1660e01b8152600401630000087091906300003ed1565b600060405180830381865afa158015630000088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000008bb91908101906300003f1b565b9050600060008051602063000094ee83398151915260001c6001600160a01b031663fa91454d60008051602063000094ee83398151915260001c6001600160a01b03166360f9bb11878781518110630000091b57630000091b63000040ab565b602002602001015160200151604051602001630000093b919063000040c1565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401630000096a91906300003ed1565b600060405180830381865afa1580156300000989573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000009b591908101906300003d48565b6040518263ffffffff1660e01b815260040163000009d591906300003ed1565b602060405180830381865afa15801563000009f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000a1c919063000040f2565b905060005b82518110156300000dc55760008382815181106300000a46576300000a4663000040ab565b60200260200101516020015190506300000a8860405180604001604052806005815260200164173539b7b760d91b81525082630000229c60201b90919060201c565b156300000dba576040805180820190915260018152602f60f81b60208201526000906300000ab990839063000022c0565b9050600081600183516300000ad09190630000410d565b815181106300000ae6576300000ae663000040ab565b6020026020010151905060006300000b2b6040518060400160405280600a815260200169283937bc3c973539b7b760b11b81525085630000229c60201b90919060201c565b6300000b565760405180604001604052806005815260200164173539b7b760d91b8152506300000b7a565b6040518060400160405280600a815260200169283937bc3c973539b7b760b11b8152505b6040805160208101909152600081529091506300000b9d90839083906300002377565b6040516360f9bb1160e01b81529092506000906000805160206300009448833981519152906360f9bb11906300000bda9088906004016300003ed1565b600060405180830381865afa1580156300000bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526300000c2591908101906300003d48565b604051631e19e65760e01b8152909150600090600080516020630000944883398151915290631e19e657906300000c629085906004016300004130565b602060405180830381865afa1580156300000c81573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000ca991906300004171565b90506300000cba88828663000024b8565b60408051808201909152600a808252692637b3b4b1973539b7b760b11b60209283015287518082111560091990910181028901909201207f0d7be4bcd70547aa33402ed2ab044308c53a781d008c9f83b15d55b94a9b743c14166300000db45760008881526011602052604090206300000d3690826300002659565b5080601260008a8152602001908152602001600020856040516300000d5d9190630000419e565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b039485161790558651601f8089015160008e81526013865284812096881681529590945291909320600019909301100290555b50505050505b506001016300000a21565b50826001019250505063000007fd565b60606300000e08604051806040016040528060058152602001641b5b39336d60d81b81525083630000267960201b60201c565b92915050565b6300000e5d816040516024016300000e2891906300003ed1565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b1790915263000026c716565b50565b6000808260028111156300000e7b576300000e7b6300003e8b565b036300000e8b5750617a69919050565b60028260028111156300000ea5576300000ea56300003e8b565b036300000eb557506107e4919050565b60018260028111156300000ecf576300000ecf6300003e8b565b036300000edf57506107e5919050565b60405162461bcd60e51b815260206004820181905260248201527f44656661756c744e6574776f726b3a20556e6b6e6f776e20636861696e20696460448201526064015b60405180910390fd5b60006300000e086300000f408363000026e0565b6000601f600183510310601f830151029050919050565b606060008260028111156300000f73576300000f736300003e8b565b036300000f9b5750506040805180820190915260058152641b1bd8d85b60da1b602082015290565b60018260028111156300000fb5576300000fb56300003e8b565b036300000fe557505060408051808201909152600d81526c1c9bdb9a5b8b5d195cdd1b995d609a1b602082015290565b60028260028111156300000fff576300000fff6300003e8b565b03630000102f57505060408051808201909152600d81526c1c9bdb9a5b8b5b585a5b9b995d609a1b602082015290565b60405162461bcd60e51b81526020600482015260256024820152600080516020630000950e833981519152604482015264616c69617360d81b60648201526084016300000f23565b6060600082600281111563000010935763000010936300003e8b565b0363000010bc5750506040805180820190915260068152656c6f63616c2f60d01b602082015290565b600182600281111563000010d65763000010d66300003e8b565b03630000110757505060408051808201909152600e81526d726f6e696e2d746573746e65742f60901b602082015290565b600282600281111563000011215763000011216300003e8b565b03630000115257505060408051808201909152600e81526d726f6e696e2d6d61696e6e65742f60901b602082015290565b60405162461bcd60e51b81526020600482015260346024820152600080516020630000950e83398151915260448201527f6465706c6f796d656e74206469726563746f727900000000000000000000000060648201526084016300000f23565b6060600082600281111563000011ce5763000011ce6300003e8b565b0363000011f95750506040805180820190915260088152674c4f43414c5f504b60c01b602082015290565b600182600281111563000012135763000012136300003e8b565b03630000124057505060408051808201909152600a815269544553544e45545f504b60b01b602082015290565b6002826002811115630000125a57630000125a6300003e8b565b03630000128757505060408051808201909152600a8152694d41494e4e45545f504b60b01b602082015290565b60405162461bcd60e51b815260206004820152602d60248201527f44656661756c744e6574776f726b3a20556e6b6e6f776e20707269766174652060448201526c1ad95e48195b9d881b1858995b609a1b60648201526084016300000f23565b6060600282600281111563000013035763000013036300003e8b565b03630000134357505060408051808201909152601b81527f68747470733a2f2f6170702e726f6e696e636861696e2e636f6d2f0000000000602082015290565b6001826002811115630000135d57630000135d6300003e8b565b0363000013855760405180606001604052806022815260200163000094686022913992915050565b505060408051602081019091526000815290565b60008681526017602052604090819020869055805160c081019091528063000013c4868963000027fc565b815260208082018990526040808301889052606083018790526080830186905260a090920184905260008881526016825282902083518155908301516001820155908201516002820190630000141c90826300003b66565b5060608201516003820190630000143590826300003b66565b5060808201516004820190630000144e90826300003b66565b5060a08201516005820190630000146790826300003b66565b505050505050505050565b63000014cb630000148560006300002add565b630000149360006300002ba4565b63000014a160006300002bb8565b63000014af60006300002cd5565b63000014bd60006300002e0b565b630000034460006300002f3a565b630000152463000014de60016300002add565b63000014ec60016300002ba4565b63000014fa60016300002bb8565b630000150860016300002cd5565b630000151660016300002e0b565b630000034460016300002f3a565b63000002e9630000153760026300002add565b630000154560026300002ba4565b630000155360026300002bb8565b630000156160026300002cd5565b630000156f60026300002e0b565b630000034460026300002f3a565b6060600082600181111563000015995763000015996300003e8b565b0363000015c657505060408051808201909152600a815269283937bc3ca0b236b4b760b11b602082015290565b600182600181111563000015e05763000015e06300003e8b565b03630000160d57505060408051808201909152600a8152694d756c746963616c6c3360b01b602082015290565b60405162461bcd60e51b815260206004820152602160248201527f44656661756c74436f6e74726163743a20556e6b6e6f776e20636f6e747261636044820152601d60fa1b60648201526084016300000f23565b60006300000e086300000f4083630000157d565b600083815260166020526040812060010154906300001695846300002ff5565b9050811580159063000016a85750805115155b63000017115760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b60648201526084016300000f23565b630000172082848363000024b8565b6000828152601160205260409020630000173c90846300002659565b5060008281526013602090815260408083206001600160a01b0387168452825280832087905584835260129091529081902090518491906300001782908490630000419e565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b63000017c66005630000313f565b63000017d46006630000313f565b63000017e26007630000313f565b63000017f06008630000313f565b63000017fe6009630000313f565b630000180c600a630000313f565b630000181a600b630000313f565b60408051808201909152600d81526c26b7b1b5abb930b82a37b5b2b760991b6020820152600f60006300001850815b63000031a2565b81526020019081526020016000209081630000186e91906300003b66565b5060408051808201909152600d81526c26b7b1b5abb930b82a37b5b2b760991b6020820152600f600063000018a5600163000031a2565b8152602001908152602001600020908163000018c391906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f600063000018f6600263000031a2565b81526020019081526020016000209081630000191491906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f60006300001947600363000031a2565b81526020019081526020016000209081630000196591906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f60006300001998600463000031a2565b8152602001908152602001600020908163000019b691906300003b66565b5063000019e663000019d44660009081526017602052604090205490565b63000019e260006300000f2c565b1490565b1563000002e957600063000019fb63000031b6565b90506300001aad6300001a1060006300000f2c565b6300001a1e600863000031a2565b604051633a31bd3d60e11b81526001600160a01b03851660048083019190915260248201526000805160206300009448833981519152906374637a7a906044015b602060405180830381865afa1580156300001a7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300001aa691906300004171565b6300001675565b6300001b136300001ac060006300000f2c565b6300001ace600963000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600560248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001b796300001b2660006300000f2c565b6300001b34600563000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600760248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001bdf6300001b8c60006300000f2c565b6300001b9a600663000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600960248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001c456300001bf260006300000f2c565b6300001c00600763000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600b60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001cab6300001c5860006300000f2c565b6300001c66600a63000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600d60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001d116300001cbe60006300000f2c565b6300001ccc600b63000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600e60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001d776300001d2460006300000f2c565b6300001d32600063000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600f60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001ddd6300001d8a60006300000f2c565b6300001d98600263000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601060248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001e436300001df060006300000f2c565b6300001dfe600363000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601160248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001ea96300001e5660006300000f2c565b6300001e64600463000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601260248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6040805180820190915260088152672232b83637bcb2b960c11b60208201526300001ed6908263000032b2565b60408051808201909152600f81526e203e20726f6e696e4761746577617960881b60208201526300001f31906300001f2a6300001f1560006300000f2c565b6300001f23600863000031a2565b6300003303565b63000032b2565b60408051808201909152601381527f203e206d61696e636861696e476174657761790000000000000000000000000060208201526300001f8c906300001f2a6300001f7e60006300000f2c565b6300001f23600a63000031a2565b60408051808201909152601981527f203e20627269646765547261636b696e67436f6e74726163740000000000000060208201526300001fe7906300001f2a6300001fd960006300000f2c565b6300001f23600563000031a2565b60408051808201909152601681527f203e20627269646765536c617368436f6e74726163740000000000000000000060208201526300002042906300001f2a630000203460006300000f2c565b6300001f23600663000031a2565b60408051808201909152601781527f203e20627269646765526577617264436f6e74726163740000000000000000006020820152630000209d906300001f2a630000208f60006300000f2c565b6300001f23600763000031a2565b60408051808201909152601d81527f203e20726f6e696e4272696467654d616e61676572436f6e7472616374000000602082015263000020f8906300001f2a63000020ea60006300000f2c565b6300001f23600963000031a2565b6300002139604051806060016040528060218152602001630000948a602191396300001f2a630000212b60006300000f2c565b6300001f23600b63000031a2565b6040805180820190915260078152660407c40ae8aa8960cb1b6020820152630000217e906300001f2a630000217060006300000f2c565b6300001f23600063000031a2565b604080518082019091526006815265203e2041585360d01b602082015263000021c2906300001f2a63000021b460006300000f2c565b6300001f23600263000031a2565b6040805180820190915260068152650203e20534c560d41b60208201526300002206906300001f2a63000021f860006300000f2c565b6300001f23600363000031a2565b604080518082019091526007815266203e205553444360c81b60208201526300000e5d906300001f2a630000223d60006300000f2c565b6300001f23600463000031a2565b63000006be8282604051602401630000226792919063000041be565b60408051601f198184030181529190526020810180516001600160e01b03908116634b5c427760e01b1790915263000026c716565b80518251602092830182902082820391831115918202909401909201209091141690565b6060600063000022d28484630000332f565b9050601f1960208201600183510160051b81018651838201526001845101845260005b825160608452818114630000233e5760405182820380825286601f8201165b8b85018101518382015287018063000023145750600082820160200152603f018616810160405284525b87516020949094019301905081831063000022f557505050508091508251630000237057602081019150600281510382525b5092915050565b6060835183518351602087019650602086019550602085019450602060405101935082870183831163000024635760018382030160006020851063000023bc57508388205b601f851660200360031b89515b8b51818118831c6300002448578315630000240f5783888e2014630000240f57808a5260019c8d019c90990198848d1063000024075750630000245e565b5063000023c9565b60005b8b8101518b820152602001878110630000241257509b87019b988601988715630000244857848d1063000024075750630000245e565b895260019b8c019b90980197838c1063000023c9575b505050505b84935060206040510194508781038585030192505b8088101563000024975787518452602097880197909301926300002478565b50506000818401908152602001604052601f19909201918252509392505050565b60405163348051d760e11b81526004810184905260008051602063000094488339815191529063c657c7189084906300002549908490636900a3ae90602401600060405180830381865afa1580156300002516573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000254291908101906300003d48565b6300003416565b6300002556856300000dd5565b604051632b65311f60e11b81526001600160a01b03881660048201526000805160206300009448833981519152906356ca623e90602401600060405180830381865afa15801563000025ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000025d891908101906300003d48565b60405160200163000025ee9392919063000041f4565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401630000261e929190630000427a565b600060405180830381600087803b158015630000263a57600080fd5b505af11580156300002650573d6000803e3d6000fd5b50505050505050565b60006300002672836001600160a01b0384166300003449565b9392505050565b60608282604051806040016040528060048152602001631b5b306d60e01b81525060405160200163000026b09392919063000042a2565b604051602081830303815290604052905092915050565b6300000e5d81630000349e60201b6300002af11760201c565b6060600082600281111563000026fc5763000026fc6300003e8b565b036300002724575050604080518082019091526005815264131bd8d85b60da1b602082015290565b6001826002811115630000273e57630000273e6300003e8b565b03630000276d57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b600282600281111563000027875763000027876300003e8b565b0363000027b657505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b815260206004820152602480820152600080516020630000950e8339815191526044820152636e616d6560e01b60648201526084016300000f23565b60008060008051602063000094ee83398151915260001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156300002872575060408051601f3d908101601f19168201909252630000286f9181019063000040f2565b60015b63000028bf5763000028a463000002e26040518060600160405280603181526020016300009417603191396300000dd5565b5060008051602063000094ce83398151915290506300000e08565b905046830363000028d35790506300000e08565b60155460ff1663000028fa575060008051602063000094ce83398151915290506300000e08565b6000838152601760209081526040808320548352601690915290205460008051602063000094ce8339815191528114630000293a5791506300000e089050565b60405163975a6ce960e01b815260009060008051602063000094488339815191529063975a6ce99063000029749089906004016300003ed1565b600060405180830381865afa1580156300002993573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000029bf91908101906300003d48565b604051630637469360e31b81529091506000805160206300009448833981519152906331ba34989063000029f99084906004016300003ed1565b6020604051808303816000875af19250505080156300002a3a575060408051601f3d908101601f191682019092526300002a379181019063000040f2565b60015b6300002a92576300002a746300002a6c6040518060600160405280602b815260200163000093ec602b913963000034bf565b82630000224b565b5060008051602063000094ce83398151915292506300000e08915050565b6300002ad06300002ac8886040516020016300002ab1919063000042f1565b60408051601f198184030181529190526300003416565b8263000034f2565b93506300000e0892505050565b6000808260028111156300002af8576300002af86300003e8b565b036300002b0757506005919050565b60018260028111156300002b21576300002b216300003e8b565b036300002b3057506001919050565b60028260028111156300002b4a576300002b4a6300003e8b565b036300002b5a57506107e6919050565b60405162461bcd60e51b815260206004820152601960248201527f4e6574776f726b3a20556e6b6e6f776e20636861696e2069640000000000000060448201526064016300000f23565b60006300000e086300000f40836300003543565b606060008260028111156300002bd4576300002bd46300003e8b565b036300002bfd575050604080518082019091526006815265676f65726c6960d01b602082015290565b60018260028111156300002c17576300002c176300003e8b565b036300002c42575050604080518082019091526008815267657468657265756d60c01b602082015290565b60028260028111156300002c5c576300002c5c6300003e8b565b036300002c8b57505060408051808201909152600c81526b1c9bdb9a5b8b59195d9b995d60a21b602082015290565b60405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b20616c696173000060448201526064016300000f23565b606060008260028111156300002cf1576300002cf16300003e8b565b036300002d1b575050604080518082019091526007815266676f65726c692f60c81b602082015290565b60018260028111156300002d35576300002d356300003e8b565b036300002d61575050604080518082019091526009815268657468657265756d2f60b81b602082015290565b60028260028111156300002d7b576300002d7b6300003e8b565b036300002dab57505060408051808201909152600d81526c726f6e696e2d6465766e65742f60981b602082015290565b60405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b206465706c6f796d60448201526c656e74206469726563746f727960981b60648201526084016300000f23565b606060008260028111156300002e27576300002e276300003e8b565b036300002e5457505060408051808201909152600a815269544553544e45545f504b60b01b602082015290565b60028260028111156300002e6e576300002e6e6300003e8b565b036300002e9a5750506040805180820190915260098152684445564e45545f504b60b81b602082015290565b60018260028111156300002eb4576300002eb46300003e8b565b036300002ee157505060408051808201909152600a8152694d41494e4e45545f504b60b01b602082015290565b60405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b3a20556e6b6e6f776e2070726976617465206b657920656e76604482015265081b1858995b60d21b60648201526084016300000f23565b606060008260028111156300002f56576300002f566300003e8b565b036300002f9657505060408051808201909152601c81527f68747470733a2f2f676f65726c692e65746865727363616e2e696f2f00000000602082015290565b60018260028111156300002fb0576300002fb06300003e8b565b036300002ff057505060408051808201909152601581527f68747470733a2f2f65746865727363616e2e696f2f0000000000000000000000602082015290565b919050565b606060006300003006836300003661565b6000848152600f602052604090208054919250906300003027906300003ad0565b80601f01602080910402602001604051908101604052809291908181526020018280546300003057906300003ad0565b801563000030ac5780601f10630000307f5761010080835404028352916020019163000030ac565b820191906000526020600020905b815481529060010190602001808311630000308d57829003601f168201915b50505050509150818051906020012081805190602001201463000030d2578063000030d4565b815b915081516000141581600f600086815260200190815260200160002060405160200163000031059291906300004353565b6040516020818303038152906040529063000031385760405162461bcd60e51b81526004016300000f2391906300003ed1565b5050919050565b630000316381600b811115630000315c57630000315c6300003e8b565b6300003689565b600f6000630000318484600b81111563000018495763000018496300003e8b565b8152602001908152602001600020908163000006be91906300003b66565b60006300000e086300000f40836300003689565b600154600090610100900460ff1663000031dd57600b546001600160a01b031663000031ea565b600c546001600160a01b03165b90506001600160a01b038116158015630000321d5750630000321d63000019d44660009081526017602052604090205490565b15630000324757507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b03811663000032af5760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b60648201526084016300000f23565b90565b63000006be828260405160240163000032ce9291906300004477565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b1790915263000026c716565b6000828152601660205260408120600101546300002672906300003328846300002ff5565b6300003a37565b606082518251818111630000340e576020850194506020840193506020604051019250846001828488010301600060208410630000336c57508286205b601f841660200360031b87515b8951818118831c63000033e057831563000033b85783878c201463000033b85760018b019a50848b1063000033b0575063000033f1565b506300003379565b858b03895299860199602090980197861563000033e057848b1063000033b0575063000033f1565b5060018a019950838a106300003379575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b60606300000e08604051806040016040528060058152602001641b5b39346d60d81b81525083630000267960201b60201c565b60008181526001830160205260408120546300003494575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556300000e08565b5060006300000e08565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606300000e08604051806040016040528060058152602001641b5b39316d60d81b81525083630000267960201b60201c565b63000006be8282604051602401630000350e92919063000044a5565b60408051601f198184030181529190526020810180516001600160e01b03908116632d839cb360e21b1790915263000026c716565b60606000826002811115630000355f57630000355f6300003e8b565b036300003588575050604080518082019091526006815265476f65726c6960d01b602082015290565b600282600281111563000035a25763000035a26300003e8b565b0363000035d057505060408051808201909152600b81526a149bdb9a5b91195d9b995d60aa1b602082015290565b600182600281111563000035ea5763000035ea6300003e8b565b03630000361757505060408051808201909152600a815269115d1a13585a5b9b995d60b21b602082015290565b60405162461bcd60e51b815260206004820152601d60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b206e616d6500000060448201526064016300000f23565b604080518082019091526000808252601f820183905281518201602001526060906300000e08565b6060600082600b81111563000036a55763000036a56300003e8b565b0363000036cc5750506040805180820190915260048152630ae8aa8960e31b602082015290565b600182600b81111563000036e65763000036e66300003e8b565b03630000370d5750506040805180820190915260048152632ba927a760e11b602082015290565b600282600b81111563000037275763000037276300003e8b565b03630000374d57505060408051808201909152600381526241585360e81b602082015290565b600382600b81111563000037675763000037676300003e8b565b03630000378d5750506040805180820190915260038152620534c560ec1b602082015290565b600482600b81111563000037a75763000037a76300003e8b565b0363000037ce5750506040805180820190915260048152635553444360e01b602082015290565b600582600b81111563000037e85763000037e86300003e8b565b03630000381957505060408051808201909152600e81526d427269646765547261636b696e6760901b602082015290565b600682600b81111563000038335763000038336300003e8b565b03630000386157505060408051808201909152600b81526a084e4d2c8cecaa6d8c2e6d60ab1b602082015290565b600782600b811115630000387b57630000387b6300003e8b565b0363000038aa57505060408051808201909152600c81526b109c9a5919d954995dd85c9960a21b602082015290565b600882600b81111563000038c45763000038c46300003e8b565b0363000038f557505060408051808201909152600e81526d526f6e696e47617465776179563360901b602082015290565b600982600b811115630000390f57630000390f6300003e8b565b0363000039445750506040805180820190915260128152712937b734b7213934b233b2a6b0b730b3b2b960711b602082015290565b600a82600b811115630000395e57630000395e6300003e8b565b0363000039935750506040805180820190915260128152714d61696e636861696e47617465776179563360701b602082015290565b600b82600b81111563000039ad5763000039ad6300003e8b565b0363000039ed57505060408051808201909152601681527f4d61696e636861696e4272696467654d616e6167657200000000000000000000602082015290565b60405162461bcd60e51b815260206004820152601a60248201527f436f6e74726163743a20556e6b6e6f776e20636f6e747261637400000000000060448201526064016300000f23565b60008281526012602052604080822090516300003a57908490630000419e565b90815260405160209181900382018120546001600160a01b03169250821515916300003a879185910163000044cb565b6040516020818303038152906040529063000023705760405162461bcd60e51b81526004016300000f2391906300003ed1565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806300003ae657607f821691505b6020821081036300003b0857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156300000721576000816000526020600020601f850160051c810160208610156300003b3b5750805b601f850160051c820191505b818110156300003b5e578281556001016300003b47565b505050505050565b81516001600160401b038111156300003b85576300003b856300003aba565b6300003ba1816300003b9984546300003ad0565b846300003b0e565b602080601f8311600181146300003bdc57600084156300003bc25750858301515b600019600386901b1c1916600185901b1785556300003b5e565b600085815260208120601f198616915b828110156300003c0f578886015182559484019460019091019084016300003bec565b50858210156300003c2f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60405160a081016001600160401b03811182821017156300003c67576300003c676300003aba565b60405290565b604051601f8201601f191681016001600160401b03811182821017156300003c9b576300003c9b6300003aba565b604052919050565b60005b838110156300003cc25781810151838201526020016300003ca6565b50506000910152565b600082601f8301126300003cde57600080fd5b81516001600160401b038111156300003cfd576300003cfd6300003aba565b6300003d14601f8201601f19166020016300003c6d565b8181528460208386010111156300003d2b57600080fd5b6300003d408260208301602087016300003ca3565b949350505050565b6000602082840312156300003d5c57600080fd5b81516001600160401b038111156300003d7457600080fd5b6300003d40848285016300003ccb565b600081516300003d9a8185602086016300003ca3565b9290920192915050565b6d0213637b1b590273ab6b132b91d160951b8152600085516300003dd181600e850160208a016300003ca3565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b601183015286516300003e0e81601c850160208b016300003ca3565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f83015285516300003e4381602a850160208a016300003ca3565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d8201526300003e76603e8201856300003d84565b600560f91b8152600101979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600081518084526300003ebd8160208601602086016300003ca3565b601f01601f19169290920160200192915050565b602081526000630000267260208301846300003ea1565b805180151581146300002ff057600080fd5b6000602082840312156300003f0e57600080fd5b6300002672826300003ee8565b600060208083850312156300003f3057600080fd5b82516001600160401b03808211156300003f4957600080fd5b818501915085601f8301126300003f5f57600080fd5b8151818111156300003f77576300003f776300003aba565b8060051b6300003f8a8582016300003c6d565b91825283810185019185810190898411156300003fa657600080fd5b86860192505b83831015630000409e578251858111156300003fc85760008081fd5b860160a0818c03601f19018113156300003fe25760008081fd5b6300003fee6300003c3f565b898301518881111563000040025760008081fd5b63000040148e8c838701016300003ccb565b82525060408084015189811115630000402d5760008081fd5b630000403f8f8d838801016300003ccb565b8c840152506060808501518a81168114630000405b5760008081fd5b8083850152506080915063000040748286016300003ee8565b9083015263000040878484016300003ee8565b908201528452505091860191908601906300003fac565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000825163000040d78184602087016300003ca3565b680bcb98da185a5b925960ba1b920191825250600901919050565b600060208284031215630000410657600080fd5b5051919050565b818103818111156300000e0857634e487b7160e01b600052601160045260246000fd5b604081526000630000414760408301846300003ea1565b828103602084015260088152672e6164647265737360c01b60208201526040810191505092915050565b600060208284031215630000418557600080fd5b81516001600160a01b0381168114630000267257600080fd5b6000825163000041b48184602087016300003ca3565b9190910192915050565b60408152600063000041d560408301856300003ea1565b828103602084015263000041eb81856300003ea1565b95945050505050565b600560fb1b81526000845163000042148160018501602089016300003ca3565b602960f81b600191840191820152845163000042398160028401602089016300003ca3565b605b60f81b600292909101918201528351630000425f8160038401602088016300003ca3565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b03831681526040602082018190526000906300003d40908301846300003ea1565b6000845163000042b88184602089016300003ca3565b84519083019063000042d08183602089016300003ca3565b845191019063000042e78183602088016300003ca3565b0195945050505050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b815260008251630000431f81600f8501602087016300003ca3565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a8152600060207f20436f6e74726163742054797065206e6f7420666f756e6420280000000000006020840152845163000043b781603a8601602089016300003ca3565b61148560f11b603a9185019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c8201528454604e9060009063000043f6816300003ad0565b60018281168015630000441457600181146300004431576300004467565b60ff198416604e880152604e831515840288010194506300004467565b8a600052602060002060005b84811015630000445c578154898201890152908301908901630000443d565b5050604e8388010194505b50929a9950505050505050505050565b604081526000630000448e60408301856300003ea1565b905060018060a01b03831660208301529392505050565b60408152600063000044bc60408301856300003ea1565b90508260208301529392505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a200000000000000000602082015260008251630000452d8160388501602087016300003ca3565b9190910160380192915050565b614ea180630000454b6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c634300081700334e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d68747470733a2f2f736169676f6e2d6170702e726f6e696e636861696e2e636f6d2f203e206d61696e636861696e4272696467654d616e61676572436f6e74726163744e6f206465706c6f796d656e747320666f6c6465722c20736b6970206c6f6164696e67c9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b20) + │ │ └─ ← () + │ ├─ [1432504330] GeneralConfig::fallback() + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString(0) [staticcall] + │ │ │ └─ ← "0" + │ │ ├─ [0] VM::toString(9223372036854775807 [9.223e18]) [staticcall] + │ │ │ └─ ← "9223372036854775807" + │ │ ├─ [0] console::log("\u{1b}[93mBlock Number: 1 | Timestamp: 1 | Gas Price: 0 | Block Gas Limit: 9223372036854775807\n\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::activeFork() [staticcall] + │ │ │ └─ ← no active fork + │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ProxyAdmin[0x505d91E8fd2091794b45b27f86C045529fa92CD7]: [0x505d91E8fd2091794b45b27f86C045529fa92CD7]) [staticcall] + │ │ │ └─ ← "0x505d91E8fd2091794b45b27f86C045529fa92CD7" + │ │ ├─ [0] VM::label((2021)ProxyAdmin[0x505d91E8fd2091794b45b27f86C045529fa92CD7]: [0x505d91E8fd2091794b45b27f86C045529fa92CD7], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProxyAdmin\u{1b}[0m[0x505d91E8fd2091794b45b27f86C045529fa92CD7]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)ProxyAdmin[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]: [0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]) [staticcall] + │ │ │ └─ ← "0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03" + │ │ ├─ [0] VM::label((2020)ProxyAdmin[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]: [0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProxyAdmin\u{1b}[0m[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11]) [staticcall] + │ │ │ └─ ← "0xcA11bde05977b3631167028862bE2a173976CA11" + │ │ ├─ [0] VM::label((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMulticall3\u{1b}[0m[0xcA11bde05977b3631167028862bE2a173976CA11]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11]) [staticcall] + │ │ │ └─ ← "0xcA11bde05977b3631167028862bE2a173976CA11" + │ │ ├─ [0] VM::label((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMulticall3\u{1b}[0m[0xcA11bde05977b3631167028862bE2a173976CA11]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 4) [staticcall] + │ │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] + │ │ │ └─ ← "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496" + │ │ ├─ [0] VM::label((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 5) [staticcall] + │ │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]) [staticcall] + │ │ │ └─ ← "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3" + │ │ ├─ [0] VM::label((31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 7) [staticcall] + │ │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4]) [staticcall] + │ │ │ └─ ← "0x50EEf481cae4250d252Ae577A09bF514f224C6C4" + │ │ ├─ [0] VM::label((31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 9) [staticcall] + │ │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]) [staticcall] + │ │ │ └─ ← "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809" + │ │ ├─ [0] VM::label((31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 11) [staticcall] + │ │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]) [staticcall] + │ │ │ └─ ← "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351" + │ │ ├─ [0] VM::label((31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 13) [staticcall] + │ │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]) [staticcall] + │ │ │ └─ ← "0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB" + │ │ ├─ [0] VM::label((31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 14) [staticcall] + │ │ │ └─ ← (31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]) [staticcall] + │ │ │ └─ ← "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1" + │ │ ├─ [0] VM::label((31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 15) [staticcall] + │ │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90]) [staticcall] + │ │ │ └─ ← "0x978e3286EB805934215a88694d80b09aDed68D90" + │ │ ├─ [0] VM::label((31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mWETH\u{1b}[0m[0x978e3286EB805934215a88694d80b09aDed68D90]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 16) [staticcall] + │ │ │ └─ ← (31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]) [staticcall] + │ │ │ └─ ← "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb" + │ │ ├─ [0] VM::label((31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mAXS\u{1b}[0m[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 17) [staticcall] + │ │ │ └─ ← (31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]) [staticcall] + │ │ │ └─ ← "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4" + │ │ ├─ [0] VM::label((31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mSLP\u{1b}[0m[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 18) [staticcall] + │ │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]) [staticcall] + │ │ │ └─ ← "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6" + │ │ ├─ [0] VM::label((31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mUSDC\u{1b}[0m[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]") + │ │ │ └─ ← () + │ │ ├─ [0] console::log("Deployer", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > roninGateway", (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > mainchainGateway", (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > bridgeTrackingContract", (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > bridgeSlashContract", (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > bridgeRewardContract", (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > roninBridgeManagerContract", (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > mainchainBridgeManagerContract", (31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > WETH", (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > AXS", (31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > SLP", (31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] console::log(" > USDC", (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]) [staticcall] + │ │ │ └─ ← () + │ │ ├─ [0] VM::exists("deployments/") + │ │ │ └─ ← true + │ │ ├─ [0] VM::readDir("deployments/") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet", 1, true, false)] + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("1") [staticcall] + │ │ │ └─ ← 1 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainBridgeManager.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]) [staticcall] + │ │ │ └─ ← "0xa71456fA88a5f6a4696D0446E690Db4a5913fab0" + │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayPauseEnforcer.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]) [staticcall] + │ │ │ └─ ← "0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4" + │ │ ├─ [0] VM::label((1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayPauseEnforcer\u{1b}[0m[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV2Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD]) [staticcall] + │ │ │ └─ ← "0xa67BA5315AF4961Eb937158032AF9300C657dAcD" + │ │ ├─ [0] VM::label((1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]) [staticcall] + │ │ │ └─ ← "0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403" + │ │ ├─ [0] VM::label((1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV3Logic\u{1b}[0m[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Proxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]) [staticcall] + │ │ │ └─ ← "0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08" + │ │ ├─ [0] VM::label((1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGovernanceAdmin.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930]) [staticcall] + │ │ │ └─ ← "0xB255D6A720BB7c39fee173cE22113397119cB930" + │ │ ├─ [0] VM::label((1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0xB255D6A720BB7c39fee173cE22113397119cB930]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainRoninTrustedOrganizationProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D]) [staticcall] + │ │ │ └─ ← "0x7D0556D55ca1a92708681e2e231733EBd922597D" + │ │ ├─ [0] VM::label((1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0x7D0556D55ca1a92708681e2e231733EBd922597D]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/RoninTrustedOrganizationLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794] + │ │ ├─ [0] VM::toString(1) [staticcall] + │ │ │ └─ ← "1" + │ │ ├─ [0] VM::toString((1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]) [staticcall] + │ │ │ └─ ← "0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794" + │ │ ├─ [0] VM::label((1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("5") [staticcall] + │ │ │ └─ ← 5 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainBridgeManager.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664]) [staticcall] + │ │ │ └─ ← "0x073de79499a1C7D474241755af8aa47e091f0664" + │ │ ├─ [0] VM::label((5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0x073de79499a1C7D474241755af8aa47e091f0664]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV2Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]) [staticcall] + │ │ │ └─ ← "0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64" + │ │ ├─ [0] VM::label((5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV3Proxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]) [staticcall] + │ │ │ └─ ← "0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D" + │ │ ├─ [0] VM::label((5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGovernanceAdmin.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798]) [staticcall] + │ │ │ └─ ← "0x4008b6362644C2ffB8A663d85395AAdF4056b798" + │ │ ├─ [0] VM::label((5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0x4008b6362644C2ffB8A663d85395AAdF4056b798]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainRoninTrustedOrganizationProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]) [staticcall] + │ │ │ └─ ← "0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E" + │ │ ├─ [0] VM::label((5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/RoninTrustedOrganizationLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]) [staticcall] + │ │ │ └─ ← "0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E" + │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("5") [staticcall] + │ │ │ └─ ← 5 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55]) [staticcall] + │ │ │ └─ ← "0xF54513B9C15857b4562893D3b2cBa5486ca67D55" + │ │ ├─ [0] VM::label((5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Proxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de]) [staticcall] + │ │ │ └─ ← "0x10bdC48820E0853472A9c6f96e2c0819486ec0de" + │ │ ├─ [0] VM::label((5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2\u{1b}[0m[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGovernanceAdmin.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]) [staticcall] + │ │ │ └─ ← "0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac" + │ │ ├─ [0] VM::label((5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainRoninTrustedOrganizationProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]) [staticcall] + │ │ │ └─ ← "0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49" + │ │ ├─ [0] VM::label((5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/RoninTrustedOrganizationLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0] + │ │ ├─ [0] VM::toString(5) [staticcall] + │ │ │ └─ ← "5" + │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]) [staticcall] + │ │ │ └─ ← "0xa71456fA88a5f6a4696D0446E690Db4a5913fab0" + │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/RoninGatewayV2Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("2022") [staticcall] + │ │ │ └─ ← 2022 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2] + │ │ ├─ [0] VM::toString(2022) [staticcall] + │ │ │ └─ ← "2022" + │ │ ├─ [0] VM::toString((2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2]) [staticcall] + │ │ │ └─ ← "0x64f4E02de01F967fFFB8B29b78fb3744584839C2" + │ │ ├─ [0] VM::label((2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062] + │ │ ├─ [0] VM::toString(2022) [staticcall] + │ │ │ └─ ← "2022" + │ │ ├─ [0] VM::toString((2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062]) [staticcall] + │ │ │ └─ ← "0x13C132D2C7db36E50cb39ff808731f580CAea062" + │ │ ├─ [0] VM::label((2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x13C132D2C7db36E50cb39ff808731f580CAea062]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/RoninGatewayV2Proxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba] + │ │ ├─ [0] VM::toString(2022) [staticcall] + │ │ │ └─ ← "2022" + │ │ ├─ [0] VM::toString((2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]) [staticcall] + │ │ │ └─ ← "0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba" + │ │ ├─ [0] VM::label((2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mRoninGatewayV2\u{1b}[0m[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("2020") [staticcall] + │ │ │ └─ ← 2020 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]) [staticcall] + │ │ │ └─ ← "0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38" + │ │ ├─ [0] VM::label((2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeRewardLogic\u{1b}[0m[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]) [staticcall] + │ │ │ └─ ← "0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1" + │ │ ├─ [0] VM::label((2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]) [staticcall] + │ │ │ └─ ← "0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4" + │ │ ├─ [0] VM::label((2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeSlashLogic\u{1b}[0m[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]) [staticcall] + │ │ │ └─ ← "0x273cdA3AFE17eB7BcB028b058382A9010ae82B24" + │ │ ├─ [0] VM::label((2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]) [staticcall] + │ │ │ └─ ← "0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32" + │ │ ├─ [0] VM::label((2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeTrackingLogic\u{1b}[0m[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]) [staticcall] + │ │ │ └─ ← "0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2" + │ │ ├─ [0] VM::label((2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c]) [staticcall] + │ │ │ └─ ← "0x241e507363d674c77a9930F31ea26BBc8857949c" + │ │ ├─ [0] VM::label((2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mFastFinalityTrackingLogic\u{1b}[0m[0x241e507363d674c77a9930F31ea26BBc8857949c]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]) [staticcall] + │ │ │ └─ ← "0xA30B2932CD8b8A89E34551Cdfa13810af38dA576" + │ │ ├─ [0] VM::label((2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mFastFinalityTracking\u{1b}[0m[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D]) [staticcall] + │ │ │ └─ ← "0xca9F10769292F26850333264d618c1B5E91f394D" + │ │ ├─ [0] VM::label((2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMaintenanceLogic\u{1b}[0m[0xca9F10769292F26850333264d618c1B5E91f394D]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]) [staticcall] + │ │ │ └─ ← "0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894" + │ │ ├─ [0] VM::label((2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMaintenance\u{1b}[0m[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]) [staticcall] + │ │ │ └─ ← "0x3EC92e7a835bb58832Df64E7f8206467e07d54a3" + │ │ ├─ [0] VM::label((2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035]) [staticcall] + │ │ │ └─ ← "0x840EBf1CA767CB690029E91856A357a43B85d035" + │ │ ├─ [0] VM::label((2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x840EBf1CA767CB690029E91856A357a43B85d035]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninBridgeManager.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]) [staticcall] + │ │ │ └─ ← "0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a" + │ │ ├─ [0] VM::label((2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayPauseEnforcer.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]) [staticcall] + │ │ │ └─ ← "0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837" + │ │ ├─ [0] VM::label((2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV2Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab]) [staticcall] + │ │ │ └─ ← "0x3036EB56e7e28851a56B87F037101aB3630933ab" + │ │ ├─ [0] VM::label((2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV2Logic\u{1b}[0m[0x3036EB56e7e28851a56B87F037101aB3630933ab]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]) [staticcall] + │ │ │ └─ ← "0x1477DB6bF449B0eb1191a1F4023867ddCEadc504" + │ │ ├─ [0] VM::label((2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV3Logic\u{1b}[0m[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Proxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]) [staticcall] + │ │ │ └─ ← "0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df" + │ │ ├─ [0] VM::label((2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGovernanceAdmin.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3]) [staticcall] + │ │ │ └─ ← "0x946397deDFd2f79b75a72B322944a21C3240c9c3" + │ │ ├─ [0] VM::label((2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGovernanceAdmin\u{1b}[0m[0x946397deDFd2f79b75a72B322944a21C3240c9c3]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]) [staticcall] + │ │ │ └─ ← "0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02" + │ │ ├─ [0] VM::label((2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090]) [staticcall] + │ │ │ └─ ← "0x98D0230884448B3E2f09a177433D60fb1E19C090" + │ │ ├─ [0] VM::label((2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninTrustedOrganization\u{1b}[0m[0x98D0230884448B3E2f09a177433D60fb1E19C090]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]) [staticcall] + │ │ │ └─ ← "0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d" + │ │ ├─ [0] VM::label((2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninValidatorSetLogic\u{1b}[0m[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]) [staticcall] + │ │ │ └─ ← "0x617c5d73662282EA7FfD231E020eCa6D2B0D552f" + │ │ ├─ [0] VM::label((2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninValidatorSet\u{1b}[0m[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]) [staticcall] + │ │ │ └─ ← "0x440BAF1c4B008EE4D617A83401f06AA80f5163E9" + │ │ ├─ [0] VM::label((2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mSlashIndicatorLogic\u{1b}[0m[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]) [staticcall] + │ │ │ └─ ← "0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3" + │ │ ├─ [0] VM::label((2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mSlashIndicator\u{1b}[0m[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a]) [staticcall] + │ │ │ └─ ← "0x8Ae952d538e9c25120e9c75FBA0718750f81313a" + │ │ ├─ [0] VM::label((2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingLogic\u{1b}[0m[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758]) [staticcall] + │ │ │ └─ ← "0x545edb750eB8769C868429BE9586F5857A768758" + │ │ ├─ [0] VM::label((2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStaking\u{1b}[0m[0x545edb750eB8769C868429BE9586F5857A768758]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]) [staticcall] + │ │ │ └─ ← "0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd" + │ │ ├─ [0] VM::label((2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingVestingLogic\u{1b}[0m[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816] + │ │ ├─ [0] VM::toString(2020) [staticcall] + │ │ │ └─ ← "2020" + │ │ ├─ [0] VM::toString((2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]) [staticcall] + │ │ │ └─ ← "0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816" + │ │ ├─ [0] VM::label((2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingVesting\u{1b}[0m[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet") [staticcall] + │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-0.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-1.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-2.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-3.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-4.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetTimedMigrator.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/VaultForwarder-qc-test.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/solcInputs", 1, true, false)] + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/.chainId") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseUint("2021") [staticcall] + │ │ │ └─ ← 2021 + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]) [staticcall] + │ │ │ └─ ← "0xa316e3dDa5B0DECC0c6528EDE4595831794c089A" + │ │ ├─ [0] VM::label((2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeRewardLogic\u{1b}[0m[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95]) [staticcall] + │ │ │ └─ ← "0x6E19cF519b7B83F7CE719B6d30232485d9609D95" + │ │ ├─ [0] VM::label((2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e]) [staticcall] + │ │ │ └─ ← "0x7CA05B9246CC6e3053D37219C87653041F72565e" + │ │ ├─ [0] VM::label((2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeSlashLogic\u{1b}[0m[0x7CA05B9246CC6e3053D37219C87653041F72565e]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]) [staticcall] + │ │ │ └─ ← "0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB" + │ │ ├─ [0] VM::label((2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]) [staticcall] + │ │ │ └─ ← "0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6" + │ │ ├─ [0] VM::label((2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeTrackingLogic\u{1b}[0m[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]) [staticcall] + │ │ │ └─ ← "0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA" + │ │ ├─ [0] VM::label((2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]) [staticcall] + │ │ │ └─ ← "0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B" + │ │ ├─ [0] VM::label((2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mFastFinalityTrackingLogic\u{1b}[0m[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a]) [staticcall] + │ │ │ └─ ← "0x41aCDFe786171824a037f2Cd6224c5916A58969a" + │ │ ├─ [0] VM::label((2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mFastFinalityTracking\u{1b}[0m[0x41aCDFe786171824a037f2Cd6224c5916A58969a]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-0.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]) [staticcall] + │ │ │ └─ ← "0x23Dffc4a93c374A91Fbc1c33075af012b68663F7" + │ │ ├─ [0] VM::label((2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-0\u{1b}[0m[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-1.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]) [staticcall] + │ │ │ └─ ← "0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016" + │ │ ├─ [0] VM::label((2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-1\u{1b}[0m[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-2.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]) [staticcall] + │ │ │ └─ ← "0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351" + │ │ ├─ [0] VM::label((2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-2\u{1b}[0m[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-3.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]) [staticcall] + │ │ │ └─ ← "0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649" + │ │ ├─ [0] VM::label((2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-3\u{1b}[0m[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-4.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]) [staticcall] + │ │ │ └─ ← "0xc077617A8384FEC2f11A3B3B01Ca353ECB345181" + │ │ ├─ [0] VM::label((2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-4\u{1b}[0m[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]) [staticcall] + │ │ │ └─ ← "0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab" + │ │ ├─ [0] VM::label((2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMaintenanceLogic\u{1b}[0m[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584]) [staticcall] + │ │ │ └─ ← "0x4016C80D97DDCbe4286140446759a3f0c1d20584" + │ │ ├─ [0] VM::label((2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMaintenance\u{1b}[0m[0x4016C80D97DDCbe4286140446759a3f0c1d20584]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]) [staticcall] + │ │ │ └─ ← "0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43" + │ │ ├─ [0] VM::label((2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]) [staticcall] + │ │ │ └─ ← "0x3b67c8D22a91572a6AB18acC9F70787Af04A4043" + │ │ ├─ [0] VM::label((2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninBridgeManager.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753]) [staticcall] + │ │ │ └─ ← "0xb0507f2f22697022eCb25963a00D3D076dAc5753" + │ │ ├─ [0] VM::label((2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0xb0507f2f22697022eCb25963a00D3D076dAc5753]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcer.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950]) [staticcall] + │ │ │ └─ ← "0x51F44b52856d8E83692FCE53795eb848f410B950" + │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x51F44b52856d8E83692FCE53795eb848f410B950]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]) [staticcall] + │ │ │ └─ ← "0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF" + │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcerLogic\u{1b}[0m[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]) [staticcall] + │ │ │ └─ ← "0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95" + │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayV2Logic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]) [staticcall] + │ │ │ └─ ← "0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11" + │ │ ├─ [0] VM::label((2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayV2Logic\u{1b}[0m[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGovernanceAdmin.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896]) [staticcall] + │ │ │ └─ ← "0x53Ea388CB72081A3a397114a43741e7987815896" + │ │ ├─ [0] VM::label((2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGovernanceAdmin\u{1b}[0m[0x53Ea388CB72081A3a397114a43741e7987815896]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]) [staticcall] + │ │ │ └─ ← "0xa7E978bD77b1B64D100eC0a62898395cb4B47a56" + │ │ ├─ [0] VM::label((2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]) [staticcall] + │ │ │ └─ ← "0x7507dc433a98E1fE105d69f19f3B40E4315A4F32" + │ │ ├─ [0] VM::label((2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninTrustedOrganization\u{1b}[0m[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]) [staticcall] + │ │ │ └─ ← "0x6FE9CF3C8f1de99b1E368e941104d51561dF145d" + │ │ ├─ [0] VM::label((2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSetLogic\u{1b}[0m[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]) [staticcall] + │ │ │ └─ ← "0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d" + │ │ ├─ [0] VM::label((2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSet\u{1b}[0m[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetTimedMigrator.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E]) [staticcall] + │ │ │ └─ ← "0xc998920E55f68f631fc4fb1e0dA11A16c637044E" + │ │ ├─ [0] VM::label((2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSetTimedMigrator\u{1b}[0m[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324]) [staticcall] + │ │ │ └─ ← "0x83C5bdBce6d60038468a643c817CaDC6d1e12324" + │ │ ├─ [0] VM::label((2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mSlashIndicatorLogic\u{1b}[0m[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752]) [staticcall] + │ │ │ └─ ← "0xF7837778b6E180Df6696C8Fa986d62f8b6186752" + │ │ ├─ [0] VM::label((2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mSlashIndicator\u{1b}[0m[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]) [staticcall] + │ │ │ └─ ← "0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB" + │ │ ├─ [0] VM::label((2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingLogic\u{1b}[0m[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28]) [staticcall] + │ │ │ └─ ← "0x9C245671791834daf3885533D24dce516B763B28" + │ │ ├─ [0] VM::label((2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStaking\u{1b}[0m[0x9C245671791834daf3885533D24dce516B763B28]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingLogic.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56]) [staticcall] + │ │ │ └─ ← "0x85b8BFd0b4616360f75d12F591538c6350fa4F56" + │ │ ├─ [0] VM::label((2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingVestingLogic\u{1b}[0m[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingProxy.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]) [staticcall] + │ │ │ └─ ← "0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441" + │ │ ├─ [0] VM::label((2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingVesting\u{1b}[0m[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]") + │ │ │ └─ ← () + │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/VaultForwarder-qc-test.json") [staticcall] + │ │ │ └─ ←  + │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] + │ │ │ └─ ← (2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA] + │ │ ├─ [0] VM::toString(2021) [staticcall] + │ │ │ └─ ← "2021" + │ │ ├─ [0] VM::toString((2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]) [staticcall] + │ │ │ └─ ← "0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA" + │ │ ├─ [0] VM::label((2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mVaultForwarder-qc-test\u{1b}[0m[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]") + │ │ │ └─ ← () + │ │ └─ ← 0x608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c63430008170033 + │ ├─ [0] VM::etch(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], 0x608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c63430008170033) + │ │ └─ ← () + │ ├─ [0] VM::label(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], "GeneralConfig") + │ │ └─ ← () + │ ├─ [0] VM::makePersistent(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16]) + │ │ └─ ← () + │ ├─ [0] VM::allowCheatcodes(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16]) + │ │ └─ ← () + │ ├─ [0] VM::etch(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], 0x608060405234801561001057600080fd5b506123c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033) + │ │ └─ ← () + │ ├─ [1933] ArtifactFactory::fallback() + │ │ └─ ← 0x608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033 + │ ├─ [0] VM::etch(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], 0x608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033) + │ │ └─ ← () + │ ├─ [0] VM::label(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], "ArtifactFactory") + │ │ └─ ← () + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [0] VM::toString(1) [staticcall] + │ │ └─ ← "1" + │ ├─ [0] VM::addr(89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76]) [staticcall] + │ │ └─ ← operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95] + │ ├─ [0] VM::label(operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95], "operator-1") + │ │ └─ ← () + │ ├─ [0] VM::toString(1) [staticcall] + │ │ └─ ← "1" + │ ├─ [0] VM::addr(42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76]) [staticcall] + │ │ └─ ← governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430] + │ ├─ [0] VM::label(governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430], "governor-1") + │ │ └─ ← () + │ ├─ [0] VM::toString(2) [staticcall] + │ │ └─ ← "2" + │ ├─ [0] VM::addr(94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76]) [staticcall] + │ │ └─ ← operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D] + │ ├─ [0] VM::label(operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D], "operator-2") + │ │ └─ ← () + │ ├─ [0] VM::toString(2) [staticcall] + │ │ └─ ← "2" + │ ├─ [0] VM::addr(403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74]) [staticcall] + │ │ └─ ← governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E] + │ ├─ [0] VM::label(governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E], "governor-2") + │ │ └─ ← () + │ ├─ [0] VM::toString(3) [staticcall] + │ │ └─ ← "3" + │ ├─ [0] VM::addr(66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76]) [staticcall] + │ │ └─ ← operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D] + │ ├─ [0] VM::label(operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D], "operator-3") + │ │ └─ ← () + │ ├─ [0] VM::toString(3) [staticcall] + │ │ └─ ← "3" + │ ├─ [0] VM::addr(56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76]) [staticcall] + │ │ └─ ← governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454] + │ ├─ [0] VM::label(governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454], "governor-3") + │ │ └─ ← () + │ ├─ [0] VM::toString(4) [staticcall] + │ │ └─ ← "4" + │ ├─ [0] VM::addr(62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76]) [staticcall] + │ │ └─ ← operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D] + │ ├─ [0] VM::label(operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D], "operator-4") + │ │ └─ ← () + │ ├─ [0] VM::toString(4) [staticcall] + │ │ └─ ← "4" + │ ├─ [0] VM::addr(27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76]) [staticcall] + │ │ └─ ← governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4] + │ ├─ [0] VM::label(governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4], "governor-4") + │ │ └─ ← () + │ ├─ [0] VM::toString(5) [staticcall] + │ │ └─ ← "5" + │ ├─ [0] VM::addr(26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76]) [staticcall] + │ │ └─ ← operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41] + │ ├─ [0] VM::label(operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41], "operator-5") + │ │ └─ ← () + │ ├─ [0] VM::toString(5) [staticcall] + │ │ └─ ← "5" + │ ├─ [0] VM::addr(104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77]) [staticcall] + │ │ └─ ← governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11] + │ ├─ [0] VM::label(governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11], "governor-5") + │ │ └─ ← () + │ ├─ [0] VM::toString(6) [staticcall] + │ │ └─ ← "6" + │ ├─ [0] VM::addr(113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]) [staticcall] + │ │ └─ ← operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8] + │ ├─ [0] VM::label(operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], "operator-6") + │ │ └─ ← () + │ ├─ [0] VM::toString(6) [staticcall] + │ │ └─ ← "6" + │ ├─ [0] VM::addr(6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]) [staticcall] + │ │ └─ ← governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8] + │ ├─ [0] VM::label(governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], "governor-6") + │ │ └─ ← () + │ ├─ [0] VM::addr(91510552187238886959033578665964256892121014792639911859038233360780899104770 [9.151e76]) [staticcall] + │ │ └─ ← governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e] + │ ├─ [0] VM::label(governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e], "governance-admin") + │ │ └─ ← () + │ ├─ [0] VM::addr(32023155812407028061452097301509641536118192107878305823158825758004472210926 [3.202e76]) [staticcall] + │ │ └─ ← validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40] + │ ├─ [0] VM::label(validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40], "validator-set-contract") + │ │ └─ ← () + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0c42726964676552657761726400000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [0] VM::addr(67501766086945423188359301496192992873575530264346267663568933074015626216763 [6.75e76]) [staticcall] + │ │ └─ ← proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90] + │ ├─ [0] VM::label(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90], "proxy-admin") + │ │ └─ ← () + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] + │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] + │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] + │ ├─ [3519290] GeneralConfig::setRawSharedArguments(0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000013492c1caa270f0a24342015a049518cf093dd40000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c400000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c0049600000000000000000000000013492c1caa270f0a24342015a049518cf093dd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000013492c1caa270f0a24342015a049518cf093dd4000000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000012800000000000000000000000000000000000000000000000000000000000001340000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000001640000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c00496000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000000000060000000000000000000000007083c6a0f61b3fdc6a8f4bb573f5097b485cbb9500000000000000000000000010e09aacfb9408a6da536d258d3d64718ab56e4d000000000000000000000000698bec9a526055cd092e9e15acccfc542b63f92d0000000000000000000000000d8274a6b3cddb84e8fd4f8c93b4cfa26dbcb45d000000000000000000000000af627c77b0b0ed13882b0ff7b10af7a610035a41000000000000000000000000ccfca9c1c0b543d21dc71c43dce7b174a7015fb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000bf91bfd887138c482101bff998f4a96d41c5c4300000000000000000000000008856475dd525166b6654edd18e0011e592459a8e000000000000000000000000c966b8836e01db8f720f0a169da0252767b87454000000000000000000000000713886700f9f4b7df033bd1615177684cedceee4000000000000000000000000a131e33ef51a90640f54291645bdcee9de3d1c1100000000000000000000000030949311d69fa2eae2b805a9905eb6d72a5b38a80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c004960000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c57726170706564205745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5772617070656420524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134178696520496e66696e6974792053686172640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034158530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012536d6f6f7468204c6f766520506f74696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000006c584057a233113f3d6bbb9fa535457f882e4a1651e9872443fbbc09c98cab8b5d0775821d287000a7bcdf57179f0756bcea1e44933bc9b95e7437a24f89565ec922694c2a69e2569e7c38daf93226a6654bf3ab7f08a5bae2f0f3ba29b7c335c8961c3586584723ed2cf8ed4692507f7ccfa033d901aa56911770fa9ab4bb3e03b1918b42fc7ffb813c3827ed00534d936c7930115f3d65fab756c2e15b0e3bdfa57e1de87203668f02b950f40e1246963fa77677df934e74c97577520c1513700000000000000000000000000000000000000000000000000000000000000065d2503fc5f74f349f61fd45c72868b37a10b28a35052be8e3f15eb5d1f65796c00e49bee553750db35dc75dd0f611fc9ca1a950367e3c78244d9fbf66e643c7c7c8efe0b120312d5f846e2e27820676655285e2808b5e4e93580b1d5b5129b0c3d07b40a68891e1ce2246c87932f18ffd4c01876519808e339af84d9d65aab7fe7bedbcabd91f0b98becc732538ae35a6d72e3efc234a10b4383ae967d1af9590e91dc744fe301c24bac6970238cabaca15627df2414bf146a664dd0792399b3) + │ │ └─ ← () + │ └─ ← 72975 bytes of code + ├─ [5408475] 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f::run() + │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] + │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) + │ ├─ [0] console::log("> ", "\u{1b}[94m_deployProxy RoninGatewayV3\u{1b}[0m", "...") [staticcall] + │ │ └─ ← () + │ ├─ [5406] GeneralConfig::getContractName(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← "RoninGatewayV3" + │ ├─ [0] console::log("> ", "\u{1b}[94m_deployLogic RoninGatewayV3\u{1b}[0m", "...") [staticcall] + │ │ └─ ← () + │ ├─ [5406] GeneralConfig::getContractName(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← "RoninGatewayV3" + │ ├─ [3855] GeneralConfig::getContractAbsolutePath(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← "RoninGatewayV3.sol" + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] + │ │ └─ ← 3 + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::broadcast() + │ │ └─ ← () + │ ├─ [0] VM::getCode("RoninGatewayV3.sol") [staticcall] + │ │ └─ ← 0x608060405234801561001057600080fd5b506000805460ff19169055614d358061002a6000396000f3fe6080604052600436106102815760003560e01c8063835fc6ca1161014f578063c28f7894116100c1578063e75235b81161007a578063e75235b814610838578063ecc8364914610850578063f0ce418e1461087d578063f668214a146108c3578063fa389659146108e3578063fc6574bc1461090357610290565b8063c28f789414610752578063ca15c87314610798578063d547741f146107b8578063dafae408146107d8578063dbd2ef6c146107f8578063de981f1b1461081857610290565b80639584a592116101135780639584a5921461069a578063a217fddf146106ba578063affed0e0146106cf578063b9afa177146106e5578063b9c3620914610705578063bc7f03861461072557610290565b8063835fc6ca146105f45780638456cb5914610625578063865e6fd31461063a5780639010d07c1461065a57806391d148541461067a57610290565b80633e70838b116101f35780635cd8a76b116101ac5780635cd8a76b146105475780635d6a9a901461055c57806364363f781461058957806371706cbe146105a957806375535f86146105bf5780637de5dedd146105df57610290565b80633e70838b146104595780633f4ba83a1461047957806347b56b2c1461048e5780634d92c4f0146104ae5780635a7dd06a1461050f5780635c975abb1461052f57610290565b806317fa2ea11161024557806317fa2ea11461036e578063248a9ca31461039b5780632f2ff15d146103d95780633101cfcb146103f957806336568abe146104195780633e4574ec1461043957610290565b806301ffc9a714610298578063065b3adf146102cd5780630b1ff17f14610305578063109679ef1461032557806317892f961461034557610290565b366102905761028e610955565b005b61028e610955565b3480156102a457600080fd5b506102b86102b3366004613afa565b61096e565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506005546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b34801561031157600080fd5b5061028e610320366004613b24565b610999565b34801561033157600080fd5b5061028e610340366004613b55565b6109b0565b34801561035157600080fd5b506078546079545b604080519283526020830191909152016102c4565b34801561037a57600080fd5b5061038e610389366004613bb2565b610a55565b6040516102c49190613bf3565b3480156103a757600080fd5b506103cb6103b6366004613c39565b6000908152606b602052604090206001015490565b6040519081526020016102c4565b3480156103e557600080fd5b5061028e6103f4366004613c72565b610d92565b34801561040557600080fd5b5061028e610414366004613ca2565b610dbc565b34801561042557600080fd5b5061028e610434366004613c72565b610e68565b34801561044557600080fd5b506102b8610454366004613c72565b610ee2565b34801561046557600080fd5b5061028e610474366004613ca2565b610f12565b34801561048557600080fd5b5061028e610f3c565b34801561049a57600080fd5b5061028e6104a9366004613c39565b610f4e565b3480156104ba57600080fd5b506104ff6104c9366004613cbf565b606f602090815260009283526040808420909152908252902080546001820154600383015460049093015460ff90921692909184565b6040516102c49493929190613cf7565b34801561051b57600080fd5b5061028e61052a366004613d27565b611119565b34801561053b57600080fd5b5060005460ff166102b8565b34801561055357600080fd5b5061028e61117e565b34801561056857600080fd5b5061057c610577366004613da1565b611280565b6040516102c49190613ddd565b34801561059557600080fd5b5061028e6105a4366004613e09565b611324565b3480156105b557600080fd5b506103cb606e5481565b3480156105cb57600080fd5b506103596105da366004613cbf565b61135a565b3480156105eb57600080fd5b506103cb61137b565b34801561060057600080fd5b5061061461060f366004613c39565b611392565b6040516102c4959493929190613ebd565b34801561063157600080fd5b5061028e611464565b34801561064657600080fd5b5061028e610655366004613f0b565b611474565b34801561066657600080fd5b506102ed610675366004613cbf565b61148f565b34801561068657600080fd5b506102b8610695366004613c72565b6114a7565b3480156106a657600080fd5b5061028e6106b5366004613f48565b6114d2565b3480156106c657600080fd5b506103cb600081565b3480156106db57600080fd5b506103cb60045481565b3480156106f157600080fd5b5061038e610700366004614041565b611621565b34801561071157600080fd5b50610359610720366004613cbf565b6117b3565b34801561073157600080fd5b506103cb610740366004613ca2565b60386020526000908152604090205481565b34801561075e57600080fd5b506104ff61076d366004613c39565b607660205260009081526040902080546001820154600383015460049093015460ff90921692909184565b3480156107a457600080fd5b506103cb6107b3366004613c39565b6117c8565b3480156107c457600080fd5b5061028e6107d3366004613c72565b6117df565b3480156107e457600080fd5b506102b86107f3366004613c39565b611804565b34801561080457600080fd5b5061028e6108133660046140b6565b611830565b34801561082457600080fd5b506102ed610833366004614179565b611882565b34801561084457600080fd5b50600154600254610359565b34801561085c57600080fd5b5061087061086b366004614194565b6118fd565b6040516102c4919061422f565b34801561088957600080fd5b506104ff610898366004613c39565b607060205260009081526040902080546001820154600383015460049093015460ff90921692909184565b3480156108cf57600080fd5b506102b86108de366004613c39565b611a64565b3480156108ef57600080fd5b5061028e6108fe366004613e09565b611a92565b34801561090f57600080fd5b506102b861091e366004614293565b6000928352606f602090815260408085209385529281528284206001600160a01b0392909216845260029091019052902054151590565b60405163129c2ce160e31b815260040160405180910390fd5b60006001600160e01b03198216635a05180f60e01b1480610993575061099382611c8b565b92915050565b6109a1611cc0565b6109ac823383611d06565b5050565b6109b8611cc0565b6109c0611dde565b336109e16109d3368490038401846143da565b826109dc61137b565b611e7f565b6109eb6003611882565b60405163c7c4fea960e01b81526001600160a01b03919091169063c7c4fea990610a1f90600090863590869060040161447b565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050505050565b6060610a5f611dde565b336000610a6a61137b565b90506000846001600160401b03811115610a8657610a866142cc565b604051908082528060200260200182016040528015610aaf578160200160208202803683370190505b5093506000610abe6003611882565b905060005b86811015610d8757878782818110610add57610add6144a8565b905060200201359250816001600160a01b031663c7c4fea9600285886040518463ffffffff1660e01b8152600401610b179392919061447b565b600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b50505050610b5283611a64565b15610b80576001868281518110610b6b57610b6b6144a8565b91151560209283029190910190910152610d7f565b600083815260706020908152604080832060718352818420825160a081019093528054835260018082015492959491929184019160ff1690811115610bc757610bc7613ce1565b6001811115610bd857610bd8613ce1565b8152604080516060808201835260028501546001600160a01b039081168352600386015481166020848101919091526004870154848601528086019390935283518083018552600587015482168152600687015490911692810192909252600785015482840152828401919091528151808201909252600884018054919093019290829060ff166001811115610c7057610c70613ce1565b6001811115610c8157610c81613ce1565b81526001820154602082015260029091015460409091015290525090506000610ca982612120565b90506000610cb9848a8a856121ea565b90506001816004811115610ccf57610ccf613ce1565b03610d7a57835460ff19166002908117855560405163114fc47560e11b81526001600160a01b0388169163229f88ea91610d0e91908b906004016144be565b600060405180830381600087803b158015610d2857600080fd5b505af1158015610d3c573d6000803e3d6000fd5b505050507f62520d049932cdee872e9b3c59c0f6073637147e5e9bc8b050b062430eaf5c9f8284604051610d719291906144d9565b60405180910390a15b505050505b600101610ac3565b505050505092915050565b6000828152606b6020526040902060010154610dad8161221b565b610db78383612228565b505050565b603754600390610100900460ff16158015610dde575060375460ff8083169116105b610e035760405162461bcd60e51b8152600401610dfa9061453a565b60405180910390fd5b6037805461ffff191660ff831617610100179055610e22600b8361224a565b6037805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6001600160a01b0381163314610ed85760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610dfa565b6109ac82826122ee565b60008281526070602090815260408083206001600160a01b038516845260020190915281205415155b9392505050565b610f1a612310565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610f4461236a565b610f4c6123d9565b565b610f56611cc0565b610f5f81611a64565b15610f7d576040516327ddf84960e11b815260040160405180910390fd5b6000818152607160209081526040808320815160a0810190925280548252600180820154929391929184019160ff1690811115610fbc57610fbc613ce1565b6001811115610fcd57610fcd613ce1565b8152604080516060808201835260028501546001600160a01b039081168352600386015481166020848101919091526004870154848601528086019390935283518083018552600587015482168152600687015490911692810192909252600785015482840152828401919091528151808201909252600884018054919093019290829060ff16600181111561106557611065613ce1565b600181111561107657611076613ce1565b8152600182015460208201526002909101546040918201529152606083015101519192505046146110e0576060810151604090810151905163092048d160e11b81526001600160e01b03196000351660048201526024810191909152466044820152606401610dfa565b7f04e8cbd836dea43a2dc7eb19de345cca3a8e6978a2ef5225d924775500f67c7c61110a82612120565b82604051610e5c9291906144d9565b611121611cc0565b6000829003611143576040516316ee9d3b60e11b815260040160405180910390fd5b60005b8281101561117857611170848483818110611163576111636144a8565b905060a002013384611d06565b600101611146565b50505050565b603754600290610100900460ff161580156111a0575060375460ff8083169116105b6111bc5760405162461bcd60e51b8152600401610dfa9061453a565b6037805461ffff191660ff8316176101001790556074546111e8906008906001600160a01b031661224a565b607554611200906003906001600160a01b031661224a565b60775461121890600a906001600160a01b031661224a565b607480546001600160a01b031990811690915560758054821690556077805490911690556037805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b604080518082018252600080825260208083018290526001600160a01b038616825260738152838220858352905282902082518084019093528054919291829060ff1660018111156112d4576112d4613ce1565b60018111156112e5576112e5613ce1565b815290546001600160a01b036101009091048116602092830152908201519192501661099357604051631b79f53b60e21b815260040160405180910390fd5b61132c612310565b600083900361134e576040516316ee9d3b60e11b815260040160405180910390fd5b6111788484848461242b565b600080611365612310565b61136f848461250e565b915091505b9250929050565b600061138d611388612599565b612606565b905090565b607160209081526000918252604091829020805460018083015485516060808201885260028601546001600160a01b03908116835260038701548116838901526004870154838a015288518083018a526005880154821681526006880154909116978101979097526007860154878901528751908101909752600885018054949760ff93841697929692959294909391928492169081111561143657611436613ce1565b600181111561144757611447613ce1565b815260200160018201548152602001600282015481525050905085565b61146c61236a565b610f4c61263c565b61147c612310565b61148581612679565b6109ac828261224a565b6000828152606c60205260408120610f0b90836126af565b6000918252606b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b603754610100900460ff16158080156114f25750603754600160ff909116105b8061150c5750303b15801561150c575060375460ff166001145b6115285760405162461bcd60e51b8152600401610dfa9061453a565b6037805460ff19166001179055801561154b576037805461ff0019166101001790555b61155660008d6126bb565b6115608b8b6126c5565b505061156c898961250e565b506000905061157b8680614588565b905011156115cd576115ae6115908680614588565b61159d6020890189614588565b6115a78980614588565b8989612751565b6115cd6115bb8680614588565b6115c86020880188614588565b61242b565b8015611613576037805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b606061162b611cc0565b611633611dde565b3361163c613a8d565b836001600160401b03811115611654576116546142cc565b60405190808252806020026020018201604052801561167d578160200160208202803683370190505b509250600061168a61137b565b905060006116986003611882565b905060005b86811015610d87578787828181106116b7576116b76144a8565b905061016002018036038101906116ce91906143da565b805160405163c7c4fea960e01b81529195506001600160a01b0384169163c7c4fea99161170391600091908a9060040161447b565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b506002925061173e915050565b6040808601518101516000908152606f6020908152828220885183529052205460ff16600481111561177257611772613ce1565b036117a057600186828151811061178b5761178b6144a8565b911515602092830291909101909101526117ab565b6117ab848685611e7f565b60010161169d565b6000806117be612310565b61136f84846126c5565b6000818152606c602052604081206109939061295a565b6000828152606b60205260409020600101546117fa8161221b565b610db783836122ee565b600061180e612599565b60015461181b91906145e7565b60025461182890846145e7565b101592915050565b611838612310565b6000879003611868576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b6118788888888888888888612751565b5050505050505050565b60007fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600083600f8111156118b9576118b9613ce1565b60ff1681526020810191909152604001600020546001600160a01b03169050806118f8578160405163409140df60e11b8152600401610dfa9190614613565b919050565b6060816001600160401b03811115611917576119176142cc565b60405190808252806020026020018201604052801561194a57816020015b60608152602001906001900390816119355790505b50905060005b82811015611a5c57600085815260726020526040812090858584818110611979576119796144a8565b905060200201602081019061198e9190613ca2565b6001600160a01b03166001600160a01b0316815260200190815260200160002080546119b99061462d565b80601f01602080910402602001604051908101604052809291908181526020018280546119e59061462d565b8015611a325780601f10611a0757610100808354040283529160200191611a32565b820191906000526020600020905b815481529060010190602001808311611a1557829003601f168201915b5050505050828281518110611a4957611a496144a8565b6020908102919091010152600101611950565b509392505050565b6000600260008381526070602052604090205460ff166004811115611a8b57611a8b613ce1565b1492915050565b611a9a611cc0565b611aa2611dde565b338315801590611ab157508382145b611adc576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b6000611ae661137b565b9050600080611af56003611882565b905060005b87811015611c8057888882818110611b1457611b146144a8565b905060200201359250868682818110611b2f57611b2f6144a8565b9050602002810190611b419190614661565b60008581526072602090815260408083206001600160a01b038b168452909152902091611b6f9190836146ef565b5060405163c7c4fea960e01b81526001600160a01b0383169063c7c4fea990611ba19060019087908a9060040161447b565b600060405180830381600087803b158015611bbb57600080fd5b505af1158015611bcf573d6000803e3d6000fd5b50505060008481526076602052604081209150611bee828888886121ea565b90506001816004811115611c0457611c04613ce1565b03611c7657815460ff1916600217825560405163114fc47560e11b81526001600160a01b0385169063229f88ea90611c439060019089906004016144be565b600060405180830381600087803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b505050505b5050600101611afa565b505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061099357506301ffc9a760e01b6001600160e01b0319831614610993565b60005460ff1615610f4c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dfa565b611d20611d1b368590038501604086016147ae565b612964565b611d29836129df565b6000611d44611d3e6040860160208701613ca2565b83611280565b80519091506001811115611d5a57611d5a613ce1565b611d6a60608601604087016147ca565b6001811115611d7b57611d7b613ce1565b14611d985760405162035e2b60ea1b815260040160405180910390fd5b611dc78330611dad6040880160208901613ca2565b611dbf36899003890160408a016147ae565b929190612a5d565b611dd78483858460200151612c5c565b5050505050565b611de8600b611882565b604051635a02d57960e11b81523360048201526001600160a01b03919091169063b405aaf290602401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5291906147e7565b610f4c576000356001600160e01b0319166006604051620f948f60ea1b8152600401610dfa929190614809565b82516080840151611e8f90612964565b600084602001516001811115611ea757611ea7613ce1565b14611ec55760405163182f3d8760e11b815260040160405180910390fd5b4684606001516040015114611f13576060840151604090810151905163092048d160e11b81526001600160e01b03196000351660048201526024810191909152466044820152606401610dfa565b6000611f2f856060015160200151866040015160400151611280565b6080860151519091506001811115611f4957611f49613ce1565b81516001811115611f5c57611f5c613ce1565b148015611f8657508460400151602001516001600160a01b031681602001516001600160a01b0316145b611fa35760405163f4b8742f60e01b815260040160405180910390fd5b6040808601518101516000908152606f6020908152828220858352905290812090611fcd87612120565b90506000611fdd838888856121ea565b905087604001516040015185886001600160a01b03167f48c4262ed68beb92fe5d7d48d70772e49cd50c317937dea60a99f15f794b64598560405161202491815260200190565b60405180910390a4600181600481111561204057612040613ce1565b0361187857825460ff191660021783556060880151805160209091015160808a015161206f9290916000612de6565b6120796003611882565b885160405163114fc47560e11b81526001600160a01b03929092169163229f88ea916120ab91600091906004016144be565b600060405180830381600087803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505050507f8d20d8121a34dded9035ff5b43e901c142824f7a22126392992c353c37890524828960405161210e9291906144d9565b60405180910390a15050505050505050565b6000806121308360400151613102565b905060006121418460600151613102565b905060006121958560800151604080517f1e2b74b2a792d5c0f0b6e59b037fa9d43d84fbb759337f0112fcc15ca414fc8d815282516020808301919091528301518183015291015160608201526080902090565b604080517fb9d1fe7c9deeec5dc90a2f47ff1684239519f2545b2228d3d91fb27df3189eea815287516020808301919091529097015190870152606086019390935250608084015260a08301525060c0902090565b60006121f785858461314a565b60006122038684613200565b90506122118685838661330e565b9695505050505050565b612225813361335a565b50565b61223282826133be565b6000828152606c60205260409020610db79082613444565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f81111561228057612280613ce1565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f8111156122c1576122c1613ce1565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b6122f88282613459565b6000828152606c60205260409020610db790826134c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03163314610f4c576000356001600160e01b0319166001604051620f948f60ea1b8152600401610dfa929190614809565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03163314806123ac57506005546001600160a01b031633145b610f4c576000356001600160e01b0319166001604051620f948f60ea1b8152600401610dfa929190614809565b6123e16134d5565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b828114612459576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b60005b838110156124ca57828282818110612476576124766144a8565b9050602002013560386000878785818110612493576124936144a8565b90506020020160208101906124a89190613ca2565b6001600160a01b0316815260208101919091526040016000205560010161245c565b507f6f52f53a938df83439fa4c6055c7df0a6906d621aa6dfa4708187037fdfc41da8484848460405161250094939291906148a5565b60405180910390a150505050565b600080828411156125325760405163964a4d2760e01b815260040160405180910390fd5b505060018054600254607885905560798490556004805493840190556040805183815260208101839052929391928592879290917feac82d4d949d2d4f77f96aa68ab6b1bb750da73f14e55d41a1b93f387471ecba91015b60405180910390a49250929050565b60006125a5600b611882565b6001600160a01b03166306aba0e16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d91906148d7565b600060025460016002548460015461261e91906145e7565b61262891906148f0565b6126329190614903565b6109939190614916565b612644611cc0565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861240e3390565b806001600160a01b03163b60000361222557604051630bfc64a360e21b81526001600160a01b0382166004820152602401610dfa565b6000610f0b838361351e565b6109ac8282612228565b600080828411156126f7576000356001600160e01b0319166040516387f6f09560e01b8152600401610dfa91906145fe565b50506001805460028054858455908490556004805493840190556040805183815260208101839052929391928592879290917f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910161258a565b868514801561275f57508683145b61278a576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b60005b8781101561291c578686828181106127a7576127a76144a8565b90506020020160208101906127bc9190613ca2565b607360008b8b858181106127d2576127d26144a8565b90506020020160208101906127e79190613ca2565b6001600160a01b03166001600160a01b03168152602001908152602001600020600087878581811061281b5761281b6144a8565b90506020020135815260200190815260200160002060000160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550828282818110612869576128696144a8565b905060200201602081019061287e91906147ca565b607360008b8b85818110612894576128946144a8565b90506020020160208101906128a99190613ca2565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008787858181106128dd576128dd6144a8565b60209081029290920135835250810191909152604001600020805460ff19166001838181111561290f5761290f613ce1565b021790555060010161278d565b507f2544bff60c6d5b84946e06804af9f84e150bbee85238dbdee79efca4e0adf401888888888888888860405161210e989796959493929190614938565b6000610993825490565b60008151600181111561297957612979613ce1565b14801561298a575060008160400151115b801561299857506020810151155b806129c257506001815160018111156129b3576129b3613ce1565b1480156129c257506040810151155b6122255760405163034992a760e51b815260040160405180910390fd5b60006129f160608301604084016147ca565b6001811115612a0257612a02613ce1565b148015612a3f575060386000612a1e6040840160208501613ca2565b6001600160a01b031681526020810191909152604001600020546080820135105b1561222557604051636eff4a8560e11b815260040160405180910390fd5b600060608186516001811115612a7557612a75613ce1565b03612b525760408681015181516001600160a01b038881166024830152878116604483015260648083019390935283518083039093018352608490910183526020820180516001600160e01b03166323b872dd60e01b179052915191851691612ade91906149c9565b6000604051808303816000865af19150503d8060008114612b1b576040519150601f19603f3d011682016040523d82523d6000602084013e612b20565b606091505b509092509050818015612b4b575080511580612b4b575080806020019051810190612b4b91906147e7565b9150612c36565b600186516001811115612b6757612b67613ce1565b03612c1d57602086810151604080516001600160a01b0389811660248301528881166044830152606480830194909452825180830390940184526084909101825292820180516001600160e01b03166323b872dd60e01b1790525191851691612bd091906149c9565b6000604051808303816000865af19150503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b505080925050612c36565b6040516361e411a760e11b815260040160405180910390fd5b81610a4d5785858585604051639d2e4c6760e01b8152600401610dfa94939291906149e5565b606e805460009182612c6d83614a1b565b9091555090506000612c9484838588612c8b368c90038c018c614a34565b93929190613548565b60008381526071602090815260409091208251815590820151600180830180549495508594909160ff19909116908381811115612cd357612cd3613ce1565b021790555060408281015180516002840180546001600160a01b039283166001600160a01b03199182161790915560208084015160038701805491851691841691909117905592840151600486015560608601518051600587018054918516918416919091179055928301516006860180549190931691161790550151600782015560808201518051600883018054909190829060ff191660018381811115612d7e57612d7e613ce1565b0217905550602082015181600101556040820151816002015550509050507ff313c253a5be72c29d0deb2c8768a9543744ac03d6b3cafd50cc976f1c2632fc612dc682612120565b82604051612dd59291906144d9565b60405180910390a150949350505050565b6000816001600160a01b0316836001600160a01b031603612e955760408086015190516001600160a01b0386169180156108fc02916000818181858888f19350505050612e9057816001600160a01b031663d0e30db086604001516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6c57600080fd5b505af1158015612e80573d6000803e3d6000fd5b5050505050612e908585856135b4565b611dd7565b600085516001811115612eaa57612eaa613ce1565b03613013576040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a91906148d7565b9050856040015181101561300257836001600160a01b03166340c10f1930838960400151612f489190614903565b6040516001600160a01b03909216602483015260448201526064016040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612f9c91906149c9565b6000604051808303816000865af19150503d8060008114612fd9576040519150601f19603f3d011682016040523d82523d6000602084013e612fde565b606091505b5050809250508161300257604051632f739fff60e11b815260040160405180910390fd5b61300d8686866135b4565b50611dd7565b60018551600181111561302857613028613ce1565b03612c1d5761303c83858760200151613632565b612e9057602085810151604080516001600160a01b038881166024830152604480830194909452825180830390940184526064909101825292820180516001600160e01b03166340c10f1960e01b179052519185169161309c91906149c9565b6000604051808303816000865af19150503d80600081146130d9576040519150601f19603f3d011682016040523d82523d6000602084013e6130de565b606091505b50508091505080612e905760405163c8e3a09f60e01b815260040160405180910390fd5b604080517f353bdd8d69b9e3185b3972e08b03845c0c14a21a390215302776a7a34b0e8764815282516020808301919091528301518183015291015160608201526080902090565b60008360030154118015613162575042836003015411155b1561317357825460ff191660041783555b6001600160a01b0382166000908152600284016020526040902054156131b75760405163025fd59560e41b81526001600160a01b0383166004820152602401610dfa565b6001600160a01b039091166000818152600284016020908152604082209390935560059093018054600181018255908452919092200180546001600160a01b0319169091179055565b600080600061320f600b611882565b6001600160a01b031663c441c4a86040518163ffffffff1660e01b8152600401600060405180830381865afa15801561324c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132749190810190614b22565b81519194509250905060005b8181101561330457858760020160008684815181106132a1576132a16144a8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054036132fc578281815181106132e1576132e16144a8565b60200260200101516bffffffffffffffffffffffff16850194505b600101613280565b5050505092915050565b600083831015801561333557506000855460ff16600481111561333357613333613ce1565b145b1561334d57845460ff19166001908117865585018290555b5050915460ff1692915050565b61336482826114a7565b6109ac5761337c816001600160a01b031660146136dd565b6133878360206136dd565b604051602001613398929190614c1a565b60408051601f198184030181529082905262461bcd60e51b8252610dfa91600401614c8f565b6133c882826114a7565b6109ac576000828152606b602090815260408083206001600160a01b03851684529091529020805460ff191660011790556134003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f0b836001600160a01b038416613878565b61346382826114a7565b156109ac576000828152606b602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0b836001600160a01b0384166138c7565b60005460ff16610f4c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610dfa565b6000826000018281548110613535576135356144a8565b9060005260206000200154905092915050565b613550613a8d565b92835260016020808501919091526060840180516001600160a01b0396871690528682015181519087169083015251466040918201528651818601805191881690915280519490961693909101929092529251810192909252910151608082015290565b600080845160018111156135ca576135ca613ce1565b036135e5576135de828486604001516139ba565b905061360e565b6001845160018111156135fa576135fa613ce1565b03612c1d576135de82848660200151613632565b80611178578383836040516341bd7d9160e11b8152600401610dfa93929190614ca2565b604080513060248201526001600160a01b038481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092861691613690916149c9565b6000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b509095945050505050565b606060006136ec8360026145e7565b6136f79060026148f0565b6001600160401b0381111561370e5761370e6142cc565b6040519080825280601f01601f191660200182016040528015613738576020820181803683370190505b509050600360fc1b81600081518110613753576137536144a8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613782576137826144a8565b60200101906001600160f81b031916908160001a90535060006137a68460026145e7565b6137b19060016148f0565b90505b6001811115613829576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106137e5576137e56144a8565b1a60f81b8282815181106137fb576137fb6144a8565b60200101906001600160f81b031916908160001a90535060049490941c9361382281614cd2565b90506137b4565b508315610f0b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610dfa565b60008181526001830160205260408120546138bf57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610993565b506000610993565b600081815260018301602052604081205480156139b05760006138eb600183614903565b85549091506000906138ff90600190614903565b905081811461396457600086600001828154811061391f5761391f6144a8565b9060005260206000200154905080876000018481548110613942576139426144a8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397557613975614ce9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610993565b6000915050610993565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009260609290871691613a1791906149c9565b6000604051808303816000865af19150503d8060008114613a54576040519150601f19603f3d011682016040523d82523d6000602084013e613a59565b606091505b509092509050818015613a84575080511580613a84575080806020019051810190613a8491906147e7565b95945050505050565b6040805160a08101825260008082526020808301829052835160608082018652838252818301849052818601849052848601919091528451808201865283815280830184905280860184905281850152845190810185528281529081018290529283015290608082015290565b600060208284031215613b0c57600080fd5b81356001600160e01b031981168114610f0b57600080fd5b60008082840360c0811215613b3857600080fd5b60a0811215613b4657600080fd5b50919360a08501359350915050565b60006101608284031215613b6857600080fd5b50919050565b60008083601f840112613b8057600080fd5b5081356001600160401b03811115613b9757600080fd5b6020830191508360208260051b850101111561137457600080fd5b60008060208385031215613bc557600080fd5b82356001600160401b03811115613bdb57600080fd5b613be785828601613b6e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015613c2d578351151583529284019291840191600101613c0f565b50909695505050505050565b600060208284031215613c4b57600080fd5b5035919050565b6001600160a01b038116811461222557600080fd5b80356118f881613c52565b60008060408385031215613c8557600080fd5b823591506020830135613c9781613c52565b809150509250929050565b600060208284031215613cb457600080fd5b8135610f0b81613c52565b60008060408385031215613cd257600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6080810160058610613d0b57613d0b613ce1565b9481526020810193909352604083019190915260609091015290565b600080600060408486031215613d3c57600080fd5b83356001600160401b0380821115613d5357600080fd5b818601915086601f830112613d6757600080fd5b813581811115613d7657600080fd5b87602060a083028501011115613d8b57600080fd5b6020928301989097509590910135949350505050565b60008060408385031215613db457600080fd5b8235613dbf81613c52565b946020939093013593505050565b6002811061222557612225613ce1565b81516040820190613ded81613dcd565b82526020928301516001600160a01b0316929091019190915290565b60008060008060408587031215613e1f57600080fd5b84356001600160401b0380821115613e3657600080fd5b613e4288838901613b6e565b90965094506020870135915080821115613e5b57600080fd5b50613e6887828801613b6e565b95989497509550505050565b80516001600160a01b03908116835260208083015190911690830152604090810151910152565b8051613ea681613dcd565b825260208181015190830152604090810151910152565b8581526101608101613ece86613dcd565b856020830152613ee16040830186613e74565b613eee60a0830185613e74565b612211610100830184613e9b565b8035601081106118f857600080fd5b60008060408385031215613f1e57600080fd5b613f2783613efc565b91506020830135613c9781613c52565b806040810183101561099357600080fd5b60008060008060008060008060008060006101208c8e031215613f6a57600080fd5b613f738c613c67565b9a5060208c0135995060408c0135985060608c0135975060808c013596506001600160401b038060a08e01351115613faa57600080fd5b613fba8e60a08f01358f01613b6e565b909750955060c08d0135811015613fd057600080fd5b613fe08e60c08f01358f01613f37565b94508060e08e01351115613ff357600080fd5b6140038e60e08f01358f01613f37565b9350806101008e0135111561401757600080fd5b506140298d6101008e01358e01613b6e565b81935080925050509295989b509295989b9093969950565b6000806020838503121561405457600080fd5b82356001600160401b038082111561406b57600080fd5b818501915085601f83011261407f57600080fd5b81358181111561408e57600080fd5b866020610160830285010111156140a457600080fd5b60209290920196919550909350505050565b6000806000806000806000806080898b0312156140d257600080fd5b88356001600160401b03808211156140e957600080fd5b6140f58c838d01613b6e565b909a50985060208b013591508082111561410e57600080fd5b61411a8c838d01613b6e565b909850965060408b013591508082111561413357600080fd5b61413f8c838d01613b6e565b909650945060608b013591508082111561415857600080fd5b506141658b828c01613b6e565b999c989b5096995094979396929594505050565b60006020828403121561418b57600080fd5b610f0b82613efc565b6000806000604084860312156141a957600080fd5b8335925060208401356001600160401b038111156141c657600080fd5b6141d286828701613b6e565b9497909650939450505050565b60005b838110156141fa5781810151838201526020016141e2565b50506000910152565b6000815180845261421b8160208601602086016141df565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561428657603f19888603018452614274858351614203565b94509285019290850190600101614258565b5092979650505050505050565b6000806000606084860312156142a857600080fd5b833592506020840135915060408401356142c181613c52565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614304576143046142cc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614332576143326142cc565b604052919050565b6002811061222557600080fd5b60006060828403121561435957600080fd5b6143616142e2565b9050813561436e81613c52565b8152602082013561437e81613c52565b806020830152506040820135604082015292915050565b6000606082840312156143a757600080fd5b6143af6142e2565b905081356143bc8161433a565b80825250602082013560208201526040820135604082015292915050565b600061016082840312156143ed57600080fd5b60405160a081018181106001600160401b038211171561440f5761440f6142cc565b6040528235815260208301356144248161433a565b60208201526144368460408501614347565b60408201526144488460a08501614347565b606082015261445b846101008501614395565b60808201529392505050565b6003811061447757614477613ce1565b9052565b606081016144898286614467565b60208201939093526001600160a01b0391909116604090910152919050565b634e487b7160e01b600052603260045260246000fd5b604081016144cc8285614467565b8260208301529392505050565b6000610180820190508382528251602083015260208301516144fa81613dcd565b8060408401525060408301516145136060840182613e74565b50606083015161452660c0840182613e74565b506080830151611a5c610120840182613e9b565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000808335601e1984360301811261459f57600080fd5b8301803591506001600160401b038211156145b957600080fd5b6020019150600581901b360382131561137457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610993576109936145d1565b6001600160e01b031991909116815260200190565b602081016010831061462757614627613ce1565b91905290565b600181811c9082168061464157607f821691505b602082108103613b6857634e487b7160e01b600052602260045260246000fd5b6000808335601e1984360301811261467857600080fd5b8301803591506001600160401b0382111561469257600080fd5b60200191503681900382131561137457600080fd5b601f821115610db7576000816000526020600020601f850160051c810160208610156146d05750805b601f850160051c820191505b81811015610a4d578281556001016146dc565b6001600160401b03831115614706576147066142cc565b61471a83614714835461462d565b836146a7565b6000601f84116001811461474e57600085156147365750838201355b600019600387901b1c1916600186901b178355611dd7565b600083815260209020601f19861690835b8281101561477f578685013582556020948501946001909201910161475f565b508682101561479c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000606082840312156147c057600080fd5b610f0b8383614395565b6000602082840312156147dc57600080fd5b8135610f0b8161433a565b6000602082840312156147f957600080fd5b81518015158114610f0b57600080fd5b6001600160e01b03198316815260408101600b83106144cc576144cc613ce1565b8183526000602080850194508260005b8581101561486857813561484d81613c52565b6001600160a01b03168752958201959082019060010161483a565b509495945050505050565b81835260006001600160fb1b0383111561488c57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148b960408301868861482a565b82810360208401526148cc818587614873565b979650505050505050565b6000602082840312156148e957600080fd5b5051919050565b80820180821115610993576109936145d1565b81810381811115610993576109936145d1565b60008261493357634e487b7160e01b600052601260045260246000fd5b500490565b60808152600061494c608083018a8c61482a565b60208382036020850152614961828a8c61482a565b9150838203604085015261497682888a614873565b848103606086015285815286925060200160005b868110156149b857833561499d8161433a565b6149a681613dcd565b8252928201929082019060010161498a565b509c9b505050505050505050505050565b600082516149db8184602087016141df565b9190910192915050565b60c081016149f38287613e9b565b6001600160a01b0394851660608301529284166080820152921660a090920191909152919050565b600060018201614a2d57614a2d6145d1565b5060010190565b600060a08284031215614a4657600080fd5b614a4e6142e2565b8235614a5981613c52565b81526020830135614a6981613c52565b6020820152614a7b8460408501614395565b60408201529392505050565b60006001600160401b03821115614aa057614aa06142cc565b5060051b60200190565b600082601f830112614abb57600080fd5b81516020614ad0614acb83614a87565b61430a565b8083825260208201915060208460051b870101935086841115614af257600080fd5b602086015b84811015614b17578051614b0a81613c52565b8352918301918301614af7565b509695505050505050565b600080600060608486031215614b3757600080fd5b83516001600160401b0380821115614b4e57600080fd5b614b5a87838801614aaa565b9450602091508186015181811115614b7157600080fd5b614b7d88828901614aaa565b945050604086015181811115614b9257600080fd5b86019050601f81018713614ba557600080fd5b8051614bb3614acb82614a87565b81815260059190911b82018301908381019089831115614bd257600080fd5b928401925b82841015614c0b5783516bffffffffffffffffffffffff81168114614bfc5760008081fd5b82529284019290840190614bd7565b80955050505050509250925092565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614c528160178501602088016141df565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614c838160288401602088016141df565b01602801949350505050565b602081526000610f0b6020830184614203565b60a08101614cb08286613e9b565b6001600160a01b03938416606083015291909216608090920191909152919050565b600081614ce157614ce16145d1565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ee02a5eecdaf000f89a97c80581647ea2e6846acd876adce9ad2517b01ba19a64736f6c63430008170033 + │ ├─ [3959122] → new (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]@0x90193C961A926261B756D1E5bb255e67ff9498A1 + │ │ └─ ← 19765 bytes of code + │ ├─ [8581] GeneralConfig::label(31337 [3.133e4], (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "RoninGatewayV3::Logic") + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) [staticcall] + │ │ │ └─ ← "0x90193C961A926261B756D1E5bb255e67ff9498A1" + │ │ ├─ [0] VM::label((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]") + │ │ │ └─ ← () + │ │ └─ ← () + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [19843] ArtifactFactory::generateArtifact(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "RoninGatewayV3.sol", "RoninGatewayV3Logic", 0x, 3) + │ │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ │ ├─ [2646] GeneralConfig::getExplorer(0x054c6f63616c0000000000000000000000000000000000000000000000000000) [staticcall] + │ │ │ └─ ← "" + │ │ ├─ [0] console::log("\u{1b}[92mRoninGatewayV3Logic will be deployed at: address/0x90193c961a926261b756d1e5bb255e67ff9498a1\u{1b}[0m", "(nonce: 3)") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [1210] GeneralConfig::getRuntimeConfig() [staticcall] + │ │ │ └─ ← Option({ log: false, trezor: false }) + │ │ ├─ [0] VM::getLabel((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) + │ │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]" + │ │ ├─ [0] console::log("Skipping artifact generation for:", "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]", "\n") [staticcall] + │ │ │ └─ ← () + │ │ └─ ← () + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] + │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] + │ │ └─ ← 4 + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::broadcast() + │ │ └─ ← () + │ ├─ [0] VM::getCode("TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy") [staticcall] + │ │ └─ ← 0x608060405260405162000db238038062000db2833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000d6b833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000d8b6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000d6b8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61081480620005576000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ec12be842bfcb61122d5b6339b7102392ff14c28176829b5fed43c54c70a9d5064736f6c63430008170033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564 + │ ├─ [688350] → new (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]@0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496 + │ │ ├─ emit Upgraded(implementation: (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) + │ │ ├─ [222010] (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]::initialize(0x0000000000000000000000000000000000000000, 3, 6, 2, 3, [], [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], [[1], [0]], [0]) [delegatecall] + │ │ │ ├─ emit RoleGranted(role: 0x0000000000000000000000000000000000000000000000000000000000000000, account: 0x0000000000000000000000000000000000000000, sender: DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) + │ │ │ ├─ emit ThresholdUpdated(nonce: 0, numerator: 3, denominator: 6, previousNumerator: 0, previousDenominator: 0) + │ │ │ ├─ emit TrustedThresholdUpdated(nonce: 1, numerator: 2, denominator: 3, previousNumerator: 3, previousDenominator: 6) + │ │ │ ├─ emit TokenMapped(roninTokens: [0x0000000000000000000000000000000000000000], mainchainTokens: [0x0000000000000000000000000000000000000000], chainIds: [1], standards: [0]) + │ │ │ ├─ emit MinimumThresholdsUpdated(tokens: [0x0000000000000000000000000000000000000000], threshold: [0]) + │ │ │ ├─ emit Initialized(version: 1) + │ │ │ └─ ← () + │ │ ├─ emit AdminChanged(previousAdmin: 0x0000000000000000000000000000000000000000, newAdmin: proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) + │ │ └─ ← 2068 bytes of code + │ ├─ [0] VM::load((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) [staticcall] + │ │ └─ ← 0x000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90 + │ ├─ [0] VM::getLabel((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) + │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]" + │ ├─ [0] VM::toString(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) [staticcall] + │ │ └─ ← "0x399251E522341ef9791CfdC520caF8a89563ee90" + │ ├─ [0] VM::toString(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) [staticcall] + │ │ └─ ← "0x399251E522341ef9791CfdC520caF8a89563ee90" + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [17957] GeneralConfig::setAddress(0x054c6f63616c0000000000000000000000000000000000000000000000000000, 0x0e526f6e696e4761746577617956330000000000000000000000000000000000, (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) + │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] + │ │ │ └─ ← "31337" + │ │ ├─ [0] VM::toString((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] + │ │ │ └─ ← "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496" + │ │ ├─ [0] VM::label((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]") + │ │ │ └─ ← () + │ │ └─ ← () + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [19849] ArtifactFactory::generateArtifact(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy", "RoninGatewayV3Proxy", 0x9584a5920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000, 4) + │ │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ │ ├─ [2646] GeneralConfig::getExplorer(0x054c6f63616c0000000000000000000000000000000000000000000000000000) [staticcall] + │ │ │ └─ ← "" + │ │ ├─ [0] console::log("\u{1b}[92mRoninGatewayV3Proxy will be deployed at: address/0xa8452ec99ce0c64f20701db7dd3abdb607c00496\u{1b}[0m", "(nonce: 4)") [staticcall] + │ │ │ └─ ← () + │ │ ├─ [1210] GeneralConfig::getRuntimeConfig() [staticcall] + │ │ │ └─ ← Option({ log: false, trezor: false }) + │ │ ├─ [0] VM::getLabel((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) + │ │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]" + │ │ ├─ [0] console::log("Skipping artifact generation for:", "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]", "\n") [staticcall] + │ │ │ └─ ← () + │ │ └─ ← () + │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + ├─ [14422983] → new MainchainBridgeManagerDeploy@0x2e234DAe75C793f67A35089C9d99245E1C58470b + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] + │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 + │ ├─ [0] VM::toString(1) [staticcall] + │ │ └─ ← "1" + │ ├─ [0] VM::addr(89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76]) [staticcall] + │ │ └─ ← operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95] + │ ├─ [0] VM::label(operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95], "operator-1") + │ │ └─ ← () + │ ├─ [0] VM::toString(1) [staticcall] + │ │ └─ ← "1" + │ ├─ [0] VM::addr(42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76]) [staticcall] + │ │ └─ ← governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430] + │ ├─ [0] VM::label(governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430], "governor-1") + │ │ └─ ← () + │ ├─ [0] VM::toString(2) [staticcall] + │ │ └─ ← "2" + │ ├─ [0] VM::addr(94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76]) [staticcall] + │ │ └─ ← operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D] + │ ├─ [0] VM::label(operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D], "operator-2") + │ │ └─ ← () + │ ├─ [0] VM::toString(2) [staticcall] + │ │ └─ ← "2" + │ ├─ [0] VM::addr(403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74]) [staticcall] + │ │ └─ ← governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E] + │ ├─ [0] VM::label(governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E], "governor-2") + │ │ └─ ← () + │ ├─ [0] VM::toString(3) [staticcall] + │ │ └─ ← "3" + │ ├─ [0] VM::addr(66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76]) [staticcall] + │ │ └─ ← operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D] + │ ├─ [0] VM::label(operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D], "operator-3") + │ │ └─ ← () + │ ├─ [0] VM::toString(3) [staticcall] + │ │ └─ ← "3" + │ ├─ [0] VM::addr(56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76]) [staticcall] + │ │ └─ ← governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454] + │ ├─ [0] VM::label(governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454], "governor-3") + │ │ └─ ← () + │ ├─ [0] VM::toString(4) [staticcall] + │ │ └─ ← "4" + │ ├─ [0] VM::addr(62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76]) [staticcall] + │ │ └─ ← operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D] + │ ├─ [0] VM::label(operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D], "operator-4") + │ │ └─ ← () + │ ├─ [0] VM::toString(4) [staticcall] + │ │ └─ ← "4" + │ ├─ [0] VM::addr(27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76]) [staticcall] + │ │ └─ ← governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4] + │ ├─ [0] VM::label(governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4], "governor-4") + │ │ └─ ← () + │ ├─ [0] VM::toString(5) [staticcall] + │ │ └─ ← "5" + │ ├─ [0] VM::addr(26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76]) [staticcall] + │ │ └─ ← operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41] + │ ├─ [0] VM::label(operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41], "operator-5") + │ │ └─ ← () + │ ├─ [0] VM::toString(5) [staticcall] + │ │ └─ ← "5" + │ ├─ [0] VM::addr(104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77]) [staticcall] + │ │ └─ ← governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11] + │ ├─ [0] VM::label(governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11], "governor-5") + │ │ └─ ← () + │ ├─ [0] VM::toString(6) [staticcall] + │ │ └─ ← "6" + │ ├─ [0] VM::addr(113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]) [staticcall] + │ │ └─ ← operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8] + │ ├─ [0] VM::label(operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], "operator-6") + │ │ └─ ← () + │ ├─ [0] VM::toString(6) [staticcall] + │ │ └─ ← "6" + │ ├─ [0] VM::addr(6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]) [staticcall] + │ │ └─ ← governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8] + │ ├─ [0] VM::label(governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], "governor-6") + │ │ └─ ← () + │ ├─ [0] VM::addr(91510552187238886959033578665964256892121014792639911859038233360780899104770 [9.151e76]) [staticcall] + │ │ └─ ← governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e] + │ ├─ [0] VM::label(governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e], "governance-admin") + │ │ └─ ← () + │ ├─ [0] VM::addr(32023155812407028061452097301509641536118192107878305823158825758004472210926 [3.202e76]) [staticcall] + │ │ └─ ← validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40] + │ ├─ [0] VM::label(validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40], "validator-set-contract") + │ │ └─ ← () + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0c42726964676552657761726400000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [0] VM::addr(67501766086945423188359301496192992873575530264346267663568933074015626216763 [6.75e76]) [staticcall] + │ │ └─ ← proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90] + │ ├─ [0] VM::label(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90], "proxy-admin") + │ │ └─ ← () + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] + │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] + │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] + │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] + │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] + │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] + │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] + │ ├─ [2964] GeneralConfig::setRawSharedArguments(0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000013492c1caa270f0a24342015a049518cf093dd40000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c400000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c0049600000000000000000000000013492c1caa270f0a24342015a049518cf093dd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000013492c1caa270f0a24342015a049518cf093dd4000000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000012800000000000000000000000000000000000000000000000000000000000001340000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000001640000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c00496000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000000000060000000000000000000000007083c6a0f61b3fdc6a8f4bb573f5097b485cbb9500000000000000000000000010e09aacfb9408a6da536d258d3d64718ab56e4d000000000000000000000000698bec9a526055cd092e9e15acccfc542b63f92d0000000000000000000000000d8274a6b3cddb84e8fd4f8c93b4cfa26dbcb45d000000000000000000000000af627c77b0b0ed13882b0ff7b10af7a610035a41000000000000000000000000ccfca9c1c0b543d21dc71c43dce7b174a7015fb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000bf91bfd887138c482101bff998f4a96d41c5c4300000000000000000000000008856475dd525166b6654edd18e0011e592459a8e000000000000000000000000c966b8836e01db8f720f0a169da0252767b87454000000000000000000000000713886700f9f4b7df033bd1615177684cedceee4000000000000000000000000a131e33ef51a90640f54291645bdcee9de3d1c1100000000000000000000000030949311d69fa2eae2b805a9905eb6d72a5b38a80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c004960000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c57726170706564205745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5772617070656420524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134178696520496e66696e6974792053686172640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034158530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012536d6f6f7468204c6f766520506f74696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000006c584057a233113f3d6bbb9fa535457f882e4a1651e9872443fbbc09c98cab8b5d0775821d287000a7bcdf57179f0756bcea1e44933bc9b95e7437a24f89565ec922694c2a69e2569e7c38daf93226a6654bf3ab7f08a5bae2f0f3ba29b7c335c8961c3586584723ed2cf8ed4692507f7ccfa033d901aa56911770fa9ab4bb3e03b1918b42fc7ffb813c3827ed00534d936c7930115f3d65fab756c2e15b0e3bdfa57e1de87203668f02b950f40e1246963fa77677df934e74c97577520c1513700000000000000000000000000000000000000000000000000000000000000065d2503fc5f74f349f61fd45c72868b37a10b28a35052be8e3f15eb5d1f65796c00e49bee553750db35dc75dd0f611fc9ca1a950367e3c78244d9fbf66e643c7c7c8efe0b120312d5f846e2e27820676655285e2808b5e4e93580b1d5b5129b0c3d07b40a68891e1ce2246c87932f18ffd4c01876519808e339af84d9d65aab7fe7bedbcabd91f0b98becc732538ae35a6d72e3efc234a10b4383ae967d1af9590e91dc744fe301c24bac6970238cabaca15627df2414bf146a664dd0792399b3) + │ │ └─ ← () + │ └─ ← 69933 bytes of code + ├─ [450330] MainchainBridgeManagerDeploy::run() + │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] + │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) + │ ├─ [0] console::log("> ", "\u{1b}[94m_deployImmutable RoninBridgeManager\u{1b}[0m", "...") [staticcall] + │ │ └─ ← () + │ ├─ [5409] GeneralConfig::getContractName(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← "RoninBridgeManager" + │ ├─ [3855] GeneralConfig::getContractAbsolutePath(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] + │ │ └─ ← "RoninBridgeManager.sol" + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] + │ │ └─ ← 5 + │ ├─ [3270] GeneralConfig::getSender() [staticcall] + │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] + │ ├─ [0] VM::broadcast() + │ │ └─ ← () + │ ├─ [0] VM::getCode("RoninBridgeManager.sol") [staticcall] + │ │ └─ ← 0x60a060405260405162007a4d38038062007a4d833981016040819052620000269162001520565b8181898d8d8d8c8c8c8c8c836200003d81620001a0565b5050600160008051602062007a2d833981519152556200005e8888620002af565b506200006e9050600286620003c4565b604080516020808201839052600c60608301526b212924a223a2afa0a226a4a760a11b6080808401919091528284018a905283518084038201815260a0840185528051908301207f599a80fcaa47b95e2323ab4d34d34e0cc9feda4b843edafcc30c7bdf60ea15bf60c08501527f9d3fa1662ea89365eb7af36506f0ad5413bd7e078960d8481ff4718763aaa8e960e08501527fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610100850152610120808501919091528451808503909101815261014090930190935281519101209052620001598183856200046e565b50505050505050505062000173816200088e60201b60201c565b5062000181600030620008c1565b6200018d82826200095d565b505050505050505050505050506200199c565b606081620001ae8162000a20565b8251806001600160401b03811115620001cb57620001cb62001331565b604051908082528060200260200182016040528015620001f5578160200160208202803683370190505b50925080600003620002085750620002a9565b600080516020620079ed83398151915260006314d72edb60e21b815b84811015620002a3578781815181106200024257620002426200168c565b602002602001015192506200025d8362000a5c60201b60201c565b62000269838362000a94565b62000275848462000c73565b8782815181106200028a576200028a6200168c565b9115156020928302919091019091015260010162000224565b50505050505b50919050565b60008082841115620002e7576040516387f6f09560e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b60008051602062007a0d833981519152549150620003237fac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ff5490565b90506200033e60008051602062007a0d833981519152859055565b620003687fac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ff849055565b82846200038460008051602062007a2d83398151915262000c93565b60408051868152602081018690527f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910160405180910390a49250929050565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f811115620003fd57620003fd620016a2565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f811115620004415762000441620016a2565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b60606200047c838362000cbb565b620004878162000a20565b82518551811480156200049a5750845181145b620004c7576040516306b5667560e21b81526001600160e01b0319600035166004820152602401620002de565b806001600160401b03811115620004e257620004e262001331565b6040519080825280602002602001820160405280156200050c578160200160208202803683370190505b509250806000036200051f575062000886565b604080518082019091526000808252602082018190527f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c917f8400683eb2cb350596d73644c0c89fe45f108600003457374f4ab3e87b4f3aa3917fd38c234075fde25875da8a6b7e36b58b86681d483271a99eeeee1d78e258a24d917f88547008e60f5748911f2e59feb3093b7e4c2e87b2dd69d61f112fcc932de8e3919081908190815b89811015620007d8578d8181518110620005e257620005e26200168c565b602002602001015194508c81815181106200060157620006016200168c565b602002602001015193506200061c8562000dd960201b60201c565b620006278462000dd9565b8e81815181106200063c576200063c6200168c565b60200260200101516001600160601b03166000036200067d57604051637f11b8a360e11b81526001600160e01b0319600035166004820152602401620002de565b62000689898662000e10565b806200069c57506200069c898562000e10565b80620006af5750620006af878662000e10565b80620006c25750620006c2878562000e10565b158c8281518110620006d857620006d86200168c565b6020026020010190151590811515815250508b8181518110620006ff57620006ff6200168c565b602002602001015115620007cf5762000719898662000c73565b5062000726878562000c73565b506001600160a01b03848116600081815260208b90526040902080546001600160a01b0319169288169290921790915582528e518f90829081106200076f576200076f6200168c565b6020908102919091018101516001600160601b0316908301819052620007969084620016b8565b6001600160a01b038087166000908152602089815260409091208551918601516001600160601b0316600160a01b029190921617905592505b600101620005c4565b50620008057f6924fe71b0c8b61aea02ca498b5f53b29bd95726278b1fe4eb791bb24a42644c8362000e33565b506200083d635ebae8a060e01b8d8d6040516020016200082792919062001756565b60408051601f1981840301815291905262000e4d565b7f897810999654e525e272b5909785c4d0ceaee1bbf9c87d9091a37558b0423b788b8f8f8f60405162000874949392919062001788565b60405180910390a15050505050505050505b509392505050565b600281905560405181907fe5cd1c123a8cf63fa1b7229678db61fe8ae99dbbd27889370b6667c8cae97da190600090a250565b8060036000846004811115620008db57620008db620016a2565b6004811115620008ef57620008ef620016a2565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558116826004811115620009305762000930620016a2565b6040517f356c8c57e9e84b99b1cb58b13c985b2c979f78cbdf4d0fa70fe2a98bb09a099d90600090a35050565b60005b825181101562000a1b57306001600160a01b03168282815181106200098957620009896200168c565b60200260200101516001600160a01b031603620009c85760405163053265f160e01b81526001600160e01b0319600035166004820152602401620002de565b62000a12838281518110620009e157620009e16200168c565b6020026020010151838381518110620009fe57620009fe6200168c565b6020026020010151620008c160201b60201c565b60010162000960565b505050565b62000a2b8162001188565b1562000a5957604051630d697db160e11b81526001600160e01b0319600035166004820152602401620002de565b50565b806001600160a01b03163b60000362000a5957604051630bfc64a360e21b81526001600160a01b0382166004820152602401620002de565b6040516001600160e01b03198216602482015260009060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525190915060009081906001600160a01b0386169062000af89085906200183e565b600060405180830381855afa9150503d806000811462000b35576040519150601f19603f3d011682016040523d82523d6000602084013e62000b3a565b606091505b50915091508162000c1c57846001600160a01b03168360405160240162000b6291906200188a565b60408051601f198184030181529181526020820180516001600160e01b03166325da93a560e11b1790525162000b9991906200183e565b600060405180830381855afa9150503d806000811462000bd6576040519150601f19603f3d011682016040523d82523d6000602084013e62000bdb565b606091505b5090925090508162000c1c5760405163069d427960e11b81526001600160e01b0319851660048201526001600160a01b0386166024820152604401620002de565b8080602001905181019062000c3291906200189f565b62000c6c5760405163069d427960e11b81526001600160e01b0319851660048201526001600160a01b0386166024820152604401620002de565b5050505050565b600062000c8a836001600160a01b03841662001233565b90505b92915050565b600062000c9e825490565b905062000cb68262000cb2836001620016b8565b9055565b919050565b81518151606091908082016001600160401b0381111562000ce05762000ce062001331565b60405190808252806020026020018201604052801562000d0a578160200160208202803683370190505b50925060005b8281101562000d6c5785818151811062000d2e5762000d2e6200168c565b602002602001015184828151811062000d4b5762000d4b6200168c565b6001600160a01b039092166020928302919091019091015260010162000d10565b60005b8281101562000dcf5785818151811062000d8d5762000d8d6200168c565b602002602001015185838151811062000daa5762000daa6200168c565b6001600160a01b03909216602092830291909101909101526001918201910162000d6f565b5050505092915050565b6001600160a01b03811662000a595760405163104c66df60e31b81526001600160e01b0319600035166004820152602401620002de565b6001600160a01b0381166000908152600183016020526040812054151562000c8a565b600062000c8d8362000e46818562001285565b9250829055565b600062000e69600080516020620079ed833981519152620012a5565b8051909150600081900362000e7e5750505050565b6000816001600160401b0381111562000e9b5762000e9b62001331565b60405190808252806020026020018201604052801562000ec5578160200160208202803683370190505b5090506000826001600160401b0381111562000ee55762000ee562001331565b60405190808252806020026020018201604052801562000f1a57816020015b606081526020019060019003908162000f045790505b5090506000868660405160200162000f34929190620018c3565b604051602081830303815290604052905060008160405160240162000f5a91906200188a565b60408051601f198184030181529190526020810180516001600160e01b03166325da93a560e11b179052905060005b858110156200113e5786818151811062000fa75762000fa76200168c565b60200260200101516001600160a01b03168360405162000fc891906200183e565b6000604051808303816000865af19150503d806000811462001007576040519150601f19603f3d011682016040523d82523d6000602084013e6200100c565b606091505b508683815181106200102257620010226200168c565b602002602001018684815181106200103e576200103e6200168c565b60200260200101829052821515151581525050508481815181106200106757620010676200168c565b602002602001015162001135578681815181106200108957620010896200168c565b60200260200101516001600160a01b031682604051620010aa91906200183e565b6000604051808303816000865af19150503d8060008114620010e9576040519150601f19603f3d011682016040523d82523d6000602084013e620010ee565b606091505b508683815181106200110457620011046200168c565b602002602001018684815181106200112057620011206200168c565b60200260200101829052821515151581525050505b60010162000f89565b507fc0b07a27e66788f39cc91405f012f34066b16f31b4bda9438c52f2dae0cc5b6382878686604051620011769493929190620018f6565b60405180910390a15050505050505050565b600081516000036200119c57506000919050565b60005b60018351038110156200122a57600181015b83518110156200122057838181518110620011d057620011d06200168c565b60200260200101516001600160a01b0316848381518110620011f657620011f66200168c565b60200260200101516001600160a01b03160362001217575060019392505050565b600101620011b1565b506001016200119f565b50600092915050565b60008181526001830160205260408120546200127c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000c8d565b50600062000c8d565b815481018181101562000c8d57634e487b7160005260116020526024601cfd5b60606000620012b483620012bb565b9392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156200130d57602002820191906000526020600020905b815481526020019060010190808311620012f8575b50505050509050919050565b80516001600160a01b038116811462000cb657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562001372576200137262001331565b604052919050565b60006001600160401b0382111562001396576200139662001331565b5060051b60200190565b600082601f830112620013b257600080fd5b81516020620013cb620013c5836200137a565b62001347565b8083825260208201915060208460051b870101935086841115620013ee57600080fd5b602086015b848110156200141557620014078162001319565b8352918301918301620013f3565b509695505050505050565b600082601f8301126200143257600080fd5b8151602062001445620013c5836200137a565b8083825260208201915060208460051b8701019350868411156200146857600080fd5b602086015b84811015620014155780516001600160601b03811681146200148f5760008081fd5b83529183019183016200146d565b600082601f830112620014af57600080fd5b81516020620014c2620013c5836200137a565b80838252602082019150600560208560051b880101945087851115620014e757600080fd5b602087015b8581101562001513578051828110620015055760008081fd5b8452928401928401620014ec565b5090979650505050505050565b60008060008060008060008060008060006101608c8e0312156200154357600080fd5b8b519a5060208c0151995060408c0151985060608c015197506200156a60808d0162001319565b60a08d01519097506001600160401b038111156200158757600080fd5b620015958e828f01620013a0565b60c08e015190975090506001600160401b03811115620015b457600080fd5b620015c28e828f01620013a0565b60e08e015190965090506001600160401b03811115620015e157600080fd5b620015ef8e828f01620013a0565b6101008e015190955090506001600160401b038111156200160f57600080fd5b6200161d8e828f0162001420565b6101208e015190945090506001600160401b038111156200163d57600080fd5b6200164b8e828f016200149d565b6101408e015190935090506001600160401b038111156200166b57600080fd5b620016798e828f01620013a0565b9150509295989b509295989b9093969950565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b8082018082111562000c8d57634e487b7160e01b600052601160045260246000fd5b60008151808452602080850194506020840160005b83811015620017165781516001600160a01b031687529582019590820190600101620016ef565b509495945050505050565b60008151808452602080850194506020840160005b838110156200171657815115158752958201959082019060010162001736565b6040815260006200176b6040830185620016da565b82810360208401526200177f818562001721565b95945050505050565b6080815260006200179d608083018762001721565b82810360208481019190915286518083528782019282019060005b81811015620017df5784516001600160601b031683529383019391830191600101620017b8565b50508481036040860152620017f58188620016da565b9250505082810360608401526200180d8185620016da565b979650505050505050565b60005b83811015620018355781810151838201526020016200181b565b50506000910152565b600082516200185281846020870162001818565b9190910192915050565b600081518084526200187681602086016020860162001818565b601f01601f19169290920160200192915050565b60208152600062000c8a60208301846200185c565b600060208284031215620018b257600080fd5b81518015158114620012b457600080fd5b6001600160e01b0319831681528151600090620018e881600485016020870162001818565b919091016004019392505050565b6080815260006200190b60808301876200185c565b602083820381850152620019208288620016da565b9150838203604085015262001936828762001721565b915083820360608501528185518084528284019150828160051b85010183880160005b838110156200198b57601f19878403018552620019788383516200185c565b9486019492509085019060010162001959565b50909b9a5050505050505050505050565b608051616019620019d4600039600081816103c5015281816106ba015281816108da015281816109db015261121801526160196000f3fe608060405234801561001057600080fd5b50600436106102685760003560e01c80639a7d338211610151578063c441c4a8116100c3578063de981f1b11610087578063de981f1b14610633578063e75235b81461065e578063e9c0349814610666578063f80b535214610679578063fb4f637114610681578063fdc4fa471461069457600080fd5b8063c441c4a8146105ce578063cc7e6b3b146105e5578063d0a50db014610605578063d78392f81461060d578063dafae4081461062057600080fd5b8063b384abef11610115578063b384abef1461050a578063b405aaf214610565578063b9c3620914610578578063bc4e068f146105a0578063bc9182fd146105b3578063bc96180b146105c657600080fd5b80639a7d3382146104b65780639b19dbfd146104c95780639b2ee437146104d1578063a1819f9a146104e4578063a8a0e32c146104f757600080fd5b80632d6d7d73116101ea578063663ac011116101ae578063663ac011146103e75780637de5dedd146103fa578063800eaab314610402578063828fc1a114610415578063865e6fd314610428578063901979d51461043b57600080fd5b80632d6d7d73146103675780632faf925d1461037a57806334d5f37b1461038d57806335da8121146103ad5780633644e515146103c057600080fd5b80630b881830116102315780630b881830146102e75780630f7c3189146102fa5780631c905e391461030f5780631f425338146103315780632c5e65201461034457600080fd5b80624054b81461026d57806301a5f43f1461028257806306aba0e1146102ab57806309fcd8c7146102c15780630a44fa43146102d4575b600080fd5b61028061027b366004614b75565b6106a7565b005b610295610290366004614c09565b6106e6565b6040516102a29190614ce0565b60405180910390f35b6102b3610799565b6040519081526020016102a2565b6102806102cf366004614cf3565b6107b6565b6102b36102e2366004614dc2565b61084b565b6102806102f5366004614b75565b6108d0565b6103026108fe565b6040516102a29190614e3d565b61032261031d366004614e50565b610917565b6040516102a293929190614e9c565b61029561033f366004614dc2565b610933565b610357610352366004614f66565b610980565b60405190151581526020016102a2565b610302610375366004614dc2565b61098d565b610280610388366004614f9b565b6109d1565b6102b361039b366004614ff4565b60006020819052908152604090205481565b6102956103bb366004614dc2565b6109ff565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6102806103f536600461501c565b610a45565b6102b3610b32565b61028061041036600461529d565b610bae565b610357610423366004615300565b610bf3565b61028061043636600461533b565b610c01565b61049e610449366004615365565b6001600160a01b039081166000908152600080516020615f8483398151915260209081526040808320549093168252600080516020615f6483398151915290522054600160a01b90046001600160601b031690565b6040516001600160601b0390911681526020016102a2565b6102806104c4366004614e50565b610c1c565b610302610c68565b6102806104df366004615365565b610c72565b6102806104f2366004615380565b610e09565b610280610505366004615459565b610ed0565b610554610518366004614e50565b600160208181526000938452604080852090915291835291208054918101546002820154600383015460069093015460ff909416939192909185565b6040516102a29594939291906154ad565b610357610573366004615365565b610eec565b61058b610586366004614e50565b610f06565b604080519283526020830191909152016102a2565b6103226105ae366004614ff4565b610f27565b6103026105c13660046154db565b610f44565b6102b3611035565b6105d6611040565b6040516102a293929190615549565b6105f86105f3366004614dc2565b61106a565b6040516102a2919061558c565b6102b36110a8565b61049e61061b366004615365565b6110c1565b61035761062e366004614ff4565b6110cc565b61064661064136600461559f565b611109565b6040516001600160a01b0390911681526020016102a2565b61058b611184565b610295610674366004614dc2565b6111b5565b6103026111fb565b61028061068f366004614f9b565b611205565b6103026106a2366004614dc2565b611245565b6106b03361132c565b6106df85858585857f000000000000000000000000000000000000000000000000000000000000000033611371565b5050505050565b60606106f0611416565b61078e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061144692505050565b979650505050505050565b60006107b1600080516020615fc48339815191525490565b905090565b6107bf3361132c565b61084089898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061080592508a91508b9050615685565b8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503392506117c2915050565b505050505050505050565b600082828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061088c925083915061191f9050565b6108c884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061195492505050565b949350505050565b6106df85858585857f00000000000000000000000000000000000000000000000000000000000000006119d8565b60606107b1600080516020615f04833981519152611a8c565b60608060606109268585611a99565b9250925092509250925092565b606061093d611416565b610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e8292505050565b9392505050565b60006108c8848484611f4d565b606061097983838080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250611f83915050565b92915050565b6106df85858585857f00000000000000000000000000000000000000000000000000000000000000006120dd565b6060610a09611416565b61097983838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061220092505050565b610a4e3361132c565b60003390506000610b17468d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610adc92508d91508e9050615685565b8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506122f2915050565b9050610b24828285612401565b505050505050505050505050565b6000610b4a600080516020615f248339815191525490565b6001610b62600080516020615f248339815191525490565b610b90610b7b600080516020615fc48339815191525490565b600080516020615f4483398151915290612517565b610b9a91906156a8565b610ba491906156bb565b6107b191906156ce565b333014610be5576000356001600160e01b0319166040516307337e1960e41b8152600401610bdc91906156f0565b60405180910390fd5b610bef8282612542565b5050565b600061097960008484611f4d565b610c09611416565b610c12816125f0565b610bef8282612626565b6000828152600160208181526040808420858552909152822090810154909103610c595760405163713b099760e11b815260040160405180910390fd5b610c62816126ca565b50505050565b60606107b16128df565b610c7b3361132c565b610c84816128f8565b336000908152600080516020615f6483398151915260208190526040909120546001600160a01b039081169083168103610cdc57604051630669b93360e31b81526001600160a01b0384166004820152602401610bdc565b600080516020615fa48339815191526000610cf7828461292d565b8015610d085750610d088286612942565b905080610d335760405163080fab4b60e31b81526001600160a01b0386166004820152602401610bdc565b6001600160a01b038381166000818152600080516020615f848339815191526020818152604080842080546001600160a01b0319908116909155958b16808552818520805488163390811790915585528a8352938190208054909616841790955584519081019390935292820152610dc6906364b18d0960e11b906060015b604051602081830303815290604052612957565b6040516001600160a01b03808816919086169033907fcef34cd748f30a1b7a2f214fd1651779f79bc6c1be02785cad5c1f0ee877213d90600090a4505050505050565b610e123361132c565b610ec38a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250610e8892508a91508b9050615685565b8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503392506122f2915050565b5050505050505050505050565b610ed93361132c565b610bef33610ee684615784565b83612401565b60006109cb600080516020615fa483398151915283612c5f565b600080610f11611416565b610f1b8484612c81565b915091505b9250929050565b6060806060610f37600085611a99565b9250925092509193909250565b8051606090806001600160401b03811115610f6157610f616150f9565b604051908082528060200260200182016040528015610f8a578160200160208202803683370190505b509150600080516020615f6483398151915260005b8281101561102d57816000868381518110610fbc57610fbc615858565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160009054906101000a90046001600160a01b031684828151811061100d5761100d615858565b6001600160a01b0390921660209283029190910190910152600101610f9f565b505050919050565b60006107b160025490565b606080606061104d612d76565b925061105883610f44565b915061106383612da1565b9050909192565b6060610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612da192505050565b60006107b1600080516020615fa4833981519152612e8a565b60006109cb82612e94565b60006110e7610b7b600080516020615fc48339815191525490565b600080516020615f2483398151915254611101908461586e565b101592915050565b60007fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600083600f81111561114057611140614e72565b60ff1681526020810191909152604001600020546001600160a01b031690508061117f578160405163409140df60e11b8152600401610bdc9190615885565b919050565b60008061119d600080516020615f448339815191525490565b600080516020615f2483398151915254915091509091565b60606111bf611416565b610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ecc92505050565b60606107b1612d76565b61120e3361132c565b61123d85858585857f0000000000000000000000000000000000000000000000000000000000000000336131b1565b505050505050565b606081806001600160401b03811115611260576112606150f9565b604051908082528060200260200182016040528015611289578160200160208202803683370190505b509150600080516020615f8483398151915260005b82811015611323578160008787848181106112bb576112bb615858565b90506020020160208101906112d09190615365565b6001600160a01b039081168252602082019290925260400160002054855191169085908390811061130357611303615858565b6001600160a01b039092166020928302919091019091015260010161129e565b50505092915050565b61133581612e94565b6001600160601b031660000361136e576000356001600160e01b0319166003604051620f948f60ea1b8152600401610bdc92919061589f565b50565b61138361137d88615784565b82613200565b50600061139761139289615784565b6132ff565b905061140c6113a589615784565b888888886113f8896113b889600061343e565b60405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6114078a6113b88a600161343e565b613477565b5050505050505050565b333014611444576000356001600160e01b0319166040516307337e1960e41b8152600401610bdc91906156f0565b565b606061145283836136dc565b61145b8161191f565b825185518114801561146d5750845181145b611498576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b806001600160401b038111156114b0576114b06150f9565b6040519080825280602002602001820160405280156114d9578160200160208202803683370190505b509250806000036114ea57506117ba565b604080518082019091526000808252602082018190527f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c91600080516020615f8483398151915291600080516020615fa483398151915291600080516020615f64833981519152919081908190815b8981101561173b578d818151811061157357611573615858565b602002602001015194508c818151811061158f5761158f615858565b602002602001015193506115a2856128f8565b6115ab846128f8565b8e81815181106115bd576115bd615858565b60200260200101516001600160601b03166000036115fc576000356001600160e01b031916604051637f11b8a360e11b8152600401610bdc91906156f0565b6116068986612c5f565b8061161657506116168985612c5f565b8061162657506116268786612c5f565b8061163657506116368785612c5f565b158c828151811061164957611649615858565b6020026020010190151590811515815250508b818151811061166d5761166d615858565b602002602001015115611733576116848986612942565b5061168f8785612942565b506001600160a01b03848116600081815260208b90526040902080546001600160a01b0319169288169290921790915582528e518f90829081106116d5576116d5615858565b6020908102919091018101516001600160601b03169083018190526116fa90846156a8565b6001600160a01b038087166000908152602089815260409091208551918601516001600160601b0316600160a01b029190921617905592505b600101611559565b50611754600080516020615fc4833981519152836137e6565b50611773635ebae8a060e01b8d8d604051602001610db29291906158cd565b7f897810999654e525e272b5909785c4d0ceaee1bbf9c87d9091a37558b0423b788b8f8f8f6040516117a894939291906158fb565b60405180910390a15050505050505050505b509392505050565b60006117ce60006137fd565b905060006040518060c001604052808381526020018a8152602001898980806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250505060208083018a905260408084018a9052606090930188905282518b820281810183019094528b8152939450909261187f92611878928d918d9182919085019084908082843760009201919091525060019250611f83915050565b83906138ad565b90506118966002548261399f90919063ffffffff16565b60006118a1826132ff565b6000858152600080516020615ee483398151915260205260409020600181018290556006018c9055905080847f771d78ae9e5fca95a532fb0971d575d0ce9b59d14823c063e08740137e0e0eca846118f887613a40565b878a60405161190a9493929190615a96565b60405180910390a35050505050505050505050565b61192881613b77565b1561136e576000356001600160e01b031916604051630d697db160e11b8152600401610bdc91906156f0565b6000816119608161191f565b600080516020615f6483398151915260005b845181101561102d5781600086838151811061199057611990615858565b6020908102919091018101516001600160a01b03168252810191909152604001600020546119ce90600160a01b90046001600160601b0316856156a8565b9350600101611972565b60006119e661139288615784565b6020808901356000908152600180835260408083208c35845290935291902001549091508114611a55576020808801356000908152600180835260408083208b3584529093529082902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b611a83611a6188615784565b87878787611a74886113b889600061343e565b611407896113b88a600161343e565b50505050505050565b6060600061097983613c16565b60008281526001602090815260408083208484529091528120600481015460058201546060938493849390929091611ad182846156a8565b9050806001600160401b03811115611aeb57611aeb6150f9565b604051908082528060200260200182016040528015611b14578160200160208202803683370190505b509550806001600160401b03811115611b2f57611b2f6150f9565b604051908082528060200260200182016040528015611b7a57816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181611b4d5790505b509450806001600160401b03811115611b9557611b956150f9565b604051908082528060200260200182016040528015611bbe578160200160208202803683370190505b50965060005b83811015611d13576000878281518110611be057611be0615858565b60200260200101906001811115611bf957611bf9614e72565b90816001811115611c0c57611c0c614e72565b90525060008a81526001602090815260408083208c845290915281206004870180546007909201929184908110611c4557611c45615858565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815460ff16815260018201549381019390935260020154908201528651879083908110611ca357611ca3615858565b6020026020010181905250846004018181548110611cc357611cc3615858565b9060005260206000200160009054906101000a90046001600160a01b0316888281518110611cf357611cf3615858565b6001600160a01b0390921660209283029190910190910152600101611bc4565b5060005b82811015611e7657600187611d2c86846156a8565b81518110611d3c57611d3c615858565b60200260200101906001811115611d5557611d55614e72565b90816001811115611d6857611d68614e72565b90525060008a81526001602090815260408083208c845290915281206005870180546007909201929184908110611da157611da1615858565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815460ff168152600182015493810193909352600201549082015286611df686846156a8565b81518110611e0657611e06615858565b6020026020010181905250846005018181548110611e2657611e26615858565b6000918252602090912001546001600160a01b031688611e4686846156a8565b81518110611e5657611e56615858565b6001600160a01b0390921660209283029190910190910152600101611d17565b50505050509250925092565b606081611e8e8161191f565b8251806001600160401b03811115611ea857611ea86150f9565b604051908082528060200260200182016040528015611ed1578160200160208202803683370190505b509250600080516020615f0483398151915260005b82811015611f4457611f1a868281518110611f0357611f03615858565b60200260200101518361292d90919063ffffffff16565b858281518110611f2c57611f2c615858565b91151560209283029190910190910152600101611ee6565b50505050919050565b600083815260016020908152604080832085845282528083206001600160a01b038516845260080190915281205460ff166108c8565b606082516001600160401b03811115611f9e57611f9e6150f9565b604051908082528060200260200182016040528015611fc7578160200160208202803683370190505b50905060005b83518110156120d65760036000858381518110611fec57611fec615858565b6020026020010151600481111561200557612005614e72565b600481111561201657612016614e72565b815260200190815260200160002060009054906101000a90046001600160a01b031682828151811061204a5761204a615858565b60200260200101906001600160a01b031690816001600160a01b0316815250508280156120a2575060006001600160a01b031682828151811061208f5761208f615858565b60200260200101516001600160a01b0316145b156120ce576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b600101611fcd565b5092915050565b600061213b61212c6120f260408a018a615b7d565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525060019250611f83915050565b61213589615bc6565b906138ad565b90506000612148826132ff565b60008080526001602081815285518352600080516020615ee483398151915290526040909120015490915081146121c55760008080526001602081815284518352600080516020615ee4833981519152905260409182902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b60006121d86121d38a615bc6565b613a40565b905061084083898989896121f18a6113b889600061343e565b6114078b6113b88a600161343e565b60608161220c8161191f565b8251806001600160401b03811115612226576122266150f9565b60405190808252806020026020018201604052801561224f578160200160208202803683370190505b5092508060000361226057506122ec565b600080516020615f0483398151915260006314d72edb60e21b815b848110156122e65787818151811061229557612295615858565b602002602001015192506122a8836125f0565b6122b28383613c72565b6122bc8484612942565b8782815181106122ce576122ce615858565b9115156020928302919091019091015260010161227b565b50505050505b50919050565b6122fa614a6c565b8760000361232e576000356001600160e01b03191660004660405163092048d160e11b8152600401610bdc93929190615c90565b6000612339896137fd565b90506040518060e001604052808281526020018a81526020018981526020018881526020018781526020018681526020018581525091506123856002548361399f90919063ffffffff16565b6000612390836132ff565b60008b81526001602081815260408084208785529091529091209081018290556006018a9055905080828b7fa57d40f1496988cf60ab7c9d5ba4ff83647f67d3898d441a3aaf21b651678fd986886040516123ec929190615cb2565b60405180910390a45050979650505050505050565b4682602001511461243a57602082015160405163092048d160e11b8152610bdc916001600160e01b031960003516914690600401615c90565b6000612445836132ff565b60208085015160009081526001808352604080832088518452909352919020015490915081146124b457602080840151600090815260018083526040808320875184529093529082902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b60006124be613e05565b90506000816124cb613e0f565b6124d591906156bb565b6124e09060016156a8565b604080516060810182526000808252602082018190529181019190915290915061140c868685858b866125128e613e19565b613e33565b6000825480156120d657828102915080820483146120d657634e487b7160005260116020526024601cfd5b60005b82518110156125eb57306001600160a01b031682828151811061256a5761256a615858565b60200260200101516001600160a01b0316036125a7576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b6125e38382815181106125bc576125bc615858565b60200260200101518383815181106125d6576125d6615858565b602002602001015161417c565b600101612545565b505050565b806001600160a01b03163b60000361136e57604051630bfc64a360e21b81526001600160a01b0382166004820152602401610bdc565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f81111561265c5761265c614e72565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f81111561269d5761269d614e72565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b600080825460ff1660048111156126e3576126e3614e72565b1480156126f4575042826006015411155b9050801561117f5760018201546040517f58f98006a7f2f253f8ae8f8b7cec9008ca05359633561cd7c22f3005682d4a5590600090a260005b60048301548110156127e05782600801600084600401838154811061275457612754615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff19169055600484018054600786019291908490811061279d5761279d615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff1916815560018181018390556002909101919091550161272d565b5060005b60058301548110156128975782600801600084600501838154811061280b5761280b615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff19169055600584018054600786019291908490811061285457612854615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff191681556001818101839055600290910191909155016127e4565b50815460ff1916825560006001830181905560028301819055600383018190556128c5906004840190614aa9565b6128d3600583016000614aa9565b60006006830155919050565b60606107b1600080516020615fa4833981519152611a8c565b6001600160a01b03811661136e576000356001600160e01b03191660405163104c66df60e31b8152600401610bdc91906156f0565b6000610979836001600160a01b03841661420f565b6000610979836001600160a01b038416614302565b6000612970600080516020615f04833981519152611a8c565b805190915060008190036129845750505050565b6000816001600160401b0381111561299e5761299e6150f9565b6040519080825280602002602001820160405280156129c7578160200160208202803683370190505b5090506000826001600160401b038111156129e4576129e46150f9565b604051908082528060200260200182016040528015612a1757816020015b6060815260200190600190039081612a025790505b50905060008686604051602001612a2f929190615cdc565b6040516020818303038152906040529050600081604051602401612a539190615d0d565b60408051601f198184030181529190526020810180516001600160e01b03166325da93a560e11b179052905060005b85811015612c1757868181518110612a9c57612a9c615858565b60200260200101516001600160a01b031683604051612abb9190615d20565b6000604051808303816000865af19150503d8060008114612af8576040519150601f19603f3d011682016040523d82523d6000602084013e612afd565b606091505b50868381518110612b1057612b10615858565b60200260200101868481518110612b2957612b29615858565b6020026020010182905282151515158152505050848181518110612b4f57612b4f615858565b6020026020010151612c0f57868181518110612b6d57612b6d615858565b60200260200101516001600160a01b031682604051612b8c9190615d20565b6000604051808303816000865af19150503d8060008114612bc9576040519150601f19603f3d011682016040523d82523d6000602084013e612bce565b606091505b50868381518110612be157612be1615858565b60200260200101868481518110612bfa57612bfa615858565b60200260200101829052821515151581525050505b600101612a82565b507fc0b07a27e66788f39cc91405f012f34066b16f31b4bda9438c52f2dae0cc5b6382878686604051612c4d9493929190615d3c565b60405180910390a15050505050505050565b6001600160a01b03811660009081526001830160205260408120541515610979565b60008082841115612cb3576000356001600160e01b0319166040516387f6f09560e01b8152600401610bdc91906156f0565b600080516020615f44833981519152549150612cdb600080516020615f248339815191525490565b9050612cf4600080516020615f44833981519152859055565b612d0b600080516020615f24833981519152849055565b8284612d367f92872d32822c9d44b36a2537d3e0d4c46fc4de1ce154ccfaed560a8a58445f1d614355565b60408051868152602081018690527f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910160405180910390a49250929050565b60606107b17f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c611a8c565b8051606090806001600160401b03811115612dbe57612dbe6150f9565b604051908082528060200260200182016040528015612de7578160200160208202803683370190505b509150600080516020615f6483398151915260005b8281101561102d57816000868381518110612e1957612e19615858565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160149054906101000a90046001600160601b0316848281518110612e6a57612e6a615858565b6001600160601b0390921660209283029190910190910152600101612dfc565b60006109cb825490565b6001600160a01b03166000908152600080516020615f648339815191526020526040902054600160a01b90046001600160601b031690565b606081612ed88161191f565b8251806001600160401b03811115612ef257612ef26150f9565b604051908082528060200260200182016040528015612f1b578160200160208202803683370190505b50925080600003612f2c57506122ec565b60408051808201909152600080825260208201819052600080516020615f84833981519152917f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c91600080516020615fa483398151915291600080516020615f64833981519152919081908190815b89811015613131578c8181518110612fb557612fb5615858565b6020908102919091018101516001600160a01b038082166000908152928c905260409092205490911695509350612feb856128f8565b612ff4846128f8565b6001600160a01b0385811660009081526020888152604091829020825180840190935254808416808452600160a01b9091046001600160601b03169183019190915290935090851614613068576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b6130728785612c5f565b801561308357506130838886612c5f565b8c828151811061309557613095615858565b6020026020010190151590811515815250508b81815181106130b9576130b9615858565b602002602001015115613129576130d0888661292d565b506130db878561292d565b506001600160a01b03808516600090815260208b8152604080832080546001600160a01b0319169055928816825288815291812055820151613126906001600160601b0316846156a8565b92505b600101612f9b565b5061314a600080516020615fc483398151915283614370565b5061316963c48549de60e01b8d8d604051602001610db29291906158cd565b7fdf3dcd7987202f64648f3acdbf12401e3a2bb23e77e19f99826b5475cbb863698b8d60405161319a929190615d89565b60405180910390a150505050505050505050919050565b6131b9614a6c565b6131cb6131c589615bc6565b83614380565b905060006131db6121d38a615bc6565b90506131f482898989896121f18a6113b889600061343e565b50979650505050505050565b602082015160009080820361323b576000356001600160e01b03191660004660405163092048d160e11b8152600401610bdc93929190615c90565b60025461324990859061399f565b6000613254856132ff565b905061325f826137fd565b600083815260016020818152604080842085855290915291829020918801519082018490556006909101559250845183146132bb576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b8083837fa57d40f1496988cf60ab7c9d5ba4ff83647f67d3898d441a3aaf21b651678fd988886040516132ef929190615cb2565b60405180910390a4505092915050565b6080810151606082015160a083015151600092919083906001600160401b0381111561332d5761332d6150f9565b604051908082528060200260200182016040528015613356578160200160208202803683370190505b5060c086015190915060005b82518110156133b5578660a00151818151811061338157613381615858565b6020026020010151805190602001208382815181106133a2576133a2615858565b6020908102919091010152600101613362565b50604080517fd051578048e6ff0bbc9fca3b65a42088dbde10f36ca841de566711087ad9b08a8152875160208083019190915280890151828401529790910151606082015283518702938701939093206080840152835186029386019390932060a0830152805185029085012060c082015281518402919093012060e083015250610100902090565b604080517fd900570327c4c0df8dd6bdd522b7da7e39145dd049d2fd4602276adcd511e3c2815260208101939093528201526060902090565b841580159061348557508483145b6134b0576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b60006134ba613e05565b90506000816134c7613e0f565b6134d191906156bb565b6134dc9060016156a8565b9050600080366000805b898110156136a0578a8a8281811061350057613500615858565b606002919091019350600090508d8d8381811061351f5761351f615858565b90506020020160208101906135349190615dae565b600181111561354557613545614e72565b036135715761356a8961355b6020860186615dda565b85602001358660400135614480565b93506135e8565b60018d8d8381811061358557613585615858565b905060200201602081019061359a9190615dae565b60018111156135ab576135ab614e72565b036135c15761356a8861355b6020860186615dda565b6000356001600160e01b031916604051630612418f60e11b8152600401610bdc91906156f0565b836001600160a01b0316856001600160a01b031610613628576000356001600160e01b031916604051635d3dcd3160e01b8152600401610bdc91906156f0565b839450600061363685613e19565b9050801561369757600192506136858f8f8f8581811061365857613658615858565b905060200201602081019061366d9190615dae565b8a8a8961367f368b90038b018b615df5565b87613e33565b15613697575050505050505050611a83565b506001016134e6565b50806136cd576000356001600160e01b03191660405163726b3acb60e01b8152600401610bdc91906156f0565b50505050505050505050505050565b81518151606091908082016001600160401b038111156136fe576136fe6150f9565b604051908082528060200260200182016040528015613727578160200160208202803683370190505b50925060005b828110156137815785818151811061374757613747615858565b602002602001015184828151811061376157613761615858565b6001600160a01b039092166020928302919091019091015260010161372d565b60005b828110156137dc5785818151811061379e5761379e615858565b60200260200101518583815181106137b8576137b8615858565b6001600160a01b039092166020928302919091019091015260019182019101613784565b5050505092915050565b60006109cb836137f685856144a8565b9250829055565b6000818152602081905260408120549081900361382c5750600090815260208190526040902060019081905590565b600082815260016020908152604080832084845290915281209061384f826126ca565b9050806138a6576000825460ff16600481111561386e5761386e614e72565b0361388c5760405163757a436360e01b815260040160405180910390fd5b600084815260208190526040902080546001019081905592505b5050919050565b6138b5614a6c565b82518152602080840151604080840191909152600091830191909152830151516001600160401b038111156138ec576138ec6150f9565b604051908082528060200260200182016040528015613915578160200160208202803683370190505b5060608083019190915283015160808083019190915283015160a08083019190915283015160c082015260005b8360400151518110156120d65782818151811061396157613961615858565b60200260200101518260600151828151811061397f5761397f615858565b6001600160a01b0390921660209283029190910190910152600101613942565b60008260600151511180156139bd5750816080015151826060015151145b80156139d257508160a0015151826060015151145b80156139e757508160c0015151826060015151145b613a12576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b613a1c81426156a8565b82604001511115610bef5760405163ad89be9d60e01b815260040160405180910390fd5b60608101516040820151608083015151600092919083906001600160401b03811115613a6e57613a6e6150f9565b604051908082528060200260200182016040528015613a97578160200160208202803683370190505b5060a086015190915060005b8251811015613af65786608001518181518110613ac257613ac2615858565b602002602001015180519060200120838281518110613ae357613ae3615858565b6020908102919091010152600101613aa3565b50604080517f1463f426c05aff2c1a7a0957a71c9898bc8b47142540538e79ee25ee911413508152875160208083019190915297880151918101919091528351870293870193909320606084015283518602938601939093206080830152805185029085012060a082015281518402919093012060c08301525060e0902090565b60008151600003613b8a57506000919050565b60005b6001835103811015613c0d57600181015b8351811015613c0457838181518110613bb957613bb9615858565b60200260200101516001600160a01b0316848381518110613bdc57613bdc615858565b60200260200101516001600160a01b031603613bfc575060019392505050565b600101613b9e565b50600101613b8d565b50600092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613c6657602002820191906000526020600020905b815481526020019060010190808311613c52575b50505050509050919050565b600081604051602401613c8591906156f0565b60408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525190915060009081906001600160a01b03861690613cce908590615d20565b600060405180830381855afa9150503d8060008114613d09576040519150601f19603f3d011682016040523d82523d6000602084013e613d0e565b606091505b509150915081613dd057846001600160a01b031683604051602401613d339190615d0d565b60408051601f198184030181529181526020820180516001600160e01b03166325da93a560e11b17905251613d689190615d20565b600060405180830381855afa9150503d8060008114613da3576040519150601f19603f3d011682016040523d82523d6000602084013e613da8565b606091505b50909250905081613dd057838560405163069d427960e11b8152600401610bdc929190615e55565b80806020019051810190613de49190615e78565b6106df57838560405163069d427960e11b8152600401610bdc929190615e55565b60006107b1610b32565b60006107b1610799565b6000613e2482612e94565b6001600160601b031692915050565b60208088015188516000828152600184526040808220838352909452928320613e5b816126ca565b15613e6c576001935050505061078e565b6020808c015160009081529081905260409020548214613ead576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b6000815460ff166004811115613ec557613ec5614e72565b14613ee3576040516322de95ff60e21b815260040160405180910390fd5b6001600160a01b038716600090815260088201602052604090205460ff1615613f2a5760405163025fd59560e41b81526001600160a01b0388166004820152602401610bdc565b6001600160a01b03871660009081526008820160209081526040909120805460ff19166001179055860151151580613f655750604086015115155b80613f735750855160ff1615155b15613fba576001600160a01b03871660009081526007820160209081526040918290208851815460ff191660ff909116178155908801516001820155908701516002909101555b866001600160a01b031681600101547f1203f9e81c814a35f5f4cc24087b2a24c6fb7986a9f1406b68a9484882c93a238c88604051613ffa929190615e9a565b60405180910390a3600080808c600181111561401857614018614e72565b0361406d576004830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b038c161790556003840180548992906140609084906156a8565b92505081905591506140d2565b60018c600181111561408157614081614e72565b036135c1576005830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b038c161790556002840180548992906140c99084906156a8565b92505081905590505b8a821061412657825460ff19166001908117845580840154604051919750907f5c819725ea53655a3b898f3df59b66489761935454e9212ca1e5ebd759953d0b90600090a2614121838e6144c7565b61416c565b89811061416c57825460ff19166003178355600180840154604051919750907f55295d4ce992922fa2e5ffbf3a3dcdb367de0a15e125ace083456017fd22060f90600090a25b5050505050979650505050505050565b806003600084600481111561419357614193614e72565b60048111156141a4576141a4614e72565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b0392831617905581168260048111156141e2576141e2614e72565b6040517f356c8c57e9e84b99b1cb58b13c985b2c979f78cbdf4d0fa70fe2a98bb09a099d90600090a35050565b600081815260018301602052604081205480156142f85760006142336001836156bb565b8554909150600090614247906001906156bb565b90508181146142ac57600086600001828154811061426757614267615858565b906000526020600020015490508087600001848154811061428a5761428a615858565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142bd576142bd615ea8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109cb565b60009150506109cb565b6000818152600183016020526040812054614349575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109cb565b5060006109cb565b9055565b600061435f825490565b905061117f826143518360016156a8565b60006109cb836137f68585614534565b614388614a6c565b6143a161439a84604001516001611f83565b84906138ad565b90506143b86002548261399f90919063ffffffff16565b60006143c3826132ff565b905060006143d160006137fd565b6000818152600080516020615ee4833981519152602090815260409091209087015160018201859055600690910155905082518114614431576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b81817f771d78ae9e5fca95a532fb0971d575d0ce9b59d14823c063e08740137e0e0eca8561445e89613a40565b89896040516144709493929190615a96565b60405180910390a3505092915050565b60008060006144918787878761455d565b9150915061449e8161464a565b5095945050505050565b81548101818110156109cb57634e487b7160005260116020526024601cfd5b6144d081614800565b15610bef57815460ff191660021782556000806144ec8361481a565b9150915083600101547fe134987599ae266ec90edeff1b26125b287dbb57b10822649432d1bb26537fba8383604051614526929190615ebe565b60405180910390a250505050565b600082548281101561455357634e487b7160005260116020526024601cfd5b9190910392915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156145945750600090506003614641565b8460ff16601b141580156145ac57508460ff16601c14155b156145bd5750600090506004614641565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614611573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661463a57600060019250925050614641565b9150600090505b94509492505050565b600081600481111561465e5761465e614e72565b036146665750565b600181600481111561467a5761467a614e72565b036146c75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bdc565b60028160048111156146db576146db614e72565b036147285760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bdc565b600381600481111561473c5761473c614e72565b036147945760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bdc565b60048160048111156147a8576147a8614e72565b0361136e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bdc565b60008160200151600014806109cb57505060200151461490565b60608061482683614800565b61485857602083015160405163092048d160e11b8152610bdc916001600160e01b031960003516914690600401615c90565b8260600151516001600160401b03811115614875576148756150f9565b60405190808252806020026020018201604052801561489e578160200160208202803683370190505b5091508260600151516001600160401b038111156148be576148be6150f9565b6040519080825280602002602001820160405280156148f157816020015b60608152602001906001900390816148dc5790505b50905060005b836060015151811015614a66578360c00151818151811061491a5761491a615858565b60200260200101515a1161494d57614931846132ff565b6040516307aec4ab60e21b8152600401610bdc91815260200190565b8360600151818151811061496357614963615858565b60200260200101516001600160a01b03168460800151828151811061498a5761498a615858565b60200260200101518560c0015183815181106149a8576149a8615858565b6020026020010151908660a0015184815181106149c7576149c7615858565b60200260200101516040516149dc9190615d20565b600060405180830381858888f193505050503d8060008114614a1a576040519150601f19603f3d011682016040523d82523d6000602084013e614a1f565b606091505b50848381518110614a3257614a32615858565b60200260200101848481518110614a4b57614a4b615858565b602090810291909101019190915290151590526001016148f7565b50915091565b6040518060e00160405280600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b508054600082559060005260206000209081019061136e91905b80821115614ad75760008155600101614ac3565b5090565b600060e082840312156122ec57600080fd5b60008083601f840112614aff57600080fd5b5081356001600160401b03811115614b1657600080fd5b6020830191508360208260051b8501011115610f2057600080fd5b60008083601f840112614b4357600080fd5b5081356001600160401b03811115614b5a57600080fd5b602083019150836020606083028501011115610f2057600080fd5b600080600080600060608688031215614b8d57600080fd5b85356001600160401b0380821115614ba457600080fd5b614bb089838a01614adb565b96506020880135915080821115614bc657600080fd5b614bd289838a01614aed565b90965094506040880135915080821115614beb57600080fd5b50614bf888828901614b31565b969995985093965092949392505050565b60008060008060008060608789031215614c2257600080fd5b86356001600160401b0380821115614c3957600080fd5b614c458a838b01614aed565b90985096506020890135915080821115614c5e57600080fd5b614c6a8a838b01614aed565b90965094506040890135915080821115614c8357600080fd5b50614c9089828a01614aed565b979a9699509497509295939492505050565b60008151808452602080850194506020840160005b83811015614cd5578151151587529582019590820190600101614cb7565b509495945050505050565b6020815260006109796020830184614ca2565b600080600080600080600080600060a08a8c031215614d1157600080fd5b8935985060208a01356001600160401b0380821115614d2f57600080fd5b614d3b8d838e01614aed565b909a50985060408c0135915080821115614d5457600080fd5b614d608d838e01614aed565b909850965060608c0135915080821115614d7957600080fd5b614d858d838e01614aed565b909650945060808c0135915080821115614d9e57600080fd5b50614dab8c828d01614aed565b915080935050809150509295985092959850929598565b60008060208385031215614dd557600080fd5b82356001600160401b03811115614deb57600080fd5b614df785828601614aed565b90969095509350505050565b60008151808452602080850194506020840160005b83811015614cd55781516001600160a01b031687529582019590820190600101614e18565b6020815260006109796020830184614e03565b60008060408385031215614e6357600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60028110614e9857614e98614e72565b9052565b60006060808352614eb06060840187614e03565b83810360208581019190915286518083528782019282019060005b81811015614eee57614ede838651614e88565b9383019391830191600101614ecb565b50506040925085810360408701528087518083528383019150838901925060005b81811015614f3f578351805160ff1684528581015186850152860151868401529284019291860191600101614f0f565b50909a9950505050505050505050565b80356001600160a01b038116811461117f57600080fd5b600080600060608486031215614f7b57600080fd5b8335925060208401359150614f9260408501614f4f565b90509250925092565b600080600080600060608688031215614fb357600080fd5b85356001600160401b0380821115614fca57600080fd5b9087019060c0828a031215614fde57600080fd5b90955060208701359080821115614bc657600080fd5b60006020828403121561500657600080fd5b5035919050565b80356002811061117f57600080fd5b60008060008060008060008060008060c08b8d03121561503b57600080fd5b8a35995060208b01356001600160401b038082111561505957600080fd5b6150658e838f01614aed565b909b50995060408d013591508082111561507e57600080fd5b61508a8e838f01614aed565b909950975060608d01359150808211156150a357600080fd5b6150af8e838f01614aed565b909750955060808d01359150808211156150c857600080fd5b506150d58d828e01614aed565b90945092506150e8905060a08c0161500d565b90509295989b9194979a5092959850565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715615131576151316150f9565b60405290565b60405160c081016001600160401b0381118282101715615131576151316150f9565b604051601f8201601f191681016001600160401b0381118282101715615181576151816150f9565b604052919050565b60006001600160401b038211156151a2576151a26150f9565b5060051b60200190565b600082601f8301126151bd57600080fd5b813560206151d26151cd83615189565b615159565b80838252602082019150600560208560051b8801019450878511156151f657600080fd5b602087015b8581101561521f5780358281106152125760008081fd5b84529284019284016151fb565b5090979650505050505050565b600082601f83011261523d57600080fd5b8135602061524d6151cd83615189565b8083825260208201915060208460051b87010193508684111561526f57600080fd5b602086015b848110156152925761528581614f4f565b8352918301918301615274565b509695505050505050565b600080604083850312156152b057600080fd5b82356001600160401b03808211156152c757600080fd5b6152d3868387016151ac565b935060208501359150808211156152e957600080fd5b506152f68582860161522c565b9150509250929050565b6000806040838503121561531357600080fd5b8235915061532360208401614f4f565b90509250929050565b80356010811061117f57600080fd5b6000806040838503121561534e57600080fd5b6153578361532c565b915061532360208401614f4f565b60006020828403121561537757600080fd5b61097982614f4f565b60008060008060008060008060008060c08b8d03121561539f57600080fd5b8a35995060208b0135985060408b01356001600160401b03808211156153c457600080fd5b6153d08e838f01614aed565b909a50985060608d01359150808211156153e957600080fd5b6153f58e838f01614aed565b909850965060808d013591508082111561540e57600080fd5b61541a8e838f01614aed565b909650945060a08d013591508082111561543357600080fd5b506154408d828e01614aed565b915080935050809150509295989b9194979a5092959850565b6000806040838503121561546c57600080fd5b82356001600160401b0381111561548257600080fd5b61548e85828601614adb565b9250506153236020840161500d565b6005811061136e5761136e614e72565b60a081016154ba8761549d565b95815260208101949094526040840192909252606083015260809091015290565b6000602082840312156154ed57600080fd5b81356001600160401b0381111561550357600080fd5b6108c88482850161522c565b60008151808452602080850194506020840160005b83811015614cd55781516001600160601b031687529582019590820190600101615524565b60608152600061555c6060830186614e03565b828103602084015261556e8186614e03565b90508281036040840152615582818561550f565b9695505050505050565b602081526000610979602083018461550f565b6000602082840312156155b157600080fd5b6109798261532c565b60006155c86151cd84615189565b8381529050602080820190600585901b8401868111156155e757600080fd5b845b8181101561567a5780356001600160401b03808211156156095760008081fd5b8188019150601f8a8184011261561f5760008081fd5b823582811115615631576156316150f9565b615642818301601f19168801615159565b92508083528b8782860101111561565b57600091508182fd5b80878501888501376000908301870152508552509282019282016155e9565b505050509392505050565b60006109793684846155ba565b634e487b7160e01b600052601160045260246000fd5b808201808211156109cb576109cb615692565b818103818111156109cb576109cb615692565b6000826156eb57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b031991909116815260200190565b600082601f83011261571657600080fd5b813560206157266151cd83615189565b8083825260208201915060208460051b87010193508684111561574857600080fd5b602086015b84811015615292578035835291830191830161574d565b600082601f83011261577557600080fd5b610979838335602085016155ba565b600060e0823603121561579657600080fd5b61579e61510f565b82358152602083013560208201526040830135604082015260608301356001600160401b03808211156157d057600080fd5b6157dc3683870161522c565b606084015260808501359150808211156157f557600080fd5b61580136838701615705565b608084015260a085013591508082111561581a57600080fd5b61582636838701615764565b60a084015260c085013591508082111561583f57600080fd5b5061584c36828601615705565b60c08301525092915050565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176109cb576109cb615692565b602081016010831061589957615899614e72565b91905290565b6001600160e01b03198316815260408101600b83106158c0576158c0614e72565b8260208301529392505050565b6040815260006158e06040830185614e03565b82810360208401526158f28185614ca2565b95945050505050565b60808152600061590e6080830187614ca2565b8281036020840152615920818761550f565b905082810360408401526159348186614e03565b9050828103606084015261078e8185614e03565b60008151808452602080850194506020840160005b83811015614cd55781518752958201959082019060010161595d565b60005b8381101561599457818101518382015260200161597c565b50506000910152565b600081518084526159b5816020860160208601615979565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561521f57601f19868403018952615a0483835161599d565b988401989250908301906001016159e8565b8051825260208101516020830152604081015160408301526000606082015160e06060850152615a4960e0850182614e03565b905060808301518482036080860152615a628282615948565b91505060a083015184820360a0860152615a7c82826159c9565b91505060c083015184820360c08601526158f28282615948565b608081526000615aa96080830187615a16565b60208681850152838203604085015260c08201865183528187015182840152604087015160c0604085015281815180845260e0860191508483019350600092505b80831015615b13578351615afd8161549d565b8252928401926001929092019190840190615aea565b50606089015193508481036060860152615b2d8185615948565b935050505060808601518282036080840152615b4982826159c9565b91505060a086015182820360a0840152615b638282615948565b93505050506158f260608301846001600160a01b03169052565b6000808335601e19843603018112615b9457600080fd5b8301803591506001600160401b03821115615bae57600080fd5b6020019150600581901b3603821315610f2057600080fd5b600060c08236031215615bd857600080fd5b615be0615137565b823581526020830135602082015260408301356001600160401b0380821115615c0857600080fd5b615c14368387016151ac565b60408401526060850135915080821115615c2d57600080fd5b615c3936838701615705565b60608401526080850135915080821115615c5257600080fd5b615c5e36838701615764565b608084015260a0850135915080821115615c7757600080fd5b50615c8436828601615705565b60a08301525092915050565b6001600160e01b03199390931683526020830191909152604082015260600190565b604081526000615cc56040830185615a16565b905060018060a01b03831660208301529392505050565b6001600160e01b0319831681528151600090615cff816004850160208701615979565b919091016004019392505050565b602081526000610979602083018461599d565b60008251615d32818460208701615979565b9190910192915050565b608081526000615d4f608083018761599d565b8281036020840152615d618187614e03565b90508281036040840152615d758186614ca2565b9050828103606084015261078e81856159c9565b604081526000615d9c6040830185614ca2565b82810360208401526158f28185614e03565b600060208284031215615dc057600080fd5b6109798261500d565b803560ff8116811461117f57600080fd5b600060208284031215615dec57600080fd5b61097982615dc9565b600060608284031215615e0757600080fd5b604051606081018181106001600160401b0382111715615e2957615e296150f9565b604052615e3583615dc9565b815260208301356020820152604083013560408201528091505092915050565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b600060208284031215615e8a57600080fd5b8151801515811461097957600080fd5b604081016158c08285614e88565b634e487b7160e01b600052603160045260246000fd5b604081526000615ed16040830185614ca2565b82810360208401526158f281856159c956fea6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495da136eb38f8d8e354915fc8a767c0dc81d49de5fb65d5477122a82ddd976240ac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ffc55405a488814eaa0e2a685a0131142785b8d033d311c8c8244e34a7c12ca40f88547008e60f5748911f2e59feb3093b7e4c2e87b2dd69d61f112fcc932de8e38400683eb2cb350596d73644c0c89fe45f108600003457374f4ab3e87b4f3aa3d38c234075fde25875da8a6b7e36b58b86681d483271a99eeeee1d78e258a24d6924fe71b0c8b61aea02ca498b5f53b29bd95726278b1fe4eb791bb24a42644ca26469706673582212202b9889dbcffa51841f7d0004a5bbec4f7d87e2f76d85649d246727a9563eac8f64736f6c634300081700335da136eb38f8d8e354915fc8a767c0dc81d49de5fb65d5477122a82ddd976240c55405a488814eaa0e2a685a0131142785b8d033d311c8c8244e34a7c12ca40f92872d32822c9d44b36a2537d3e0d4c46fc4de1ce154ccfaed560a8a58445f1d + │ ├─ [8446] → new (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]@0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3 + │ │ └─ ← 0 bytes of code + │ └─ ← revert: StdCheats deployCode(string,bytes): Deployment failed. + └─ ← revert: StdCheats deployCode(string,bytes): Deployment failed. + +Test result: FAILED. 0 passed; 1 failed; 0 skipped; finished in 310.13ms + +Ran 1 test suites: 0 tests passed, 1 failed, 0 skipped (1 total tests) + +Failing tests: +Encountered 1 failing test in test/bridge/integration/Base.t.sol:Base_Integration +[FAIL. Reason: setup failed: revert: StdCheats deployCode(string,bytes): Deployment failed.] setUp() (gas: 0) + +Encountered a total of 1 failing tests, 0 tests succeeded diff --git a/remappings.txt b/remappings.txt index 90474459..4870f8f5 100644 --- a/remappings.txt +++ b/remappings.txt @@ -4,6 +4,7 @@ forge-std/=lib/forge-std/src/ hardhat/=node_modules/hardhat/ @ronin/contracts/=src/ @ronin/test/=test/ +@ronin/script=script/ @prb/test/=lib/prb-test/src/ @prb/math/=lib/prb-math/ solady/=lib/solady/src/ diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index 408133f4..bf9b533c 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -1,12 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; +import { console2 as console } from "forge-std/console2.sol"; import { BaseGeneralConfig } from "foundry-deployment-kit/BaseGeneralConfig.sol"; import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol"; import { Contract } from "./utils/Contract.sol"; import { Network } from "./utils/Network.sol"; +import { Utils } from "./utils/Utils.sol"; -contract GeneralConfig is BaseGeneralConfig { +contract GeneralConfig is BaseGeneralConfig, Utils { constructor() BaseGeneralConfig("", "deployments/") { } function _setUpNetworks() internal virtual override { @@ -51,6 +53,47 @@ contract GeneralConfig is BaseGeneralConfig { _contractNameMap[Contract.AXS.key()] = "MockERC20"; _contractNameMap[Contract.SLP.key()] = "MockERC20"; _contractNameMap[Contract.USDC.key()] = "MockERC20"; + + if (getCurrentNetwork() == DefaultNetwork.Local.key()) { + address deployer = getSender(); + + // ronin bridge contracts + setAddress(DefaultNetwork.Local.key(), Contract.RoninGatewayV3.key(), vm.computeCreateAddress(deployer, 4)); + setAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key(), vm.computeCreateAddress(deployer, 5)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key(), vm.computeCreateAddress(deployer, 7)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key(), vm.computeCreateAddress(deployer, 9)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key(), vm.computeCreateAddress(deployer, 11)); + + //mainchain bridge contracts + setAddress(DefaultNetwork.Local.key(), Contract.MainchainGatewayV3.key(), vm.computeCreateAddress(deployer, 13)); + setAddress( + DefaultNetwork.Local.key(), Contract.MainchainBridgeManager.key(), vm.computeCreateAddress(deployer, 14) + ); + + // ronin tokens + setAddress(DefaultNetwork.Local.key(), Contract.WETH.key(), vm.computeCreateAddress(deployer, 15)); + setAddress(DefaultNetwork.Local.key(), Contract.AXS.key(), vm.computeCreateAddress(deployer, 16)); + setAddress(DefaultNetwork.Local.key(), Contract.SLP.key(), vm.computeCreateAddress(deployer, 17)); + setAddress(DefaultNetwork.Local.key(), Contract.USDC.key(), vm.computeCreateAddress(deployer, 18)); + + console.log("Deployer", deployer); + console.log(" > roninGateway", getAddress(DefaultNetwork.Local.key(), Contract.RoninGatewayV3.key())); + console.log(" > mainchainGateway", getAddress(DefaultNetwork.Local.key(), Contract.MainchainGatewayV3.key())); + console.log(" > bridgeTrackingContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key())); + console.log(" > bridgeSlashContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key())); + console.log(" > bridgeRewardContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key())); + console.log( + " > roninBridgeManagerContract", getAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key()) + ); + console.log( + " > mainchainBridgeManagerContract", + getAddress(DefaultNetwork.Local.key(), Contract.MainchainBridgeManager.key()) + ); + console.log(" > WETH", getAddress(DefaultNetwork.Local.key(), Contract.WETH.key())); + console.log(" > AXS", getAddress(DefaultNetwork.Local.key(), Contract.AXS.key())); + console.log(" > SLP", getAddress(DefaultNetwork.Local.key(), Contract.SLP.key())); + console.log(" > USDC", getAddress(DefaultNetwork.Local.key(), Contract.USDC.key())); + } } function _mapContractName(Contract contractEnum) internal { diff --git a/script/Migration.s.sol b/script/Migration.s.sol index 33b487fc..4bf4f10b 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -6,8 +6,13 @@ import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol" import { GeneralConfig } from "./GeneralConfig.sol"; import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; import { Network } from "./utils/Network.sol"; +import { Utils } from "./utils/Utils.sol"; +import { Contract } from "./utils/Contract.sol"; -contract Migration is BaseMigration { +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; + +contract Migration is BaseMigration, Utils { ISharedArgument public constant config = ISharedArgument(address(CONFIG)); function _configByteCode() internal virtual override returns (bytes memory) { @@ -22,11 +27,157 @@ contract Migration is BaseMigration { } else if (network() == DefaultNetwork.RoninTestnet.key()) { // Undefined } else if (network() == DefaultNetwork.Local.key()) { + uint256 num = 6; + address[] memory operatorAddrs = new address[](num); + address[] memory governorAddrs = new address[](num); + uint256[] memory operatorPKs = new uint256[](num); + uint256[] memory governorPKs = new uint256[](num); + uint96[] memory voteWeights = new uint96[](num); + for (uint256 i; i < num; i++) { + (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); + (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); + operatorAddrs[i] = addrOperator; + governorAddrs[i] = addrGovernor; + operatorPKs[i] = pkOperator; + governorPKs[i] = pkGovernor; + voteWeights[i] = 100; + } + + address governanceAdmin = makeAddr("governance-admin"); + address validatorSetContract = makeAddr("validator-set-contract"); + Token.Standard[] memory standards = new Token.Standard[](1); + standards[0] = Token.Standard.ERC20; + + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](4); + address[] memory targets = new address[](4); + + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = loadContract(Contract.RoninGatewayV3.key()); + + options[1] = GlobalProposal.TargetOption.BridgeReward; + targets[1] = loadContract(Contract.BridgeReward.key()); + + options[2] = GlobalProposal.TargetOption.BridgeSlash; + targets[2] = loadContract(Contract.BridgeSlash.key()); + + options[3] = GlobalProposal.TargetOption.BridgeTracking; + targets[3] = loadContract(Contract.BridgeTracking.key()); + + // test param.test.proxyAdmin = makeAddr("proxy-admin"); + param.test.operatorPKs = operatorPKs; + param.test.governorPKs = governorPKs; + + // Bridge rewards + param.bridgeReward.bridgeManagerContract = loadContract(Contract.RoninBridgeManager.key()); + param.bridgeReward.bridgeTrackingContract = loadContract(Contract.BridgeTracking.key()); + param.bridgeReward.bridgeSlashContract = loadContract(Contract.BridgeSlash.key()); + param.bridgeReward.validatorSetContract = validatorSetContract; + param.bridgeReward.dposGA = governanceAdmin; + param.bridgeReward.rewardPerPeriod = 5_000; + + // Bridge Slash + param.bridgeSlash.validatorContract = validatorSetContract; + param.bridgeSlash.bridgeManagerContract = loadContract(Contract.RoninBridgeManager.key()); + param.bridgeSlash.bridgeTrackingContract = loadContract(Contract.BridgeTracking.key()); + param.bridgeSlash.dposGA = governanceAdmin; + + // Bridge Tracking + param.bridgeTracking.bridgeContract = loadContract(Contract.RoninGatewayV3.key()); + param.bridgeTracking.validatorContract = validatorSetContract; + + // Ronin Bridge Manager + param.roninBridgeManager.num = 2; + param.roninBridgeManager.denom = 4; + param.roninBridgeManager.roninChainId = 0; + param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days + param.roninBridgeManager.bridgeContract = loadContract(Contract.RoninGatewayV3.key()); + param.roninBridgeManager.callbackRegisters = wrapAddress(loadContract(Contract.BridgeSlash.key())); + param.roninBridgeManager.bridgeOperators = operatorAddrs; + param.roninBridgeManager.governors = governorAddrs; + param.roninBridgeManager.voteWeights = voteWeights; + param.roninBridgeManager.targetOptions = options; + param.roninBridgeManager.targets = targets; + + // Ronin Gateway V3 + param.roninGatewayV3.roleSetter = address(0); + param.roninGatewayV3.numerator = 3; + param.roninGatewayV3.denominator = 6; + param.roninGatewayV3.trustedNumerator = 2; + param.roninGatewayV3.trustedDenominator = 3; + param.roninGatewayV3.withdrawalMigrators = getEmptyAddressArray(); + param.roninGatewayV3.packedAddresses[0] = wrapAddress(address(0)); + param.roninGatewayV3.packedAddresses[1] = wrapAddress(address(0)); + param.roninGatewayV3.packedNumbers[0] = wrapUint(1); + param.roninGatewayV3.packedNumbers[1] = wrapUint(0); + param.roninGatewayV3.standards = standards; + + // Mainchain Bridge Manager + delete options; + delete targets; + + options = new GlobalProposal.TargetOption[](1); + targets = new address[](1); + + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = loadContract(Contract.MainchainGatewayV3.key()); + + param.mainchainBridgeManager.num = 70; + param.mainchainBridgeManager.denom = 100; + param.mainchainBridgeManager.roninChainId = block.chainid; + param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days + param.mainchainBridgeManager.bridgeContract = loadContract(Contract.MainchainGatewayV3.key()); + param.mainchainBridgeManager.callbackRegisters = getEmptyAddressArray(); + param.mainchainBridgeManager.bridgeOperators = getEmptyAddressArray(); + param.mainchainBridgeManager.governors = getEmptyAddressArray(); + param.mainchainBridgeManager.voteWeights = getEmptyUint96Array(); + param.mainchainBridgeManager.targetOptions = options; + param.mainchainBridgeManager.targets = targets; + + // Mainchain Gateway V3 + delete standards; + standards = new Token.Standard[](2); + + standards[0] = Token.Standard.ERC20; + standards[1] = Token.Standard.ERC20; + + param.mainchainGatewayV3.roleSetter = address(0); + param.mainchainGatewayV3.roninChainId = 0; + param.mainchainGatewayV3.numerator = 1; + param.mainchainGatewayV3.highTierVWNumerator = 10; + param.mainchainGatewayV3.denominator = 10; + param.mainchainGatewayV3.addresses[0] = + wrapAddress(loadContract(Contract.WETH.key()), loadContract(Contract.USDC.key())); // mainchain tokens + param.mainchainGatewayV3.addresses[1] = + wrapAddress(loadContract(Contract.WETH.key()), loadContract(Contract.USDC.key())); // ronin tokens + param.mainchainGatewayV3.addresses[2] = getEmptyAddressArray(); //withdrawalUnlockers + param.mainchainGatewayV3.thresholds[0] = wrapUint(10, 0); // highTierThreshold + param.mainchainGatewayV3.thresholds[1] = wrapUint(20, 0); // lockedThreshold + param.mainchainGatewayV3.thresholds[2] = wrapUint(100_000, 0); // unlockFeePercentages + param.mainchainGatewayV3.thresholds[3] = wrapUint(12, 0); // dailyWithdrawalLimits + param.mainchainGatewayV3.standards = standards; + + // tokens + param.weth.name = "Wrapped WETH"; + param.weth.symbol = "WETH"; + param.wron.name = "Wrapped RON"; + param.wron.symbol = "WRON"; + param.axs.name = "Axie Infinity Shard"; + param.axs.symbol = "AXS"; + param.slp.name = "Smooth Love Potion"; + param.slp.symbol = "SLP"; + param.usdc.name = "USD Coin"; + param.usdc.symbol = "USDC"; } else { revert("Migration: Network Unknown Shared Parameters Unimplemented!"); } rawArgs = abi.encode(param); } + + function _getProxyAdmin() internal virtual override returns (address payable) { + return network() == DefaultNetwork.Local.key() + ? payable(config.sharedArguments().test.proxyAdmin) + : super._getProxyAdmin(); + } } diff --git a/script/contracts/BridgeManagerDeploy.s.sol b/script/contracts/BridgeManagerDeploy.s.sol deleted file mode 100644 index 8b137891..00000000 --- a/script/contracts/BridgeManagerDeploy.s.sol +++ /dev/null @@ -1 +0,0 @@ - diff --git a/script/contracts/BridgeRewardDeploy.s.sol b/script/contracts/BridgeRewardDeploy.s.sol index 8b137891..05d17af5 100644 --- a/script/contracts/BridgeRewardDeploy.s.sol +++ b/script/contracts/BridgeRewardDeploy.s.sol @@ -1 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +import { BridgeTrackingDeploy } from "./BridgeTrackingDeploy.s.sol"; +import { RoninBridgeManagerDeploy } from "./RoninBridgeManagerDeploy.s.sol"; +import { BridgeSlashDeploy } from "./BridgeSlashDeploy.s.sol"; + +contract BridgeRewardDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.BridgeRewardParam memory param = config.sharedArguments().bridgeReward; + + args = abi.encodeCall( + BridgeReward.initialize, + ( + param.bridgeManagerContract, + param.bridgeTrackingContract, + param.bridgeSlashContract, + param.validatorSetContract, + param.dposGA, + param.rewardPerPeriod + ) + ); + } + + function run() public virtual returns (BridgeReward) { + return BridgeReward(_deployProxy(Contract.BridgeReward.key())); + } +} diff --git a/script/contracts/BridgeSlashDeploy.s.sol b/script/contracts/BridgeSlashDeploy.s.sol index 8b137891..c3a101a3 100644 --- a/script/contracts/BridgeSlashDeploy.s.sol +++ b/script/contracts/BridgeSlashDeploy.s.sol @@ -1 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { BridgeSlash } from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +import { BridgeTrackingDeploy } from "./BridgeTrackingDeploy.s.sol"; +import { RoninBridgeManagerDeploy } from "./RoninBridgeManagerDeploy.s.sol"; + +contract BridgeSlashDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.BridgeSlashParam memory param = config.sharedArguments().bridgeSlash; + + args = abi.encodeCall( + BridgeSlash.initialize, + (param.validatorContract, param.bridgeManagerContract, param.bridgeTrackingContract, param.dposGA) + ); + } + + function run() public virtual returns (BridgeSlash) { + return BridgeSlash(_deployProxy(Contract.BridgeSlash.key())); + } +} diff --git a/script/contracts/BridgeTrackingDeploy.s.sol b/script/contracts/BridgeTrackingDeploy.s.sol index 8b137891..022cf154 100644 --- a/script/contracts/BridgeTrackingDeploy.s.sol +++ b/script/contracts/BridgeTrackingDeploy.s.sol @@ -1 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { BridgeTracking } from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +import { RoninGatewayV3Deploy } from "./RoninGatewayV3Deploy.s.sol"; + +contract BridgeTrackingDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.BridgeTrackingParam memory param = config.sharedArguments().bridgeTracking; + + args = + abi.encodeCall(BridgeTracking.initialize, (param.bridgeContract, param.validatorContract, param.startedAtBlock)); + } + + function run() public virtual returns (BridgeTracking) { + return BridgeTracking(_deployProxy(Contract.BridgeTracking.key())); + } +} diff --git a/script/contracts/MainchainBridgeManagerDeploy.s.sol b/script/contracts/MainchainBridgeManagerDeploy.s.sol index 8b137891..4d2efdac 100644 --- a/script/contracts/MainchainBridgeManagerDeploy.s.sol +++ b/script/contracts/MainchainBridgeManagerDeploy.s.sol @@ -1 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +import { MainchainGatewayV3Deploy } from "./MainchainGatewayV3Deploy.s.sol"; + +contract MainchainBridgeManagerDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.BridgeManagerParam memory param = config.sharedArguments().mainchainBridgeManager; + + args = abi.encode( + param.num, + param.denom, + param.roninChainId, + param.expiryDuration, + param.bridgeContract, + param.callbackRegisters, + param.bridgeOperators, + param.governors, + param.voteWeights, + param.targetOptions, + param.targets + ); + } + + function run() public virtual returns (MainchainBridgeManager) { + return MainchainBridgeManager(_deployImmutable(Contract.MainchainBridgeManager.key())); + } +} diff --git a/script/contracts/MainchainGatewayV3Deploy.s.sol b/script/contracts/MainchainGatewayV3Deploy.s.sol index 820263b7..61412d00 100644 --- a/script/contracts/MainchainGatewayV3Deploy.s.sol +++ b/script/contracts/MainchainGatewayV3Deploy.s.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.19; import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; +import { IWETH } from "src/interfaces/IWETH.sol"; import { Contract } from "../utils/Contract.sol"; import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; import { Migration } from "../Migration.s.sol"; @@ -10,16 +11,19 @@ contract MainchainGatewayV3Deploy is Migration { function _defaultArguments() internal virtual override returns (bytes memory args) { ISharedArgument.MainchainGatewayV3Param memory param = config.sharedArguments().mainchainGatewayV3; - args = abi.encode( - param.roleSetter, - param.wrappedToken, - param.roninChainId, - param.numerator, - param.highTierVWNumerator, - param.denominator, - param.addresses, - param.thresholds, - param.standards + args = abi.encodeCall( + MainchainGatewayV3.initialize, + ( + param.roleSetter, + IWETH(param.wrappedToken), + param.roninChainId, + param.numerator, + param.highTierVWNumerator, + param.denominator, + param.addresses, + param.thresholds, + param.standards + ) ); } diff --git a/script/contracts/MockWrapERC20Deploy.s.sol b/script/contracts/MockWrapERC20Deploy.s.sol deleted file mode 100644 index 8b137891..00000000 --- a/script/contracts/MockWrapERC20Deploy.s.sol +++ /dev/null @@ -1 +0,0 @@ - diff --git a/script/contracts/RoninBridgeManagerDeploy.s.sol b/script/contracts/RoninBridgeManagerDeploy.s.sol index 8b137891..b53aa864 100644 --- a/script/contracts/RoninBridgeManagerDeploy.s.sol +++ b/script/contracts/RoninBridgeManagerDeploy.s.sol @@ -1 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +import { RoninGatewayV3Deploy } from "./RoninGatewayV3Deploy.s.sol"; +import { BridgeSlashDeploy } from "./BridgeSlashDeploy.s.sol"; + +contract RoninBridgeManagerDeploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.BridgeManagerParam memory param = config.sharedArguments().roninBridgeManager; + + args = abi.encode( + param.num, + param.denom, + param.roninChainId, + param.expiryDuration, + param.bridgeContract, + param.callbackRegisters, + param.bridgeOperators, + param.governors, + param.voteWeights, + param.targetOptions, + param.targets + ); + } + + function run() public virtual returns (RoninBridgeManager) { + return RoninBridgeManager(_deployImmutable(Contract.RoninBridgeManager.key())); + } +} diff --git a/script/contracts/RoninGatewayV3Deploy.s.sol b/script/contracts/RoninGatewayV3Deploy.s.sol index 8b137891..c252eafb 100644 --- a/script/contracts/RoninGatewayV3Deploy.s.sol +++ b/script/contracts/RoninGatewayV3Deploy.s.sol @@ -1 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import { RoninGatewayV3 } from "@ronin/contracts/ronin/gateway/RoninGatewayV3.sol"; +import { IWETH } from "src/interfaces/IWETH.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +contract RoninGatewayV3Deploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.RoninGatewayV3Param memory param = config.sharedArguments().roninGatewayV3; + + args = abi.encodeCall( + RoninGatewayV3.initialize, + ( + param.roleSetter, + param.numerator, + param.denominator, + param.trustedNumerator, + param.trustedDenominator, + param.withdrawalMigrators, + param.packedAddresses, + param.packedNumbers, + param.standards + ) + ); + } + + function run() public virtual returns (RoninGatewayV3) { + return RoninGatewayV3(_deployProxy(Contract.RoninGatewayV3.key())); + } +} diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index 03604ac4..7bce9174 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -10,6 +10,7 @@ interface ISharedArgument is IGeneralConfig { uint256 num; uint256 denom; uint256 roninChainId; + uint256 expiryDuration; address bridgeContract; address[] callbackRegisters; address[] bridgeOperators; @@ -88,6 +89,8 @@ interface ISharedArgument is IGeneralConfig { struct UnitTestParam { address proxyAdmin; + uint256[] operatorPKs; + uint256[] governorPKs; } struct SharedParameter { diff --git a/script/utils/Utils.sol b/script/utils/Utils.sol new file mode 100644 index 00000000..91ae0431 --- /dev/null +++ b/script/utils/Utils.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +contract Utils { + function getEmptyAddressArray() internal pure returns (address[] memory arr) { } + function getEmptyUintArray() internal pure returns (uint256[] memory arr) { } + function getEmptyUint96Array() internal pure returns (uint96[] memory arr) { } + + function wrapUint96(uint96 val) internal pure returns (uint96[] memory arr) { + arr = new uint96[](1); + arr[0] = val; + } + + function wrapUint(uint256 val1, uint256 val2) internal pure returns (uint256[] memory arr) { + arr = new uint256[](2); + arr[0] = val1; + arr[1] = val2; + } + + function wrapUint(uint256 val) internal pure returns (uint256[] memory arr) { + arr = new uint256[](1); + arr[0] = val; + } + + function wrapAddress(address val1, address val2, address val3) internal pure returns (address[] memory arr) { + arr = new address[](3); + arr[0] = val1; + arr[1] = val2; + arr[2] = val3; + } + + function wrapAddress(address val1, address val2) internal pure returns (address[] memory arr) { + arr = new address[](2); + arr[0] = val1; + arr[1] = val2; + } + + function wrapAddress(address val) internal pure returns (address[] memory arr) { + arr = new address[](1); + arr[0] = val; + } + + function unwrapAddress(address[] memory arr) internal pure returns (address val) { + val = arr[0]; + } +} diff --git a/src/mocks/token/MockWrapToken.sol b/src/mocks/token/MockWrapToken.sol deleted file mode 100644 index 4c50d87e..00000000 --- a/src/mocks/token/MockWrapToken.sol +++ /dev/null @@ -1,74 +0,0 @@ -// SPDX-License-Identifier: GNU -pragma solidity ^0.8.0; - -/** - * @notice This contract MUST BE used in development only. - */ -contract MockWrapToken { - string public name; - string public symbol; - uint8 public decimals = 18; - - event Approval(address indexed src, address indexed guy, uint256 wad); - event Transfer(address indexed src, address indexed dst, uint256 wad); - event Deposit(address indexed dst, uint256 wad); - event Withdrawal(address indexed src, uint256 wad); - - mapping(address => uint256) public balanceOf; - mapping(address => mapping(address => uint256)) public allowance; - - constructor(string memory name_, string memory symbol_) { - name = name_; - symbol = symbol_; - } - - receive() external payable { - deposit(); - } - - fallback() external payable { - deposit(); - } - - function deposit() public payable { - balanceOf[msg.sender] += msg.value; - emit Deposit(msg.sender, msg.value); - } - - function withdraw(uint256 wad) public { - require(balanceOf[msg.sender] >= wad); - balanceOf[msg.sender] -= wad; - payable(msg.sender).transfer(wad); - emit Withdrawal(msg.sender, wad); - } - - function totalSupply() public view returns (uint256) { - return address(this).balance; - } - - function approve(address guy, uint256 wad) public returns (bool) { - allowance[msg.sender][guy] = wad; - emit Approval(msg.sender, guy, wad); - return true; - } - - function transfer(address dst, uint256 wad) public returns (bool) { - return transferFrom(msg.sender, dst, wad); - } - - function transferFrom(address src, address dst, uint256 wad) public returns (bool) { - require(balanceOf[src] >= wad); - - if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) { - require(allowance[src][msg.sender] >= wad); - allowance[src][msg.sender] -= wad; - } - - balanceOf[src] -= wad; - balanceOf[dst] += wad; - - emit Transfer(src, dst, wad); - - return true; - } -} diff --git a/test/bridge/integration/Base.t.sol b/test/bridge/integration/Base.t.sol new file mode 100644 index 00000000..0d0a9123 --- /dev/null +++ b/test/bridge/integration/Base.t.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Base_Test } from "../../Base.t.sol"; +import { LibSharedAddress } from "foundry-deployment-kit/libraries/LibSharedAddress.sol"; +import { ISharedArgument } from "@ronin/script/interfaces/ISharedArgument.sol"; + +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import { RoninGatewayV3 } from "@ronin/contracts/ronin/gateway/RoninGatewayV3.sol"; +import { BridgeTracking } from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; +import { BridgeSlash } from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; +import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; +import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; +import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import { MockERC20 } from "@ronin/contracts/mocks/token/MockERC20.sol"; +import { MockWrappedToken } from "@ronin/contracts/mocks/token/MockWrappedToken.sol"; + +import { RoninBridgeManagerDeploy } from "@ronin/script/contracts/RoninBridgeManagerDeploy.s.sol"; +import { RoninGatewayV3Deploy } from "@ronin/script/contracts/RoninGatewayV3Deploy.s.sol"; +import { BridgeTrackingDeploy } from "@ronin/script/contracts/BridgeTrackingDeploy.s.sol"; +import { BridgeSlashDeploy } from "@ronin/script/contracts/BridgeSlashDeploy.s.sol"; +import { BridgeRewardDeploy } from "@ronin/script/contracts/BridgeRewardDeploy.s.sol"; +import { MainchainGatewayV3Deploy } from "@ronin/script/contracts/MainchainGatewayV3Deploy.s.sol"; +import { MainchainBridgeManagerDeploy } from "@ronin/script/contracts/MainchainBridgeManagerDeploy.s.sol"; +import { WETHDeploy } from "@ronin/script/contracts/token/WETHDeploy.s.sol"; +import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; +import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; +import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; + +contract Base_Integration is Base_Test { + ISharedArgument.SharedParameter _param; + + RoninBridgeManager _roninBridgeManager; + RoninGatewayV3 _roninGatewayV3; + BridgeTracking _bridgeTracking; + BridgeSlash _bridgeSlash; + BridgeReward _bridgeReward; + MainchainGatewayV3 _mainchainGatewayV3; + MainchainBridgeManager _mainchainBridgeManager; + + MockWrappedToken _weth; + MockERC20 _axs; + MockERC20 _slp; + MockERC20 _usdc; + + function setUp() public virtual { + _roninGatewayV3 = new RoninGatewayV3Deploy().run(); + _roninBridgeManager = new RoninBridgeManagerDeploy().run(); + _bridgeTracking = new BridgeTrackingDeploy().run(); + _bridgeSlash = new BridgeSlashDeploy().run(); + _bridgeReward = new BridgeRewardDeploy().run(); + + _mainchainGatewayV3 = new MainchainGatewayV3Deploy().run(); + _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); + + _weth = new WETHDeploy().run(); + _axs = new AXSDeploy().run(); + _slp = new SLPDeploy().run(); + _usdc = new USDCDeploy().run(); + + _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); + } + + function test_() public { } +} From af175eb95de3a8f8881cf51554468189d1041a3a Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 05:34:59 +0700 Subject: [PATCH 28/73] chore: storage layout --- logs/contract-code-sizes.log | 59 +++++++++++-------- logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- ...aseGeneralConfig.sol:BaseGeneralConfig.log | 32 +++++----- .../GeneralConfig.sol:GeneralConfig.log | 20 +++++++ .../MockWrappedToken.sol:MockWrappedToken.log | 5 ++ .../StdAssertions.sol:StdAssertions.log | 4 +- logs/storage/StdChains.sol:StdChains.log | 10 ++-- logs/storage/StdCheats.sol:StdCheats.log | 4 +- logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- .../storage/WalletConfig.sol:WalletConfig.log | 8 ++- 12 files changed, 95 insertions(+), 55 deletions(-) create mode 100644 logs/storage/GeneralConfig.sol:GeneralConfig.log create mode 100644 logs/storage/MockWrappedToken.sol:MockWrappedToken.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 7059e25b..2ab8d854 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -2,58 +2,69 @@ |-------------------------------------------------|-----------|-------------| | Address | 0.086 | 24.49 | | AddressArrayUtils | 0.086 | 24.49 | +| ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | -| BridgeManagerInterface | 0.933 | 23.643 | +| BaseGeneralConfig | 20.129 | 4.447 | +| BridgeManagerInterface | 0.935 | 23.641 | | BridgeOperatorsBallot | 0.166 | 24.41 | -| BridgeReward | 6.031 | 18.545 | -| BridgeSlash | 5.635 | 18.941 | -| BridgeTracking | 6.873 | 17.703 | -| DefaultTestConfig | 3.367 | 21.209 | +| BridgeReward | 6.032 | 18.544 | +| BridgeSlash | 5.639 | 18.937 | +| BridgeTracking | 6.875 | 17.701 | +| DefaultTestConfig | 4.493 | 20.083 | | ECDSA | 0.086 | 24.49 | | ERC1967Proxy | 0.177 | 24.399 | -| ERC20 | 2.172 | 22.404 | +| ERC20 | 2.173 | 22.403 | | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | +| GeneralConfig | 20.129 | 4.447 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | +| JSONParserLib | 0.086 | 24.49 | | LibArrayUtils | 0.086 | 24.49 | +| LibErrorHandler | 0.086 | 24.49 | +| LibProxy | 0.086 | 24.49 | +| LibSharedAddress | 0.086 | 24.49 | +| LibString | 0.086 | 24.49 | | LibTUint256Slot | 0.086 | 24.49 | -| MainchainBridgeManager | 19.332 | 5.244 | -| MainchainGatewayV3 | 18.187 | 6.389 | +| MainchainBridgeManager | 19.361 | 5.215 | +| MainchainGatewayV3 | 18.189 | 6.387 | | Math | 0.086 | 24.49 | -| MockBridge | 1.303 | 23.273 | -| MockBridgeManager | 1.247 | 23.329 | -| MockBridgeReward | 6.77 | 17.806 | -| MockBridgeSlash | 1.447 | 23.129 | -| MockBridgeTracking | 1.969 | 22.607 | -| MockERC20 | 2.441 | 22.135 | -| MockGatewayForTracking | 1.662 | 22.914 | -| MockRoninBridgeManager | 24.579 | -0.003 | -| MockRoninGatewayV3Extended | 20.038 | 4.538 | -| MockTUint256Slot | 2.729 | 21.847 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.15 | 23.426 | +| MockBridge | 1.293 | 23.283 | +| MockBridgeManager | 1.249 | 23.327 | +| MockBridgeReward | 6.771 | 17.805 | +| MockBridgeSlash | 1.388 | 23.188 | +| MockBridgeTracking | 1.897 | 22.679 | +| MockERC20 | 2.442 | 22.134 | +| MockERC721 | 3.827 | 20.749 | +| MockGatewayForTracking | 1.616 | 22.96 | +| MockRoninBridgeManager | 24.601 | -0.025 | +| MockRoninGatewayV3Extended | 20.048 | 4.528 | +| MockTUint256Slot | 2.73 | 21.846 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.115 | 23.461 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | -| MockWrapToken | 1.977 | 22.599 | +| MockWrappedToken | 1.978 | 22.598 | | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | -| RoninBridgeManager | 24.579 | -0.003 | -| RoninGatewayV3 | 19.755 | 4.821 | +| ProxyAdmin | 1.684 | 22.892 | +| RoninBridgeManager | 24.601 | -0.025 | +| RoninGatewayV3 | 19.765 | 4.811 | | SignerUtils | 0.155 | 24.421 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.188 | 22.388 | +| TransparentUpgradeableProxy | 2.068 | 22.508 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | +| Utils | 0.063 | 24.513 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | | safeconsole | 0.086 | 24.49 | -| stdError | 0.591 | 23.985 | +| stdError | 0.592 | 23.984 | | stdJson | 0.086 | 24.49 | | stdMath | 0.086 | 24.49 | | stdStorage | 0.086 | 24.49 | diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 340d50a2..6370ed55 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8f188344..8c099a55 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 3fd0d5a8..8756115b 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log index b5b757ab..8eaddc14 100644 --- a/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log +++ b/logs/storage/BaseGeneralConfig.sol:BaseGeneralConfig.log @@ -1,18 +1,20 @@ lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:stdstore (storage_slot: 3) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envLabel (storage_slot: 10) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_envSender (storage_slot: 11) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_trezorSender (storage_slot: 12) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_walletOption (storage_slot: 12) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_absolutePath (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 14) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractNameMap (storage_slot: 15) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAbsolutePathMap (storage_slot: 16) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrSet (storage_slot: 17) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractAddrMap (storage_slot: 18) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_contractTypeMap (storage_slot: 19) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_deploymentRoot (storage_slot: 20) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_isForkModeEnabled (storage_slot: 21) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkDataMap (storage_slot: 22) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_networkMap (storage_slot: 23) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/BaseGeneralConfig.sol:BaseGeneralConfig:_migrationConfig (storage_slot: 24) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GeneralConfig.sol:GeneralConfig.log b/logs/storage/GeneralConfig.sol:GeneralConfig.log new file mode 100644 index 00000000..464273c8 --- /dev/null +++ b/logs/storage/GeneralConfig.sol:GeneralConfig.log @@ -0,0 +1,20 @@ +script/GeneralConfig.sol:GeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:stdstore (storage_slot: 3) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/GeneralConfig.sol:GeneralConfig:_envLabel (storage_slot: 10) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_envSender (storage_slot: 11) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfig.sol:GeneralConfig:_trezorSender (storage_slot: 12) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfig.sol:GeneralConfig:_walletOption (storage_slot: 12) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_absolutePath (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 14) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractNameMap (storage_slot: 15) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAbsolutePathMap (storage_slot: 16) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAddrSet (storage_slot: 17) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAddrMap (storage_slot: 18) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractTypeMap (storage_slot: 19) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 20) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_isForkModeEnabled (storage_slot: 21) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_networkDataMap (storage_slot: 22) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_networkMap (storage_slot: 23) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_migrationConfig (storage_slot: 24) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockWrappedToken.sol:MockWrappedToken.log b/logs/storage/MockWrappedToken.sol:MockWrappedToken.log new file mode 100644 index 00000000..ed8fcc22 --- /dev/null +++ b/logs/storage/MockWrappedToken.sol:MockWrappedToken.log @@ -0,0 +1,5 @@ +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 982df57d..842900a4 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index 624d7975..e38d8f5e 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index d02383a5..1fdff3d3 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 3e3afc09..372cbe11 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/WalletConfig.sol:WalletConfig.log b/logs/storage/WalletConfig.sol:WalletConfig.log index d3defaba..40a8cc72 100644 --- a/logs/storage/WalletConfig.sol:WalletConfig.log +++ b/logs/storage/WalletConfig.sol:WalletConfig.log @@ -1,3 +1,5 @@ -lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envPk (storage_slot: 0) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envSender (storage_slot: 1) (offset: 0) (type: address) (numberOfBytes: 20) -lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_trezorSender (storage_slot: 2) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envLabel (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_envSender (storage_slot: 8) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_trezorSender (storage_slot: 9) (offset: 0) (type: address) (numberOfBytes: 20) +lib/foundry-deployment-kit/script/configs/WalletConfig.sol:WalletConfig:_walletOption (storage_slot: 9) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) \ No newline at end of file From e42109913e73b08c3c083e2a0181e3b549203466 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 11:21:18 +0700 Subject: [PATCH 29/73] chore: storage layout --- logs/contract-code-sizes.log | 1 + ...nfigExtended.sol:GeneralConfigExtended.log | 32 ++++++++++--------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 2ab8d854..9a03a480 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -18,6 +18,7 @@ | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | | GeneralConfig | 20.129 | 4.447 | +| GeneralConfigExtended | 20.351 | 4.225 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | diff --git a/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log index 04c96ceb..951968c1 100644 --- a/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log +++ b/logs/storage/GeneralConfigExtended.sol:GeneralConfigExtended.log @@ -1,18 +1,20 @@ script/GeneralConfigExtended.sol:GeneralConfigExtended:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) script/GeneralConfigExtended.sol:GeneralConfigExtended:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) script/GeneralConfigExtended.sol:GeneralConfigExtended:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_envPk (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_envSender (storage_slot: 4) (offset: 0) (type: address) (numberOfBytes: 20) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_trezorSender (storage_slot: 5) (offset: 0) (type: address) (numberOfBytes: 20) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_absolutePath (storage_slot: 6) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 7) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractNameMap (storage_slot: 8) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAbsolutePathMap (storage_slot: 9) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrSet (storage_slot: 10) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrMap (storage_slot: 11) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractTypeMap (storage_slot: 12) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_isForkModeEnabled (storage_slot: 14) (offset: 0) (type: bool) (numberOfBytes: 1) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkDataMap (storage_slot: 15) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkMap (storage_slot: 16) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) -script/GeneralConfigExtended.sol:GeneralConfigExtended:_migrationConfig (storage_slot: 17) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file +script/GeneralConfigExtended.sol:GeneralConfigExtended:stdstore (storage_slot: 3) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envLabel (storage_slot: 10) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_envSender (storage_slot: 11) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_trezorSender (storage_slot: 12) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_walletOption (storage_slot: 12) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_absolutePath (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 14) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractNameMap (storage_slot: 15) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAbsolutePathMap (storage_slot: 16) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrSet (storage_slot: 17) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractAddrMap (storage_slot: 18) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_contractTypeMap (storage_slot: 19) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_deploymentRoot (storage_slot: 20) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_isForkModeEnabled (storage_slot: 21) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkDataMap (storage_slot: 22) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_networkMap (storage_slot: 23) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +script/GeneralConfigExtended.sol:GeneralConfigExtended:_migrationConfig (storage_slot: 24) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file From 9498c4525de090b6fa00e9fb9edeb8a063b10669 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 12:03:15 +0700 Subject: [PATCH 30/73] test: reuse deployment scripts in test --- logs/debug.ansi | 1527 ----------------- script/GeneralConfig.sol | 26 +- script/Migration.s.sol | 13 +- .../MainchainBridgeManagerDeploy.s.sol | 1 - .../{Base.t.sol => BaseIntegration.t.sol} | 6 +- .../bridge-manager/BridgeManagerInterface.sol | 32 - .../BridgeManager_IntegrationTest.t.sol | 96 -- .../setConfig.MainchainManager.t.sol | 16 +- .../setConfig.RoninBridgeManager.t.sol | 14 +- test/init-test/DefaultTestConfig.sol | 88 - test/init-test/InitTest.sol | 377 ---- test/init-test/Structs.sol | 210 --- test/utils/Signers.sol | 21 - 13 files changed, 27 insertions(+), 2400 deletions(-) delete mode 100644 logs/debug.ansi rename test/bridge/integration/{Base.t.sol => BaseIntegration.t.sol} (97%) delete mode 100644 test/bridge/integration/bridge-manager/BridgeManagerInterface.sol delete mode 100644 test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol delete mode 100644 test/init-test/DefaultTestConfig.sol delete mode 100644 test/init-test/InitTest.sol delete mode 100644 test/init-test/Structs.sol delete mode 100644 test/utils/Signers.sol diff --git a/logs/debug.ansi b/logs/debug.ansi deleted file mode 100644 index 9a5ebdf4..00000000 --- a/logs/debug.ansi +++ /dev/null @@ -1,1527 +0,0 @@ -Compiling 11 files with 0.8.23 -Solc 0.8.23 finished in 24.97s -Compiler run successful! -2024-01-17T22:15:03.885799Z ERROR forge::runner: setUp failed reason=revert: StdCheats deployCode(string,bytes): Deployment failed. contract=0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496 - -Running 1 test for test/bridge/integration/Base.t.sol:Base_Integration -[FAIL. Reason: setup failed: revert: StdCheats deployCode(string,bytes): Deployment failed.] setUp() (gas: 0) -Logs: - Block Number: 1 | Timestamp: 1 | Gas Price: 0 | Block Gas Limit: 9223372036854775807 - - NetworkConfig: fork mode disabled, no active fork - NetworkConfig: fork mode disabled, no active fork - NetworkConfig: fork mode disabled, no active fork - NetworkConfig: fork mode disabled, no active fork - NetworkConfig: fork mode disabled, no active fork - NetworkConfig: fork mode disabled, no active fork - Deployer 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38 - > roninGateway 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496 - > mainchainGateway 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB - > bridgeTrackingContract 0x50EEf481cae4250d252Ae577A09bF514f224C6C4 - > bridgeSlashContract 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809 - > bridgeRewardContract 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351 - > roninBridgeManagerContract 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3 - > mainchainBridgeManagerContract 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1 - > WETH 0x978e3286EB805934215a88694d80b09aDed68D90 - > AXS 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb - > SLP 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4 - > USDC 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6 - > _deployProxy RoninGatewayV3 ... - > _deployLogic RoninGatewayV3 ... - RoninGatewayV3Logic will be deployed at: address/0x90193c961a926261b756d1e5bb255e67ff9498a1 (nonce: 3) - Skipping artifact generation for: (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1] - - RoninGatewayV3Proxy will be deployed at: address/0xa8452ec99ce0c64f20701db7dd3abdb607c00496 (nonce: 4) - Skipping artifact generation for: (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - - > _deployImmutable RoninBridgeManager ... - -Traces: - [1471827968] Base_Integration::setUp() - ├─ [1451388669] → new @0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f - │ ├─ [0] VM::makePersistent(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761]) - │ │ └─ ← () - │ ├─ [0] VM::allowCheatcodes(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761]) - │ │ └─ ← () - │ ├─ [0] VM::etch(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], 0x6080604052348015630000001257600080fd5b506040805160208082018352600082528251808401909352600c83526b6465706c6f796d656e74732f60a01b9083015290808281600d630000005683826300003b66565b50600e630000006782826300003b66565b5060149150630000007c905082826300003b66565b50630000008963000000c4565b50630000009663000002eb565b63000000a26300000409565b63000000ae630000055c565b63000000bb81630000056d565b5050630000453a565b60405163348051d760e11b815243600482015263000002e99063000002e290600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa158015630000011d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000014991908101906300003d48565b60405163348051d760e11b8152426004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa1580156300000196573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000001c291908101906300003d48565b60405163348051d760e11b81523a6004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa158015630000020f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000023b91908101906300003d48565b60405163348051d760e11b8152456004820152600080516020630000944883398151915290636900a3ae90602401600060405180830381865afa1580156300000288573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000002b491908101906300003d48565b60405160200163000002cb94939291906300003da4565b60408051601f198184030181529190526300000dd5565b6300000e0e565b565b630000034b63000002fe60006300000e60565b630000030c60006300000f2c565b630000031a60006300000f57565b630000032860006300001077565b6300000336600063000011b2565b6300000344600063000012e7565b6300001399565b63000003a4630000035e60016300000e60565b630000036c60016300000f2c565b630000037a60016300000f57565b630000038860016300001077565b6300000396600163000011b2565b6300000344600163000012e7565b63000003fd63000003b760026300000e60565b63000003c560026300000f2c565b63000003d360026300000f57565b63000003e160026300001077565b63000003ef600263000011b2565b6300000344600263000012e7565b63000002e96300001472565b63000004176000630000157d565b600f60006300000428816300001661565b81526020019081526020016000209081630000044691906300003b66565b5063000004556001630000157d565b600f6000630000046760016300001661565b81526020019081526020016000209081630000048591906300003b66565b5063000004c3630000049960016300000f2c565b63000004a760006300001661565b73505d91e8fd2091794b45b27f86c045529fa92cd76300001675565b630000050063000004d660026300000f2c565b63000004e460006300001661565b73a3e7d085e65cb0b916f6717da876b7be5cc92f036300001675565b630000053d630000051360026300000f2c565b630000052160016300001661565b73ca11bde05977b3631167028862be2a173976ca116300001675565b6300000550630000051360016300000f2c565b63000002e963000017b8565b63000002e96001600160e01b038116565b60405163130d191f60e11b815260609060008051602063000094488339815191529063261a323e9063000005a79085906004016300003ed1565b6020604051808303816000875af192505050801563000005e8575060408051601f3d908101601f1916820190925263000005e5918101906300003efa565b60015b63000006cb57604051630625e2cf60e51b815260008051602063000094488339815191529063c4bc59e09063000006259085906004016300003ed1565b600060405180830381865afa925050508015630000066957506040513d6000823e601f3d908101601f19168201604052630000066691908101906300003f1b565b60015b63000006c25763000006be6040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b5050565b90506300000728565b8063000007265763000007216040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b505050565b505b604051630625e2cf60e51b815260008051602063000094488339815191529063c4bc59e090630000075f9085906004016300003ed1565b600060405180830381865afa92505050801563000007a357506040513d6000823e601f3d908101601f1916820160405263000007a091908101906300003f1b565b60015b63000007f85763000006be6040518060400160405280600f81526020016e21b7b73a3930b1ba21b7b73334b39d60891b81525060405180606001604052806023815260200163000094ab60239139630000224b565b905060005b8151811015630000072157600060008051602063000094ee83398151915260001c6001600160a01b031663c4bc59e0848481518110630000084457630000084463000040ab565b6020026020010151602001516040518263ffffffff1660e01b8152600401630000087091906300003ed1565b600060405180830381865afa158015630000088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000008bb91908101906300003f1b565b9050600060008051602063000094ee83398151915260001c6001600160a01b031663fa91454d60008051602063000094ee83398151915260001c6001600160a01b03166360f9bb11878781518110630000091b57630000091b63000040ab565b602002602001015160200151604051602001630000093b919063000040c1565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401630000096a91906300003ed1565b600060405180830381865afa1580156300000989573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000009b591908101906300003d48565b6040518263ffffffff1660e01b815260040163000009d591906300003ed1565b602060405180830381865afa15801563000009f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000a1c919063000040f2565b905060005b82518110156300000dc55760008382815181106300000a46576300000a4663000040ab565b60200260200101516020015190506300000a8860405180604001604052806005815260200164173539b7b760d91b81525082630000229c60201b90919060201c565b156300000dba576040805180820190915260018152602f60f81b60208201526000906300000ab990839063000022c0565b9050600081600183516300000ad09190630000410d565b815181106300000ae6576300000ae663000040ab565b6020026020010151905060006300000b2b6040518060400160405280600a815260200169283937bc3c973539b7b760b11b81525085630000229c60201b90919060201c565b6300000b565760405180604001604052806005815260200164173539b7b760d91b8152506300000b7a565b6040518060400160405280600a815260200169283937bc3c973539b7b760b11b8152505b6040805160208101909152600081529091506300000b9d90839083906300002377565b6040516360f9bb1160e01b81529092506000906000805160206300009448833981519152906360f9bb11906300000bda9088906004016300003ed1565b600060405180830381865afa1580156300000bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526300000c2591908101906300003d48565b604051631e19e65760e01b8152909150600090600080516020630000944883398151915290631e19e657906300000c629085906004016300004130565b602060405180830381865afa1580156300000c81573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300000ca991906300004171565b90506300000cba88828663000024b8565b60408051808201909152600a808252692637b3b4b1973539b7b760b11b60209283015287518082111560091990910181028901909201207f0d7be4bcd70547aa33402ed2ab044308c53a781d008c9f83b15d55b94a9b743c14166300000db45760008881526011602052604090206300000d3690826300002659565b5080601260008a8152602001908152602001600020856040516300000d5d9190630000419e565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b039485161790558651601f8089015160008e81526013865284812096881681529590945291909320600019909301100290555b50505050505b506001016300000a21565b50826001019250505063000007fd565b60606300000e08604051806040016040528060058152602001641b5b39336d60d81b81525083630000267960201b60201c565b92915050565b6300000e5d816040516024016300000e2891906300003ed1565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b1790915263000026c716565b50565b6000808260028111156300000e7b576300000e7b6300003e8b565b036300000e8b5750617a69919050565b60028260028111156300000ea5576300000ea56300003e8b565b036300000eb557506107e4919050565b60018260028111156300000ecf576300000ecf6300003e8b565b036300000edf57506107e5919050565b60405162461bcd60e51b815260206004820181905260248201527f44656661756c744e6574776f726b3a20556e6b6e6f776e20636861696e20696460448201526064015b60405180910390fd5b60006300000e086300000f408363000026e0565b6000601f600183510310601f830151029050919050565b606060008260028111156300000f73576300000f736300003e8b565b036300000f9b5750506040805180820190915260058152641b1bd8d85b60da1b602082015290565b60018260028111156300000fb5576300000fb56300003e8b565b036300000fe557505060408051808201909152600d81526c1c9bdb9a5b8b5d195cdd1b995d609a1b602082015290565b60028260028111156300000fff576300000fff6300003e8b565b03630000102f57505060408051808201909152600d81526c1c9bdb9a5b8b5b585a5b9b995d609a1b602082015290565b60405162461bcd60e51b81526020600482015260256024820152600080516020630000950e833981519152604482015264616c69617360d81b60648201526084016300000f23565b6060600082600281111563000010935763000010936300003e8b565b0363000010bc5750506040805180820190915260068152656c6f63616c2f60d01b602082015290565b600182600281111563000010d65763000010d66300003e8b565b03630000110757505060408051808201909152600e81526d726f6e696e2d746573746e65742f60901b602082015290565b600282600281111563000011215763000011216300003e8b565b03630000115257505060408051808201909152600e81526d726f6e696e2d6d61696e6e65742f60901b602082015290565b60405162461bcd60e51b81526020600482015260346024820152600080516020630000950e83398151915260448201527f6465706c6f796d656e74206469726563746f727900000000000000000000000060648201526084016300000f23565b6060600082600281111563000011ce5763000011ce6300003e8b565b0363000011f95750506040805180820190915260088152674c4f43414c5f504b60c01b602082015290565b600182600281111563000012135763000012136300003e8b565b03630000124057505060408051808201909152600a815269544553544e45545f504b60b01b602082015290565b6002826002811115630000125a57630000125a6300003e8b565b03630000128757505060408051808201909152600a8152694d41494e4e45545f504b60b01b602082015290565b60405162461bcd60e51b815260206004820152602d60248201527f44656661756c744e6574776f726b3a20556e6b6e6f776e20707269766174652060448201526c1ad95e48195b9d881b1858995b609a1b60648201526084016300000f23565b6060600282600281111563000013035763000013036300003e8b565b03630000134357505060408051808201909152601b81527f68747470733a2f2f6170702e726f6e696e636861696e2e636f6d2f0000000000602082015290565b6001826002811115630000135d57630000135d6300003e8b565b0363000013855760405180606001604052806022815260200163000094686022913992915050565b505060408051602081019091526000815290565b60008681526017602052604090819020869055805160c081019091528063000013c4868963000027fc565b815260208082018990526040808301889052606083018790526080830186905260a090920184905260008881526016825282902083518155908301516001820155908201516002820190630000141c90826300003b66565b5060608201516003820190630000143590826300003b66565b5060808201516004820190630000144e90826300003b66565b5060a08201516005820190630000146790826300003b66565b505050505050505050565b63000014cb630000148560006300002add565b630000149360006300002ba4565b63000014a160006300002bb8565b63000014af60006300002cd5565b63000014bd60006300002e0b565b630000034460006300002f3a565b630000152463000014de60016300002add565b63000014ec60016300002ba4565b63000014fa60016300002bb8565b630000150860016300002cd5565b630000151660016300002e0b565b630000034460016300002f3a565b63000002e9630000153760026300002add565b630000154560026300002ba4565b630000155360026300002bb8565b630000156160026300002cd5565b630000156f60026300002e0b565b630000034460026300002f3a565b6060600082600181111563000015995763000015996300003e8b565b0363000015c657505060408051808201909152600a815269283937bc3ca0b236b4b760b11b602082015290565b600182600181111563000015e05763000015e06300003e8b565b03630000160d57505060408051808201909152600a8152694d756c746963616c6c3360b01b602082015290565b60405162461bcd60e51b815260206004820152602160248201527f44656661756c74436f6e74726163743a20556e6b6e6f776e20636f6e747261636044820152601d60fa1b60648201526084016300000f23565b60006300000e086300000f4083630000157d565b600083815260166020526040812060010154906300001695846300002ff5565b9050811580159063000016a85750805115155b63000017115760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b60648201526084016300000f23565b630000172082848363000024b8565b6000828152601160205260409020630000173c90846300002659565b5060008281526013602090815260408083206001600160a01b0387168452825280832087905584835260129091529081902090518491906300001782908490630000419e565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b63000017c66005630000313f565b63000017d46006630000313f565b63000017e26007630000313f565b63000017f06008630000313f565b63000017fe6009630000313f565b630000180c600a630000313f565b630000181a600b630000313f565b60408051808201909152600d81526c26b7b1b5abb930b82a37b5b2b760991b6020820152600f60006300001850815b63000031a2565b81526020019081526020016000209081630000186e91906300003b66565b5060408051808201909152600d81526c26b7b1b5abb930b82a37b5b2b760991b6020820152600f600063000018a5600163000031a2565b8152602001908152602001600020908163000018c391906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f600063000018f6600263000031a2565b81526020019081526020016000209081630000191491906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f60006300001947600363000031a2565b81526020019081526020016000209081630000196591906300003b66565b5060408051808201909152600981526804d6f636b45524332360bc1b6020820152600f60006300001998600463000031a2565b8152602001908152602001600020908163000019b691906300003b66565b5063000019e663000019d44660009081526017602052604090205490565b63000019e260006300000f2c565b1490565b1563000002e957600063000019fb63000031b6565b90506300001aad6300001a1060006300000f2c565b6300001a1e600863000031a2565b604051633a31bd3d60e11b81526001600160a01b03851660048083019190915260248201526000805160206300009448833981519152906374637a7a906044015b602060405180830381865afa1580156300001a7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906300001aa691906300004171565b6300001675565b6300001b136300001ac060006300000f2c565b6300001ace600963000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600560248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001b796300001b2660006300000f2c565b6300001b34600563000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600760248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001bdf6300001b8c60006300000f2c565b6300001b9a600663000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600960248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001c456300001bf260006300000f2c565b6300001c00600763000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600b60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001cab6300001c5860006300000f2c565b6300001c66600a63000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600d60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001d116300001cbe60006300000f2c565b6300001ccc600b63000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600e60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001d776300001d2460006300000f2c565b6300001d32600063000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152600f60248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001ddd6300001d8a60006300000f2c565b6300001d98600263000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601060248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001e436300001df060006300000f2c565b6300001dfe600363000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601160248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6300001ea96300001e5660006300000f2c565b6300001e64600463000031a2565b604051633a31bd3d60e11b81526001600160a01b0385166004820152601260248201526000805160206300009448833981519152906374637a7a906044016300001a5f565b6040805180820190915260088152672232b83637bcb2b960c11b60208201526300001ed6908263000032b2565b60408051808201909152600f81526e203e20726f6e696e4761746577617960881b60208201526300001f31906300001f2a6300001f1560006300000f2c565b6300001f23600863000031a2565b6300003303565b63000032b2565b60408051808201909152601381527f203e206d61696e636861696e476174657761790000000000000000000000000060208201526300001f8c906300001f2a6300001f7e60006300000f2c565b6300001f23600a63000031a2565b60408051808201909152601981527f203e20627269646765547261636b696e67436f6e74726163740000000000000060208201526300001fe7906300001f2a6300001fd960006300000f2c565b6300001f23600563000031a2565b60408051808201909152601681527f203e20627269646765536c617368436f6e74726163740000000000000000000060208201526300002042906300001f2a630000203460006300000f2c565b6300001f23600663000031a2565b60408051808201909152601781527f203e20627269646765526577617264436f6e74726163740000000000000000006020820152630000209d906300001f2a630000208f60006300000f2c565b6300001f23600763000031a2565b60408051808201909152601d81527f203e20726f6e696e4272696467654d616e61676572436f6e7472616374000000602082015263000020f8906300001f2a63000020ea60006300000f2c565b6300001f23600963000031a2565b6300002139604051806060016040528060218152602001630000948a602191396300001f2a630000212b60006300000f2c565b6300001f23600b63000031a2565b6040805180820190915260078152660407c40ae8aa8960cb1b6020820152630000217e906300001f2a630000217060006300000f2c565b6300001f23600063000031a2565b604080518082019091526006815265203e2041585360d01b602082015263000021c2906300001f2a63000021b460006300000f2c565b6300001f23600263000031a2565b6040805180820190915260068152650203e20534c560d41b60208201526300002206906300001f2a63000021f860006300000f2c565b6300001f23600363000031a2565b604080518082019091526007815266203e205553444360c81b60208201526300000e5d906300001f2a630000223d60006300000f2c565b6300001f23600463000031a2565b63000006be8282604051602401630000226792919063000041be565b60408051601f198184030181529190526020810180516001600160e01b03908116634b5c427760e01b1790915263000026c716565b80518251602092830182902082820391831115918202909401909201209091141690565b6060600063000022d28484630000332f565b9050601f1960208201600183510160051b81018651838201526001845101845260005b825160608452818114630000233e5760405182820380825286601f8201165b8b85018101518382015287018063000023145750600082820160200152603f018616810160405284525b87516020949094019301905081831063000022f557505050508091508251630000237057602081019150600281510382525b5092915050565b6060835183518351602087019650602086019550602085019450602060405101935082870183831163000024635760018382030160006020851063000023bc57508388205b601f851660200360031b89515b8b51818118831c6300002448578315630000240f5783888e2014630000240f57808a5260019c8d019c90990198848d1063000024075750630000245e565b5063000023c9565b60005b8b8101518b820152602001878110630000241257509b87019b988601988715630000244857848d1063000024075750630000245e565b895260019b8c019b90980197838c1063000023c9575b505050505b84935060206040510194508781038585030192505b8088101563000024975787518452602097880197909301926300002478565b50506000818401908152602001604052601f19909201918252509392505050565b60405163348051d760e11b81526004810184905260008051602063000094488339815191529063c657c7189084906300002549908490636900a3ae90602401600060405180830381865afa1580156300002516573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052630000254291908101906300003d48565b6300003416565b6300002556856300000dd5565b604051632b65311f60e11b81526001600160a01b03881660048201526000805160206300009448833981519152906356ca623e90602401600060405180830381865afa15801563000025ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000025d891908101906300003d48565b60405160200163000025ee9392919063000041f4565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401630000261e929190630000427a565b600060405180830381600087803b158015630000263a57600080fd5b505af11580156300002650573d6000803e3d6000fd5b50505050505050565b60006300002672836001600160a01b0384166300003449565b9392505050565b60608282604051806040016040528060048152602001631b5b306d60e01b81525060405160200163000026b09392919063000042a2565b604051602081830303815290604052905092915050565b6300000e5d81630000349e60201b6300002af11760201c565b6060600082600281111563000026fc5763000026fc6300003e8b565b036300002724575050604080518082019091526005815264131bd8d85b60da1b602082015290565b6001826002811115630000273e57630000273e6300003e8b565b03630000276d57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b600282600281111563000027875763000027876300003e8b565b0363000027b657505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b815260206004820152602480820152600080516020630000950e8339815191526044820152636e616d6560e01b60648201526084016300000f23565b60008060008051602063000094ee83398151915260001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156300002872575060408051601f3d908101601f19168201909252630000286f9181019063000040f2565b60015b63000028bf5763000028a463000002e26040518060600160405280603181526020016300009417603191396300000dd5565b5060008051602063000094ce83398151915290506300000e08565b905046830363000028d35790506300000e08565b60155460ff1663000028fa575060008051602063000094ce83398151915290506300000e08565b6000838152601760209081526040808320548352601690915290205460008051602063000094ce8339815191528114630000293a5791506300000e089050565b60405163975a6ce960e01b815260009060008051602063000094488339815191529063975a6ce99063000029749089906004016300003ed1565b600060405180830381865afa1580156300002993573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405263000029bf91908101906300003d48565b604051630637469360e31b81529091506000805160206300009448833981519152906331ba34989063000029f99084906004016300003ed1565b6020604051808303816000875af19250505080156300002a3a575060408051601f3d908101601f191682019092526300002a379181019063000040f2565b60015b6300002a92576300002a746300002a6c6040518060600160405280602b815260200163000093ec602b913963000034bf565b82630000224b565b5060008051602063000094ce83398151915292506300000e08915050565b6300002ad06300002ac8886040516020016300002ab1919063000042f1565b60408051601f198184030181529190526300003416565b8263000034f2565b93506300000e0892505050565b6000808260028111156300002af8576300002af86300003e8b565b036300002b0757506005919050565b60018260028111156300002b21576300002b216300003e8b565b036300002b3057506001919050565b60028260028111156300002b4a576300002b4a6300003e8b565b036300002b5a57506107e6919050565b60405162461bcd60e51b815260206004820152601960248201527f4e6574776f726b3a20556e6b6e6f776e20636861696e2069640000000000000060448201526064016300000f23565b60006300000e086300000f40836300003543565b606060008260028111156300002bd4576300002bd46300003e8b565b036300002bfd575050604080518082019091526006815265676f65726c6960d01b602082015290565b60018260028111156300002c17576300002c176300003e8b565b036300002c42575050604080518082019091526008815267657468657265756d60c01b602082015290565b60028260028111156300002c5c576300002c5c6300003e8b565b036300002c8b57505060408051808201909152600c81526b1c9bdb9a5b8b59195d9b995d60a21b602082015290565b60405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b20616c696173000060448201526064016300000f23565b606060008260028111156300002cf1576300002cf16300003e8b565b036300002d1b575050604080518082019091526007815266676f65726c692f60c81b602082015290565b60018260028111156300002d35576300002d356300003e8b565b036300002d61575050604080518082019091526009815268657468657265756d2f60b81b602082015290565b60028260028111156300002d7b576300002d7b6300003e8b565b036300002dab57505060408051808201909152600d81526c726f6e696e2d6465766e65742f60981b602082015290565b60405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b206465706c6f796d60448201526c656e74206469726563746f727960981b60648201526084016300000f23565b606060008260028111156300002e27576300002e276300003e8b565b036300002e5457505060408051808201909152600a815269544553544e45545f504b60b01b602082015290565b60028260028111156300002e6e576300002e6e6300003e8b565b036300002e9a5750506040805180820190915260098152684445564e45545f504b60b81b602082015290565b60018260028111156300002eb4576300002eb46300003e8b565b036300002ee157505060408051808201909152600a8152694d41494e4e45545f504b60b01b602082015290565b60405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b3a20556e6b6e6f776e2070726976617465206b657920656e76604482015265081b1858995b60d21b60648201526084016300000f23565b606060008260028111156300002f56576300002f566300003e8b565b036300002f9657505060408051808201909152601c81527f68747470733a2f2f676f65726c692e65746865727363616e2e696f2f00000000602082015290565b60018260028111156300002fb0576300002fb06300003e8b565b036300002ff057505060408051808201909152601581527f68747470733a2f2f65746865727363616e2e696f2f0000000000000000000000602082015290565b919050565b606060006300003006836300003661565b6000848152600f602052604090208054919250906300003027906300003ad0565b80601f01602080910402602001604051908101604052809291908181526020018280546300003057906300003ad0565b801563000030ac5780601f10630000307f5761010080835404028352916020019163000030ac565b820191906000526020600020905b815481529060010190602001808311630000308d57829003601f168201915b50505050509150818051906020012081805190602001201463000030d2578063000030d4565b815b915081516000141581600f600086815260200190815260200160002060405160200163000031059291906300004353565b6040516020818303038152906040529063000031385760405162461bcd60e51b81526004016300000f2391906300003ed1565b5050919050565b630000316381600b811115630000315c57630000315c6300003e8b565b6300003689565b600f6000630000318484600b81111563000018495763000018496300003e8b565b8152602001908152602001600020908163000006be91906300003b66565b60006300000e086300000f40836300003689565b600154600090610100900460ff1663000031dd57600b546001600160a01b031663000031ea565b600c546001600160a01b03165b90506001600160a01b038116158015630000321d5750630000321d63000019d44660009081526017602052604090205490565b15630000324757507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b03811663000032af5760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b60648201526084016300000f23565b90565b63000006be828260405160240163000032ce9291906300004477565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b1790915263000026c716565b6000828152601660205260408120600101546300002672906300003328846300002ff5565b6300003a37565b606082518251818111630000340e576020850194506020840193506020604051019250846001828488010301600060208410630000336c57508286205b601f841660200360031b87515b8951818118831c63000033e057831563000033b85783878c201463000033b85760018b019a50848b1063000033b0575063000033f1565b506300003379565b858b03895299860199602090980197861563000033e057848b1063000033b0575063000033f1565b5060018a019950838a106300003379575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b60606300000e08604051806040016040528060058152602001641b5b39346d60d81b81525083630000267960201b60201c565b60008181526001830160205260408120546300003494575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556300000e08565b5060006300000e08565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60606300000e08604051806040016040528060058152602001641b5b39316d60d81b81525083630000267960201b60201c565b63000006be8282604051602401630000350e92919063000044a5565b60408051601f198184030181529190526020810180516001600160e01b03908116632d839cb360e21b1790915263000026c716565b60606000826002811115630000355f57630000355f6300003e8b565b036300003588575050604080518082019091526006815265476f65726c6960d01b602082015290565b600282600281111563000035a25763000035a26300003e8b565b0363000035d057505060408051808201909152600b81526a149bdb9a5b91195d9b995d60aa1b602082015290565b600182600281111563000035ea5763000035ea6300003e8b565b03630000361757505060408051808201909152600a815269115d1a13585a5b9b995d60b21b602082015290565b60405162461bcd60e51b815260206004820152601d60248201527f4e6574776f726b3a20556e6b6e6f776e206e6574776f726b206e616d6500000060448201526064016300000f23565b604080518082019091526000808252601f820183905281518201602001526060906300000e08565b6060600082600b81111563000036a55763000036a56300003e8b565b0363000036cc5750506040805180820190915260048152630ae8aa8960e31b602082015290565b600182600b81111563000036e65763000036e66300003e8b565b03630000370d5750506040805180820190915260048152632ba927a760e11b602082015290565b600282600b81111563000037275763000037276300003e8b565b03630000374d57505060408051808201909152600381526241585360e81b602082015290565b600382600b81111563000037675763000037676300003e8b565b03630000378d5750506040805180820190915260038152620534c560ec1b602082015290565b600482600b81111563000037a75763000037a76300003e8b565b0363000037ce5750506040805180820190915260048152635553444360e01b602082015290565b600582600b81111563000037e85763000037e86300003e8b565b03630000381957505060408051808201909152600e81526d427269646765547261636b696e6760901b602082015290565b600682600b81111563000038335763000038336300003e8b565b03630000386157505060408051808201909152600b81526a084e4d2c8cecaa6d8c2e6d60ab1b602082015290565b600782600b811115630000387b57630000387b6300003e8b565b0363000038aa57505060408051808201909152600c81526b109c9a5919d954995dd85c9960a21b602082015290565b600882600b81111563000038c45763000038c46300003e8b565b0363000038f557505060408051808201909152600e81526d526f6e696e47617465776179563360901b602082015290565b600982600b811115630000390f57630000390f6300003e8b565b0363000039445750506040805180820190915260128152712937b734b7213934b233b2a6b0b730b3b2b960711b602082015290565b600a82600b811115630000395e57630000395e6300003e8b565b0363000039935750506040805180820190915260128152714d61696e636861696e47617465776179563360701b602082015290565b600b82600b81111563000039ad5763000039ad6300003e8b565b0363000039ed57505060408051808201909152601681527f4d61696e636861696e4272696467654d616e6167657200000000000000000000602082015290565b60405162461bcd60e51b815260206004820152601a60248201527f436f6e74726163743a20556e6b6e6f776e20636f6e747261637400000000000060448201526064016300000f23565b60008281526012602052604080822090516300003a57908490630000419e565b90815260405160209181900382018120546001600160a01b03169250821515916300003a879185910163000044cb565b6040516020818303038152906040529063000023705760405162461bcd60e51b81526004016300000f2391906300003ed1565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806300003ae657607f821691505b6020821081036300003b0857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156300000721576000816000526020600020601f850160051c810160208610156300003b3b5750805b601f850160051c820191505b818110156300003b5e578281556001016300003b47565b505050505050565b81516001600160401b038111156300003b85576300003b856300003aba565b6300003ba1816300003b9984546300003ad0565b846300003b0e565b602080601f8311600181146300003bdc57600084156300003bc25750858301515b600019600386901b1c1916600185901b1785556300003b5e565b600085815260208120601f198616915b828110156300003c0f578886015182559484019460019091019084016300003bec565b50858210156300003c2f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60405160a081016001600160401b03811182821017156300003c67576300003c676300003aba565b60405290565b604051601f8201601f191681016001600160401b03811182821017156300003c9b576300003c9b6300003aba565b604052919050565b60005b838110156300003cc25781810151838201526020016300003ca6565b50506000910152565b600082601f8301126300003cde57600080fd5b81516001600160401b038111156300003cfd576300003cfd6300003aba565b6300003d14601f8201601f19166020016300003c6d565b8181528460208386010111156300003d2b57600080fd5b6300003d408260208301602087016300003ca3565b949350505050565b6000602082840312156300003d5c57600080fd5b81516001600160401b038111156300003d7457600080fd5b6300003d40848285016300003ccb565b600081516300003d9a8185602086016300003ca3565b9290920192915050565b6d0213637b1b590273ab6b132b91d160951b8152600085516300003dd181600e850160208a016300003ca3565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b601183015286516300003e0e81601c850160208b016300003ca3565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f83015285516300003e4381602a850160208a016300003ca3565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d8201526300003e76603e8201856300003d84565b600560f91b8152600101979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600081518084526300003ebd8160208601602086016300003ca3565b601f01601f19169290920160200192915050565b602081526000630000267260208301846300003ea1565b805180151581146300002ff057600080fd5b6000602082840312156300003f0e57600080fd5b6300002672826300003ee8565b600060208083850312156300003f3057600080fd5b82516001600160401b03808211156300003f4957600080fd5b818501915085601f8301126300003f5f57600080fd5b8151818111156300003f77576300003f776300003aba565b8060051b6300003f8a8582016300003c6d565b91825283810185019185810190898411156300003fa657600080fd5b86860192505b83831015630000409e578251858111156300003fc85760008081fd5b860160a0818c03601f19018113156300003fe25760008081fd5b6300003fee6300003c3f565b898301518881111563000040025760008081fd5b63000040148e8c838701016300003ccb565b82525060408084015189811115630000402d5760008081fd5b630000403f8f8d838801016300003ccb565b8c840152506060808501518a81168114630000405b5760008081fd5b8083850152506080915063000040748286016300003ee8565b9083015263000040878484016300003ee8565b908201528452505091860191908601906300003fac565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000825163000040d78184602087016300003ca3565b680bcb98da185a5b925960ba1b920191825250600901919050565b600060208284031215630000410657600080fd5b5051919050565b818103818111156300000e0857634e487b7160e01b600052601160045260246000fd5b604081526000630000414760408301846300003ea1565b828103602084015260088152672e6164647265737360c01b60208201526040810191505092915050565b600060208284031215630000418557600080fd5b81516001600160a01b0381168114630000267257600080fd5b6000825163000041b48184602087016300003ca3565b9190910192915050565b60408152600063000041d560408301856300003ea1565b828103602084015263000041eb81856300003ea1565b95945050505050565b600560fb1b81526000845163000042148160018501602089016300003ca3565b602960f81b600191840191820152845163000042398160028401602089016300003ca3565b605b60f81b600292909101918201528351630000425f8160038401602088016300003ca3565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b03831681526040602082018190526000906300003d40908301846300003ea1565b6000845163000042b88184602089016300003ca3565b84519083019063000042d08183602089016300003ca3565b845191019063000042e78183602088016300003ca3565b0195945050505050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b815260008251630000431f81600f8501602087016300003ca3565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a8152600060207f20436f6e74726163742054797065206e6f7420666f756e6420280000000000006020840152845163000043b781603a8601602089016300003ca3565b61148560f11b603a9185019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c8201528454604e9060009063000043f6816300003ad0565b60018281168015630000441457600181146300004431576300004467565b60ff198416604e880152604e831515840288010194506300004467565b8a600052602060002060005b84811015630000445c578154898201890152908301908901630000443d565b5050604e8388010194505b50929a9950505050505050505050565b604081526000630000448e60408301856300003ea1565b905060018060a01b03831660208301529392505050565b60408152600063000044bc60408301856300003ea1565b90508260208301529392505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a200000000000000000602082015260008251630000452d8160388501602087016300003ca3565b9190910160380192915050565b614ea180630000454b6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c634300081700334e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d68747470733a2f2f736169676f6e2d6170702e726f6e696e636861696e2e636f6d2f203e206d61696e636861696e4272696467654d616e61676572436f6e74726163744e6f206465706c6f796d656e747320666f6c6465722c20736b6970206c6f6164696e67c9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b20) - │ │ └─ ← () - │ ├─ [1432504330] GeneralConfig::fallback() - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString(0) [staticcall] - │ │ │ └─ ← "0" - │ │ ├─ [0] VM::toString(9223372036854775807 [9.223e18]) [staticcall] - │ │ │ └─ ← "9223372036854775807" - │ │ ├─ [0] console::log("\u{1b}[93mBlock Number: 1 | Timestamp: 1 | Gas Price: 0 | Block Gas Limit: 9223372036854775807\n\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::activeFork() [staticcall] - │ │ │ └─ ← no active fork - │ │ ├─ [0] console::log("\u{1b}[93mNetworkConfig: fork mode disabled, no active fork\u{1b}[0m") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ProxyAdmin[0x505d91E8fd2091794b45b27f86C045529fa92CD7]: [0x505d91E8fd2091794b45b27f86C045529fa92CD7]) [staticcall] - │ │ │ └─ ← "0x505d91E8fd2091794b45b27f86C045529fa92CD7" - │ │ ├─ [0] VM::label((2021)ProxyAdmin[0x505d91E8fd2091794b45b27f86C045529fa92CD7]: [0x505d91E8fd2091794b45b27f86C045529fa92CD7], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProxyAdmin\u{1b}[0m[0x505d91E8fd2091794b45b27f86C045529fa92CD7]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)ProxyAdmin[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]: [0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]) [staticcall] - │ │ │ └─ ← "0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03" - │ │ ├─ [0] VM::label((2020)ProxyAdmin[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]: [0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProxyAdmin\u{1b}[0m[0xA3e7d085E65CB0B916f6717da876b7bE5cC92f03]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11]) [staticcall] - │ │ │ └─ ← "0xcA11bde05977b3631167028862bE2a173976CA11" - │ │ ├─ [0] VM::label((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMulticall3\u{1b}[0m[0xcA11bde05977b3631167028862bE2a173976CA11]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11]) [staticcall] - │ │ │ └─ ← "0xcA11bde05977b3631167028862bE2a173976CA11" - │ │ ├─ [0] VM::label((2021)Multicall3[0xcA11bde05977b3631167028862bE2a173976CA11]: [0xcA11bde05977b3631167028862bE2a173976CA11], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMulticall3\u{1b}[0m[0xcA11bde05977b3631167028862bE2a173976CA11]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 4) [staticcall] - │ │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] - │ │ │ └─ ← "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496" - │ │ ├─ [0] VM::label((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 5) [staticcall] - │ │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]) [staticcall] - │ │ │ └─ ← "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3" - │ │ ├─ [0] VM::label((31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 7) [staticcall] - │ │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4]) [staticcall] - │ │ │ └─ ← "0x50EEf481cae4250d252Ae577A09bF514f224C6C4" - │ │ ├─ [0] VM::label((31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 9) [staticcall] - │ │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]) [staticcall] - │ │ │ └─ ← "0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809" - │ │ ├─ [0] VM::label((31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 11) [staticcall] - │ │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]) [staticcall] - │ │ │ └─ ← "0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351" - │ │ ├─ [0] VM::label((31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 13) [staticcall] - │ │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]) [staticcall] - │ │ │ └─ ← "0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB" - │ │ ├─ [0] VM::label((31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 14) [staticcall] - │ │ │ └─ ← (31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]) [staticcall] - │ │ │ └─ ← "0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1" - │ │ ├─ [0] VM::label((31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 15) [staticcall] - │ │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90]) [staticcall] - │ │ │ └─ ← "0x978e3286EB805934215a88694d80b09aDed68D90" - │ │ ├─ [0] VM::label((31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mWETH\u{1b}[0m[0x978e3286EB805934215a88694d80b09aDed68D90]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 16) [staticcall] - │ │ │ └─ ← (31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]) [staticcall] - │ │ │ └─ ← "0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb" - │ │ ├─ [0] VM::label((31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mAXS\u{1b}[0m[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 17) [staticcall] - │ │ │ └─ ← (31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]) [staticcall] - │ │ │ └─ ← "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4" - │ │ ├─ [0] VM::label((31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mSLP\u{1b}[0m[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::computeCreateAddress(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], 18) [staticcall] - │ │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]) [staticcall] - │ │ │ └─ ← "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6" - │ │ ├─ [0] VM::label((31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mUSDC\u{1b}[0m[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]") - │ │ │ └─ ← () - │ │ ├─ [0] console::log("Deployer", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > roninGateway", (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > mainchainGateway", (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > bridgeTrackingContract", (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > bridgeSlashContract", (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > bridgeRewardContract", (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > roninBridgeManagerContract", (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > mainchainBridgeManagerContract", (31337)MainchainBridgeManager[0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]: [0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > WETH", (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > AXS", (31337)AXS[0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]: [0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > SLP", (31337)SLP[0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]: [0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] console::log(" > USDC", (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]) [staticcall] - │ │ │ └─ ← () - │ │ ├─ [0] VM::exists("deployments/") - │ │ │ └─ ← true - │ │ ├─ [0] VM::readDir("deployments/") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet", 1, true, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet", 1, true, false)] - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("1") [staticcall] - │ │ │ └─ ← 1 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainBridgeManager.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]) [staticcall] - │ │ │ └─ ← "0xa71456fA88a5f6a4696D0446E690Db4a5913fab0" - │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayPauseEnforcer.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]) [staticcall] - │ │ │ └─ ← "0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4" - │ │ ├─ [0] VM::label((1)MainchainGatewayPauseEnforcer[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]: [0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayPauseEnforcer\u{1b}[0m[0xe514d9DEB7966c8BE0ca922de8a064264eA6bcd4]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV2Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD]) [staticcall] - │ │ │ └─ ← "0xa67BA5315AF4961Eb937158032AF9300C657dAcD" - │ │ ├─ [0] VM::label((1)MainchainGatewayV2Logic[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]: [0xa67BA5315AF4961Eb937158032AF9300C657dAcD], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0xa67BA5315AF4961Eb937158032AF9300C657dAcD]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]) [staticcall] - │ │ │ └─ ← "0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403" - │ │ ├─ [0] VM::label((1)MainchainGatewayV3Logic[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]: [0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV3Logic\u{1b}[0m[0x72E28A9009Ad12dE019BFF418CD210D4bbc3D403]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGatewayV3Proxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]) [staticcall] - │ │ │ └─ ← "0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08" - │ │ ├─ [0] VM::label((1)MainchainGatewayV3[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]: [0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0x64192819Ac13Ef72bF6b5AE239AC672B43a9AF08]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainGovernanceAdmin.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930]) [staticcall] - │ │ │ └─ ← "0xB255D6A720BB7c39fee173cE22113397119cB930" - │ │ ├─ [0] VM::label((1)MainchainGovernanceAdmin[0xB255D6A720BB7c39fee173cE22113397119cB930]: [0xB255D6A720BB7c39fee173cE22113397119cB930], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0xB255D6A720BB7c39fee173cE22113397119cB930]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/MainchainRoninTrustedOrganizationProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D]) [staticcall] - │ │ │ └─ ← "0x7D0556D55ca1a92708681e2e231733EBd922597D" - │ │ ├─ [0] VM::label((1)MainchainRoninTrustedOrganization[0x7D0556D55ca1a92708681e2e231733EBd922597D]: [0x7D0556D55ca1a92708681e2e231733EBd922597D], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0x7D0556D55ca1a92708681e2e231733EBd922597D]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ethereum/RoninTrustedOrganizationLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794] - │ │ ├─ [0] VM::toString(1) [staticcall] - │ │ │ └─ ← "1" - │ │ ├─ [0] VM::toString((1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]) [staticcall] - │ │ │ └─ ← "0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794" - │ │ ├─ [0] VM::label((1)RoninTrustedOrganizationLogic[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]: [0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794], "(\u{1b}[94m1\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0x9Be8BB3C6ced4C0C51b1C943Dee26a593b1E6794]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("5") [staticcall] - │ │ │ └─ ← 5 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainBridgeManager.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664]) [staticcall] - │ │ │ └─ ← "0x073de79499a1C7D474241755af8aa47e091f0664" - │ │ ├─ [0] VM::label((5)MainchainBridgeManager[0x073de79499a1C7D474241755af8aa47e091f0664]: [0x073de79499a1C7D474241755af8aa47e091f0664], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainBridgeManager\u{1b}[0m[0x073de79499a1C7D474241755af8aa47e091f0664]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV2Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]) [staticcall] - │ │ │ └─ ← "0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64" - │ │ ├─ [0] VM::label((5)MainchainGatewayV2Logic[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]: [0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0x60fb445De9Cb26Df5fdC175c0801C5E29bf4eB64]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGatewayV3Proxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]) [staticcall] - │ │ │ └─ ← "0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D" - │ │ ├─ [0] VM::label((5)MainchainGatewayV3[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]: [0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV3\u{1b}[0m[0x9e359F42cDDc84A386a2Ef1D9Ae06623f3970D1D]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainGovernanceAdmin.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798]) [staticcall] - │ │ │ └─ ← "0x4008b6362644C2ffB8A663d85395AAdF4056b798" - │ │ ├─ [0] VM::label((5)MainchainGovernanceAdmin[0x4008b6362644C2ffB8A663d85395AAdF4056b798]: [0x4008b6362644C2ffB8A663d85395AAdF4056b798], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0x4008b6362644C2ffB8A663d85395AAdF4056b798]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/MainchainRoninTrustedOrganizationProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]) [staticcall] - │ │ │ └─ ← "0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E" - │ │ ├─ [0] VM::label((5)MainchainRoninTrustedOrganization[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]: [0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0xC56Eb447ACd19d5213bA0CFe39f2ACA51c60352E]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli/RoninTrustedOrganizationLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]) [staticcall] - │ │ │ └─ ← "0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E" - │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]: [0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xBA0b296d18bfA6Bc82132aA7C9bB0ecD83DD1C2E]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainRoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("5") [staticcall] - │ │ │ └─ ← 5 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55]) [staticcall] - │ │ │ └─ ← "0xF54513B9C15857b4562893D3b2cBa5486ca67D55" - │ │ ├─ [0] VM::label((5)MainchainGatewayV2Logic[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]: [0xF54513B9C15857b4562893D3b2cBa5486ca67D55], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2Logic\u{1b}[0m[0xF54513B9C15857b4562893D3b2cBa5486ca67D55]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGatewayV2Proxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de]) [staticcall] - │ │ │ └─ ← "0x10bdC48820E0853472A9c6f96e2c0819486ec0de" - │ │ ├─ [0] VM::label((5)MainchainGatewayV2[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]: [0x10bdC48820E0853472A9c6f96e2c0819486ec0de], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGatewayV2\u{1b}[0m[0x10bdC48820E0853472A9c6f96e2c0819486ec0de]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainGovernanceAdmin.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]) [staticcall] - │ │ │ └─ ← "0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac" - │ │ ├─ [0] VM::label((5)MainchainGovernanceAdmin[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]: [0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainGovernanceAdmin\u{1b}[0m[0xb290E3276E86327AF217eA0F40fEf53f1b34D3Ac]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/MainchainRoninTrustedOrganizationProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]) [staticcall] - │ │ │ └─ ← "0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49" - │ │ ├─ [0] VM::label((5)MainchainRoninTrustedOrganization[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]: [0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mMainchainRoninTrustedOrganization\u{1b}[0m[0xA53D0a2dAC70D1fD3D9677c40636A7b50da4aB49]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/goerli-for-devnet/RoninTrustedOrganizationLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0] - │ │ ├─ [0] VM::toString(5) [staticcall] - │ │ │ └─ ← "5" - │ │ ├─ [0] VM::toString((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]) [staticcall] - │ │ │ └─ ← "0xa71456fA88a5f6a4696D0446E690Db4a5913fab0" - │ │ ├─ [0] VM::label((5)RoninTrustedOrganizationLogic[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]: [0xa71456fA88a5f6a4696D0446E690Db4a5913fab0], "(\u{1b}[94m5\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xa71456fA88a5f6a4696D0446E690Db4a5913fab0]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/RoninGatewayV2Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("2022") [staticcall] - │ │ │ └─ ← 2022 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2] - │ │ ├─ [0] VM::toString(2022) [staticcall] - │ │ │ └─ ← "2022" - │ │ ├─ [0] VM::toString((2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2]) [staticcall] - │ │ │ └─ ← "0x64f4E02de01F967fFFB8B29b78fb3744584839C2" - │ │ ├─ [0] VM::label((2022)ProfileLogic[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]: [0x64f4E02de01F967fFFB8B29b78fb3744584839C2], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x64f4E02de01F967fFFB8B29b78fb3744584839C2]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/ProfileProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062] - │ │ ├─ [0] VM::toString(2022) [staticcall] - │ │ │ └─ ← "2022" - │ │ ├─ [0] VM::toString((2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062]) [staticcall] - │ │ │ └─ ← "0x13C132D2C7db36E50cb39ff808731f580CAea062" - │ │ ├─ [0] VM::label((2022)Profile[0x13C132D2C7db36E50cb39ff808731f580CAea062]: [0x13C132D2C7db36E50cb39ff808731f580CAea062], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x13C132D2C7db36E50cb39ff808731f580CAea062]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-devnet/RoninGatewayV2Proxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba] - │ │ ├─ [0] VM::toString(2022) [staticcall] - │ │ │ └─ ← "2022" - │ │ ├─ [0] VM::toString((2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]) [staticcall] - │ │ │ └─ ← "0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba" - │ │ ├─ [0] VM::label((2022)RoninGatewayV2[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]: [0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba], "(\u{1b}[94m2022\u{1b}[0m)\u{1b}[93mRoninGatewayV2\u{1b}[0m[0x14bEbb8a09e0362f026B9f4Fb1Cd2EB508c919ba]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Proxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("2020") [staticcall] - │ │ │ └─ ← 2020 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]) [staticcall] - │ │ │ └─ ← "0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38" - │ │ ├─ [0] VM::label((2020)BridgeRewardLogic[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]: [0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeRewardLogic\u{1b}[0m[0x6d457615C1B08ab8d5ec2a0410440E23A17F7c38]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeRewardProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]) [staticcall] - │ │ │ └─ ← "0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1" - │ │ ├─ [0] VM::label((2020)BridgeReward[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]: [0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x796A163A21e9a659fc9773166e0AfDC1eB01aaD1]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]) [staticcall] - │ │ │ └─ ← "0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4" - │ │ ├─ [0] VM::label((2020)BridgeSlashLogic[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]: [0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeSlashLogic\u{1b}[0m[0x763e39d39a59BE7458147C7129fB044B34Ab4Ca4]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeSlashProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]) [staticcall] - │ │ │ └─ ← "0x273cdA3AFE17eB7BcB028b058382A9010ae82B24" - │ │ ├─ [0] VM::label((2020)BridgeSlash[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]: [0x273cdA3AFE17eB7BcB028b058382A9010ae82B24], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0x273cdA3AFE17eB7BcB028b058382A9010ae82B24]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]) [staticcall] - │ │ │ └─ ← "0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32" - │ │ ├─ [0] VM::label((2020)BridgeTrackingLogic[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]: [0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeTrackingLogic\u{1b}[0m[0xe4CcF400e99Cb07Eb76D3a169532916069B7DC32]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/BridgeTrackingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]) [staticcall] - │ │ │ └─ ← "0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2" - │ │ ├─ [0] VM::label((2020)BridgeTracking[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]: [0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x3Fb325b251eE80945d3fc8c7692f5aFFCA1B8bC2]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c]) [staticcall] - │ │ │ └─ ← "0x241e507363d674c77a9930F31ea26BBc8857949c" - │ │ ├─ [0] VM::label((2020)FastFinalityTrackingLogic[0x241e507363d674c77a9930F31ea26BBc8857949c]: [0x241e507363d674c77a9930F31ea26BBc8857949c], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mFastFinalityTrackingLogic\u{1b}[0m[0x241e507363d674c77a9930F31ea26BBc8857949c]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/FastFinalityTrackingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]) [staticcall] - │ │ │ └─ ← "0xA30B2932CD8b8A89E34551Cdfa13810af38dA576" - │ │ ├─ [0] VM::label((2020)FastFinalityTracking[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]: [0xA30B2932CD8b8A89E34551Cdfa13810af38dA576], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mFastFinalityTracking\u{1b}[0m[0xA30B2932CD8b8A89E34551Cdfa13810af38dA576]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D]) [staticcall] - │ │ │ └─ ← "0xca9F10769292F26850333264d618c1B5E91f394D" - │ │ ├─ [0] VM::label((2020)MaintenanceLogic[0xca9F10769292F26850333264d618c1B5E91f394D]: [0xca9F10769292F26850333264d618c1B5E91f394D], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMaintenanceLogic\u{1b}[0m[0xca9F10769292F26850333264d618c1B5E91f394D]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/MaintenanceProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]) [staticcall] - │ │ │ └─ ← "0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894" - │ │ ├─ [0] VM::label((2020)Maintenance[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]: [0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mMaintenance\u{1b}[0m[0x6F45C1f8d84849D497C6C0Ac4c3842DC82f49894]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]) [staticcall] - │ │ │ └─ ← "0x3EC92e7a835bb58832Df64E7f8206467e07d54a3" - │ │ ├─ [0] VM::label((2020)ProfileLogic[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]: [0x3EC92e7a835bb58832Df64E7f8206467e07d54a3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x3EC92e7a835bb58832Df64E7f8206467e07d54a3]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/ProfileProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035]) [staticcall] - │ │ │ └─ ← "0x840EBf1CA767CB690029E91856A357a43B85d035" - │ │ ├─ [0] VM::label((2020)Profile[0x840EBf1CA767CB690029E91856A357a43B85d035]: [0x840EBf1CA767CB690029E91856A357a43B85d035], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x840EBf1CA767CB690029E91856A357a43B85d035]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninBridgeManager.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]) [staticcall] - │ │ │ └─ ← "0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a" - │ │ ├─ [0] VM::label((2020)RoninBridgeManager[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]: [0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0x5FA49E6CA54a9daa8eCa4F403ADBDE5ee075D84a]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayPauseEnforcer.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]) [staticcall] - │ │ │ └─ ← "0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837" - │ │ ├─ [0] VM::label((2020)RoninGatewayPauseEnforcer[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]: [0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x2367cD5468c2b3cD18aA74AdB7e14E43426aF837]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV2Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab]) [staticcall] - │ │ │ └─ ← "0x3036EB56e7e28851a56B87F037101aB3630933ab" - │ │ ├─ [0] VM::label((2020)RoninGatewayV2Logic[0x3036EB56e7e28851a56B87F037101aB3630933ab]: [0x3036EB56e7e28851a56B87F037101aB3630933ab], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV2Logic\u{1b}[0m[0x3036EB56e7e28851a56B87F037101aB3630933ab]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]) [staticcall] - │ │ │ └─ ← "0x1477DB6bF449B0eb1191a1F4023867ddCEadc504" - │ │ ├─ [0] VM::label((2020)RoninGatewayV3Logic[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]: [0x1477DB6bF449B0eb1191a1F4023867ddCEadc504], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV3Logic\u{1b}[0m[0x1477DB6bF449B0eb1191a1F4023867ddCEadc504]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGatewayV3Proxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]) [staticcall] - │ │ │ └─ ← "0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df" - │ │ ├─ [0] VM::label((2020)RoninGatewayV3[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]: [0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0x0CF8fF40a508bdBc39fBe1Bb679dCBa64E65C7Df]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninGovernanceAdmin.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3]) [staticcall] - │ │ │ └─ ← "0x946397deDFd2f79b75a72B322944a21C3240c9c3" - │ │ ├─ [0] VM::label((2020)RoninGovernanceAdmin[0x946397deDFd2f79b75a72B322944a21C3240c9c3]: [0x946397deDFd2f79b75a72B322944a21C3240c9c3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninGovernanceAdmin\u{1b}[0m[0x946397deDFd2f79b75a72B322944a21C3240c9c3]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]) [staticcall] - │ │ │ └─ ← "0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02" - │ │ ├─ [0] VM::label((2020)RoninTrustedOrganizationLogic[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]: [0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0x0AaDA85A2b3c9fb1be158D43e71cdcca6Fe85e02]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninTrustedOrganizationProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090]) [staticcall] - │ │ │ └─ ← "0x98D0230884448B3E2f09a177433D60fb1E19C090" - │ │ ├─ [0] VM::label((2020)RoninTrustedOrganization[0x98D0230884448B3E2f09a177433D60fb1E19C090]: [0x98D0230884448B3E2f09a177433D60fb1E19C090], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninTrustedOrganization\u{1b}[0m[0x98D0230884448B3E2f09a177433D60fb1E19C090]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]) [staticcall] - │ │ │ └─ ← "0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d" - │ │ ├─ [0] VM::label((2020)RoninValidatorSetLogic[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]: [0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninValidatorSetLogic\u{1b}[0m[0x0C1Dee1b435C464b4E94781f94F991Cb90e3399d]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/RoninValidatorSetProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]) [staticcall] - │ │ │ └─ ← "0x617c5d73662282EA7FfD231E020eCa6D2B0D552f" - │ │ ├─ [0] VM::label((2020)RoninValidatorSet[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]: [0x617c5d73662282EA7FfD231E020eCa6D2B0D552f], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mRoninValidatorSet\u{1b}[0m[0x617c5d73662282EA7FfD231E020eCa6D2B0D552f]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]) [staticcall] - │ │ │ └─ ← "0x440BAF1c4B008EE4D617A83401f06AA80f5163E9" - │ │ ├─ [0] VM::label((2020)SlashIndicatorLogic[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]: [0x440BAF1c4B008EE4D617A83401f06AA80f5163E9], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mSlashIndicatorLogic\u{1b}[0m[0x440BAF1c4B008EE4D617A83401f06AA80f5163E9]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/SlashIndicatorProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]) [staticcall] - │ │ │ └─ ← "0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3" - │ │ ├─ [0] VM::label((2020)SlashIndicator[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]: [0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mSlashIndicator\u{1b}[0m[0xEBFFF2b32fA0dF9C5C8C5d5AAa7e8b51d5207bA3]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a]) [staticcall] - │ │ │ └─ ← "0x8Ae952d538e9c25120e9c75FBA0718750f81313a" - │ │ ├─ [0] VM::label((2020)StakingLogic[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]: [0x8Ae952d538e9c25120e9c75FBA0718750f81313a], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingLogic\u{1b}[0m[0x8Ae952d538e9c25120e9c75FBA0718750f81313a]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758]) [staticcall] - │ │ │ └─ ← "0x545edb750eB8769C868429BE9586F5857A768758" - │ │ ├─ [0] VM::label((2020)Staking[0x545edb750eB8769C868429BE9586F5857A768758]: [0x545edb750eB8769C868429BE9586F5857A768758], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStaking\u{1b}[0m[0x545edb750eB8769C868429BE9586F5857A768758]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]) [staticcall] - │ │ │ └─ ← "0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd" - │ │ ├─ [0] VM::label((2020)StakingVestingLogic[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]: [0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingVestingLogic\u{1b}[0m[0x7CcBb3CD1b19BC1f1d5B7048400D41B1b796AbAd]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-mainnet/StakingVestingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816] - │ │ ├─ [0] VM::toString(2020) [staticcall] - │ │ │ └─ ← "2020" - │ │ ├─ [0] VM::toString((2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]) [staticcall] - │ │ │ └─ ← "0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816" - │ │ ├─ [0] VM::label((2020)StakingVesting[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]: [0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816], "(\u{1b}[94m2020\u{1b}[0m)\u{1b}[93mStakingVesting\u{1b}[0m[0xC768423A2AE2B5024cB58F3d6449A8f5DB6D8816]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readDir("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet") [staticcall] - │ │ │ └─ ← [("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/.chainId", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-0.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-1.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-2.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-3.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-4.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninBridgeManager.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcer.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayV2Logic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGovernanceAdmin.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetTimedMigrator.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingLogic.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingProxy.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/VaultForwarder-qc-test.json", 1, false, false), ("", "/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/solcInputs", 1, true, false)] - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/.chainId") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseUint("2021") [staticcall] - │ │ │ └─ ← 2021 - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]) [staticcall] - │ │ │ └─ ← "0xa316e3dDa5B0DECC0c6528EDE4595831794c089A" - │ │ ├─ [0] VM::label((2021)BridgeRewardLogic[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]: [0xa316e3dDa5B0DECC0c6528EDE4595831794c089A], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeRewardLogic\u{1b}[0m[0xa316e3dDa5B0DECC0c6528EDE4595831794c089A]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeRewardProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95]) [staticcall] - │ │ │ └─ ← "0x6E19cF519b7B83F7CE719B6d30232485d9609D95" - │ │ ├─ [0] VM::label((2021)BridgeReward[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]: [0x6E19cF519b7B83F7CE719B6d30232485d9609D95], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeReward\u{1b}[0m[0x6E19cF519b7B83F7CE719B6d30232485d9609D95]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e]) [staticcall] - │ │ │ └─ ← "0x7CA05B9246CC6e3053D37219C87653041F72565e" - │ │ ├─ [0] VM::label((2021)BridgeSlashLogic[0x7CA05B9246CC6e3053D37219C87653041F72565e]: [0x7CA05B9246CC6e3053D37219C87653041F72565e], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeSlashLogic\u{1b}[0m[0x7CA05B9246CC6e3053D37219C87653041F72565e]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeSlashProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]) [staticcall] - │ │ │ └─ ← "0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB" - │ │ ├─ [0] VM::label((2021)BridgeSlash[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]: [0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeSlash\u{1b}[0m[0x7FC81d20f7D1f53D0eA094fcBdd1b531B71225EB]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]) [staticcall] - │ │ │ └─ ← "0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6" - │ │ ├─ [0] VM::label((2021)BridgeTrackingLogic[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]: [0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeTrackingLogic\u{1b}[0m[0xE9C6e1691Db4c75d48744F32CB80B9Bf0829A4f6]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/BridgeTrackingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]) [staticcall] - │ │ │ └─ ← "0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA" - │ │ ├─ [0] VM::label((2021)BridgeTracking[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]: [0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mBridgeTracking\u{1b}[0m[0x880c5da7bFF9740464287EBFE381Be1cCCCE4FEA]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]) [staticcall] - │ │ │ └─ ← "0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B" - │ │ ├─ [0] VM::label((2021)FastFinalityTrackingLogic[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]: [0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mFastFinalityTrackingLogic\u{1b}[0m[0x51De6299fdE8cD49AC7475Fc13dB893955AC8b6B]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/FastFinalityTrackingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a]) [staticcall] - │ │ │ └─ ← "0x41aCDFe786171824a037f2Cd6224c5916A58969a" - │ │ ├─ [0] VM::label((2021)FastFinalityTracking[0x41aCDFe786171824a037f2Cd6224c5916A58969a]: [0x41aCDFe786171824a037f2Cd6224c5916A58969a], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mFastFinalityTracking\u{1b}[0m[0x41aCDFe786171824a037f2Cd6224c5916A58969a]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-0.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]) [staticcall] - │ │ │ └─ ← "0x23Dffc4a93c374A91Fbc1c33075af012b68663F7" - │ │ ├─ [0] VM::label((2021)ForwarderLogic-0[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]: [0x23Dffc4a93c374A91Fbc1c33075af012b68663F7], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-0\u{1b}[0m[0x23Dffc4a93c374A91Fbc1c33075af012b68663F7]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-1.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]) [staticcall] - │ │ │ └─ ← "0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016" - │ │ ├─ [0] VM::label((2021)ForwarderLogic-1[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]: [0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-1\u{1b}[0m[0x75C9bBA4b2Faeb7cdec391e7699F015DAeaCa016]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-2.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]) [staticcall] - │ │ │ └─ ← "0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351" - │ │ ├─ [0] VM::label((2021)ForwarderLogic-2[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]: [0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-2\u{1b}[0m[0x47E2e2F27f2F70Cb6A4cCa4a777d980020CCD351]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-3.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]) [staticcall] - │ │ │ └─ ← "0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649" - │ │ ├─ [0] VM::label((2021)ForwarderLogic-3[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]: [0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-3\u{1b}[0m[0x366D5C95CE8Da388C7401b11Fd88C0bd1bCBc649]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ForwarderLogic-4.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]) [staticcall] - │ │ │ └─ ← "0xc077617A8384FEC2f11A3B3B01Ca353ECB345181" - │ │ ├─ [0] VM::label((2021)ForwarderLogic-4[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]: [0xc077617A8384FEC2f11A3B3B01Ca353ECB345181], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mForwarderLogic-4\u{1b}[0m[0xc077617A8384FEC2f11A3B3B01Ca353ECB345181]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]) [staticcall] - │ │ │ └─ ← "0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab" - │ │ ├─ [0] VM::label((2021)MaintenanceLogic[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]: [0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMaintenanceLogic\u{1b}[0m[0x84d6e16a767A85D34964f26094BB46b0b7a4c8Ab]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/MaintenanceProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584]) [staticcall] - │ │ │ └─ ← "0x4016C80D97DDCbe4286140446759a3f0c1d20584" - │ │ ├─ [0] VM::label((2021)Maintenance[0x4016C80D97DDCbe4286140446759a3f0c1d20584]: [0x4016C80D97DDCbe4286140446759a3f0c1d20584], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mMaintenance\u{1b}[0m[0x4016C80D97DDCbe4286140446759a3f0c1d20584]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]) [staticcall] - │ │ │ └─ ← "0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43" - │ │ ├─ [0] VM::label((2021)ProfileLogic[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]: [0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProfileLogic\u{1b}[0m[0x246d81F6e2a1f4999Ca8aA0d253587a1dBf75E43]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/ProfileProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]) [staticcall] - │ │ │ └─ ← "0x3b67c8D22a91572a6AB18acC9F70787Af04A4043" - │ │ ├─ [0] VM::label((2021)Profile[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]: [0x3b67c8D22a91572a6AB18acC9F70787Af04A4043], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mProfile\u{1b}[0m[0x3b67c8D22a91572a6AB18acC9F70787Af04A4043]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninBridgeManager.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753]) [staticcall] - │ │ │ └─ ← "0xb0507f2f22697022eCb25963a00D3D076dAc5753" - │ │ ├─ [0] VM::label((2021)RoninBridgeManager[0xb0507f2f22697022eCb25963a00D3D076dAc5753]: [0xb0507f2f22697022eCb25963a00D3D076dAc5753], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninBridgeManager\u{1b}[0m[0xb0507f2f22697022eCb25963a00D3D076dAc5753]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcer.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950]) [staticcall] - │ │ │ └─ ← "0x51F44b52856d8E83692FCE53795eb848f410B950" - │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcer[0x51F44b52856d8E83692FCE53795eb848f410B950]: [0x51F44b52856d8E83692FCE53795eb848f410B950], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x51F44b52856d8E83692FCE53795eb848f410B950]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]) [staticcall] - │ │ │ └─ ← "0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF" - │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcerLogic[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]: [0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcerLogic\u{1b}[0m[0x39394AbCfBeA3D5829eB8b0995073BC48bBFF2cF]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayPauseEnforcerProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]) [staticcall] - │ │ │ └─ ← "0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95" - │ │ ├─ [0] VM::label((2021)RoninGatewayPauseEnforcer[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]: [0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayPauseEnforcer\u{1b}[0m[0x1aD54D61F47acBcBA99fb6540A1694EB2F47AB95]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGatewayV2Logic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]) [staticcall] - │ │ │ └─ ← "0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11" - │ │ ├─ [0] VM::label((2021)RoninGatewayV2Logic[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]: [0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGatewayV2Logic\u{1b}[0m[0x06F4A12C7FF5a4db1b7f7847425Ff0FEE22a0E11]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninGovernanceAdmin.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896]) [staticcall] - │ │ │ └─ ← "0x53Ea388CB72081A3a397114a43741e7987815896" - │ │ ├─ [0] VM::label((2021)RoninGovernanceAdmin[0x53Ea388CB72081A3a397114a43741e7987815896]: [0x53Ea388CB72081A3a397114a43741e7987815896], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninGovernanceAdmin\u{1b}[0m[0x53Ea388CB72081A3a397114a43741e7987815896]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]) [staticcall] - │ │ │ └─ ← "0xa7E978bD77b1B64D100eC0a62898395cb4B47a56" - │ │ ├─ [0] VM::label((2021)RoninTrustedOrganizationLogic[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]: [0xa7E978bD77b1B64D100eC0a62898395cb4B47a56], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninTrustedOrganizationLogic\u{1b}[0m[0xa7E978bD77b1B64D100eC0a62898395cb4B47a56]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninTrustedOrganizationProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]) [staticcall] - │ │ │ └─ ← "0x7507dc433a98E1fE105d69f19f3B40E4315A4F32" - │ │ ├─ [0] VM::label((2021)RoninTrustedOrganization[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]: [0x7507dc433a98E1fE105d69f19f3B40E4315A4F32], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninTrustedOrganization\u{1b}[0m[0x7507dc433a98E1fE105d69f19f3B40E4315A4F32]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]) [staticcall] - │ │ │ └─ ← "0x6FE9CF3C8f1de99b1E368e941104d51561dF145d" - │ │ ├─ [0] VM::label((2021)RoninValidatorSetLogic[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]: [0x6FE9CF3C8f1de99b1E368e941104d51561dF145d], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSetLogic\u{1b}[0m[0x6FE9CF3C8f1de99b1E368e941104d51561dF145d]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]) [staticcall] - │ │ │ └─ ← "0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d" - │ │ ├─ [0] VM::label((2021)RoninValidatorSet[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]: [0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSet\u{1b}[0m[0x54B3AC74a90E64E8dDE60671b6fE8F8DDf18eC9d]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/RoninValidatorSetTimedMigrator.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E]) [staticcall] - │ │ │ └─ ← "0xc998920E55f68f631fc4fb1e0dA11A16c637044E" - │ │ ├─ [0] VM::label((2021)RoninValidatorSetTimedMigrator[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]: [0xc998920E55f68f631fc4fb1e0dA11A16c637044E], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mRoninValidatorSetTimedMigrator\u{1b}[0m[0xc998920E55f68f631fc4fb1e0dA11A16c637044E]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324]) [staticcall] - │ │ │ └─ ← "0x83C5bdBce6d60038468a643c817CaDC6d1e12324" - │ │ ├─ [0] VM::label((2021)SlashIndicatorLogic[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]: [0x83C5bdBce6d60038468a643c817CaDC6d1e12324], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mSlashIndicatorLogic\u{1b}[0m[0x83C5bdBce6d60038468a643c817CaDC6d1e12324]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/SlashIndicatorProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752]) [staticcall] - │ │ │ └─ ← "0xF7837778b6E180Df6696C8Fa986d62f8b6186752" - │ │ ├─ [0] VM::label((2021)SlashIndicator[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]: [0xF7837778b6E180Df6696C8Fa986d62f8b6186752], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mSlashIndicator\u{1b}[0m[0xF7837778b6E180Df6696C8Fa986d62f8b6186752]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]) [staticcall] - │ │ │ └─ ← "0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB" - │ │ ├─ [0] VM::label((2021)StakingLogic[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]: [0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingLogic\u{1b}[0m[0x47FF1a3E1d8A43898Dd0BDd97e63Fe1B14087DdB]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28]) [staticcall] - │ │ │ └─ ← "0x9C245671791834daf3885533D24dce516B763B28" - │ │ ├─ [0] VM::label((2021)Staking[0x9C245671791834daf3885533D24dce516B763B28]: [0x9C245671791834daf3885533D24dce516B763B28], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStaking\u{1b}[0m[0x9C245671791834daf3885533D24dce516B763B28]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingLogic.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56]) [staticcall] - │ │ │ └─ ← "0x85b8BFd0b4616360f75d12F591538c6350fa4F56" - │ │ ├─ [0] VM::label((2021)StakingVestingLogic[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]: [0x85b8BFd0b4616360f75d12F591538c6350fa4F56], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingVestingLogic\u{1b}[0m[0x85b8BFd0b4616360f75d12F591538c6350fa4F56]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/StakingVestingProxy.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]) [staticcall] - │ │ │ └─ ← "0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441" - │ │ ├─ [0] VM::label((2021)StakingVesting[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]: [0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mStakingVesting\u{1b}[0m[0x023930A8ad88dc5AB3a3b8E8cb849BbD6a5c8441]") - │ │ │ └─ ← () - │ │ ├─ [0] VM::readFile("/Users/huy.huynh/Desktop/workspace/smart_contract/axieinfinity/ronin-bridge-contracts/deployments/ronin-testnet/VaultForwarder-qc-test.json") [staticcall] - │ │ │ └─ ←  - │ │ ├─ [0] VM::parseJsonAddress("", ".address") [staticcall] - │ │ │ └─ ← (2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA] - │ │ ├─ [0] VM::toString(2021) [staticcall] - │ │ │ └─ ← "2021" - │ │ ├─ [0] VM::toString((2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]) [staticcall] - │ │ │ └─ ← "0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA" - │ │ ├─ [0] VM::label((2021)VaultForwarder-qc-test[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]: [0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA], "(\u{1b}[94m2021\u{1b}[0m)\u{1b}[93mVaultForwarder-qc-test\u{1b}[0m[0xeC97D6E75295495b53bac049D9F2E39EfC3ef9DA]") - │ │ │ └─ ← () - │ │ └─ ← 0x608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c63430008170033 - │ ├─ [0] VM::etch(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], 0x608060405234801561001057600080fd5b50600436106102745760003560e01c806379a7cfee11610151578063c9b294a1116100c3578063e26d0fb811610087578063e26d0fb81461065e578063e8dc9f9e14610671578063e8f98f8814610684578063f431103e14610697578063f55de1c0146106b7578063ff4e1d29146106ca57610274565b8063c9b294a1146105fd578063cedb75ef14610610578063cfb1418e14610625578063d3a3968614610638578063d88236271461064b57610274565b80639c8afddb116101155780639c8afddb1461055c578063a503f7f6146105a9578063a6d90726146105bc578063b3148946146105cf578063be40131f146105d7578063be657518146105ea57610274565b806379a7cfee146105085780637b3781b41461051b578063857d8fd31461052e578063871c24411461054157806387c2a5f91461055457610274565b80633147acd2116101ea57806354b975f8116101ae57806354b975f81461049e578063592a3eb3146104b15780635dd88699146104c45780635e01eb5a146104d757806362bce40b146104df578063667954fc146104e757610274565b80633147acd21461043157806334781f1e14610444578063448522d91461046557806346680400146104785780634af69e161461048b57610274565b80631bd523a61161023c5780631bd523a6146103b25780631da438e1146103c557806323cfba33146103d857806325194225146103eb578063279c966a146103fe578063310fea181461041157610274565b80630110da29146103305780630b60eb131461034e5780630ddd44721461036157806311dc119e146103745780631b0c440b14610387575b632273febf60e21b6000356001600160e01b031916016102a25760006102986106d2565b9050805160208201f35b60405162461bcd60e51b815260206004820152605060248201527f47656e6572616c436f6e6669673a20556e6b6e6f776e20696e7374727563746960448201527f6f6e2c20706c656173652072656e616d6520696e7465726661636520746f207360648201526f6861726564417267756d656e7473282960801b608482015260a4015b60405180910390fd5b005b610338610764565b6040516103459190613c4e565b60405180910390f35b61033861035c366004613d41565b610773565b61033861036f366004613da8565b61083a565b610338610382366004613ddc565b6108a2565b61039a610395366004613e34565b610b69565b6040516001600160a01b039091168152602001610345565b6103386103c0366004613e34565b610bd5565b6103386103d3366004613e34565b610d0a565b6103386103e6366004613e34565b610e0a565b6103386103f9366004613e4d565b610e2a565b61033861040c366004613e34565b610e3a565b61042461041f366004613e34565b610f37565b6040516103459190613ec2565b61032e61043f366004613e34565b610f52565b61032e610452366004613f0f565b6015805460ff1916911515919091179055565b610338610473366004613e34565b6111ba565b61032e610486366004613f31565b6112e2565b610424610499366004613e34565b611305565b61032e6104ac366004613f79565b611323565b61032e6104bf366004613fea565b6114d7565b61032e6104d23660046140a8565b61159c565b61039a6115b9565b6103386116b3565b6104fa6104f53660046140ee565b6116d5565b604051908152602001610345565b61032e610516366004614132565b611970565b6104fa610529366004614160565b611a9d565b6104fa61053c366004613e34565b611b10565b6104fa61054f366004614190565b611ba1565b6103386106d2565b60408051808201825260008082526020918201528151808301835260015460ff80821615158084526101009092041615159183019182528351908152905115159181019190915201610345565b6104fa6105b7366004613e34565b611bad565b6103386105ca3660046141ad565b611e65565b610338612176565b6103386105e5366004613e4d565b612185565b6103386105f8366004613d41565b612195565b61032e61060b3660046141e6565b61224f565b466000908152601760205260409020546104fa565b6103386106333660046141ad565b6123cc565b61039a610646366004614234565b6125db565b610338610659366004613ddc565b6125fa565b61033861066c366004613e34565b6128b4565b61033861067f366004613da8565b6129e7565b61039a610692366004613f79565b612a44565b6104fa6106a5366004613e34565b60009081526017602052604090205490565b61039a6106c53660046140a8565b612a86565b610338612ace565b6060601880546106e190614256565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90614256565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b5050505050905090565b6060600280546106e190614256565b6060600082600181111561078957610789614290565b1461079d576107988484611e65565b610832565b6108328484600a80546107af90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546107db90614256565b80156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b5050505050612185565b949350505050565b60606000600c54600160a01b900460ff16600181111561085c5761085c614290565b1461087c57600c54610877906001600160a01b031683611e65565b61089c565b600b54600a805461089c926001600160a01b03169185916107af90614256565b92915050565b604080516008808252610120820190925260609160009190816020015b60608152602001906001900390816108bf5790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110610906576109066142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110610943576109436142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b8152508160028151811061097e5761097e6142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106109bb576109bb6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4091908101906142ec565b81600481518110610a5357610a536142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b81525081600581518110610a9757610a976142a6565b6020026020010181905250610aab83612b12565b81600681518110610abe57610abe6142a6565b60200260200101819052508381600781518110610add57610add6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c83398151915290638916046790610b19908490600401614334565b6000604051808303816000875af1158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6091908101906142ec565b95945050505050565b600080610b75836111ba565b9050805160001415610b8684612b36565b604051602001610b9691906143b4565b60405160208183030381529060405290610bc35760405162461bcd60e51b81526004016103259190613c4e565b50610bce4682612a86565b9392505050565b6000818152601060205260409020805460609190610bf290614256565b159050610c975760008281526010602052604090208054610c1290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90614256565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b50505050509050919050565b600d8054610ca490614256565b159050610ce6576000828152600f60209081526040918290209151610cd092600d9290918291016144ad565b6040516020818303038152906040529050919050565b6000828152600f60209081526040918290209151610cd09291016144e4565b919050565b6000818152601660205260409020600201805460609190610d2a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5690614256565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602660248201527f4e6574776f726b436f6e6669673a204e6574776f726b20616c696173206e6f7460448201526508199bdd5b9960d21b6064820152608401610325565b6000818152601660205260409020600501805460609190610c1290614256565b6060610832848461038285612b5c565b6000818152601660205260409020600401805460609190610e5a90614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8690614256565b8015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b505050505090508051600003610d055760405162461bcd60e51b815260206004820152602360248201527f4e6574776f726b20436f6e6669673a20454e56206c6162656c206e6f7420666f6044820152621d5b9960ea1b6064820152608401610325565b600081815260116020526040812060609190610bce90612e80565b611065610f7960405180604001604052806003815260200162051f1f60e91b815250612e8d565b6040518060400160405280600d81526020016c29bbb4ba31b434b733903a379d60991b815250611046601660008681526020019081526020016000206002018054610fc390614256565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef90614256565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b5050505050612eb6565b604051806040016040528060018152602001600560f91b815250612edf565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa4538981016110e35760405162461bcd60e51b815260206004820152601e60248201527f4e6574776f726b20436f6e6669673a20556e65786973747320666f726b2100006044820152606401610325565b604051639ebf682760e01b815260048101829052600080516020614e2c83398151915290639ebf682790602401600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b505050600083815260166020526040902060010154461490506111ae5760405162461bcd60e51b815260206004820152602260248201527f4e6574776f726b436f6e6669673a2053776974636820636861696e206661696c604482015261195960f21b6064820152608401610325565b6111b6612f2e565b5050565b606060006111c783612b36565b6000848152600f602052604090208054919250906111e490614256565b80601f016020809104026020016040519081016040528092919081815260200182805461121090614256565b801561125d5780601f106112325761010080835404028352916020019161125d565b820191906000526020600020905b81548152906001019060200180831161124057829003601f168201915b50505050509150818051906020012081805190602001201461127f5780611281565b815b915081516000141581600f60008681526020019081526020016000206040516020016112ae929190614504565b604051602081830303815290604052906112db5760405162461bcd60e51b81526004016103259190613c4e565b5050919050565b601880546112ef90614256565b1590506112f95750565b60186111b682826145e9565b60008181526016602052604090206001015460609061089c90610f37565b60005460ff1615611332575050565b80156114b4576000611396604051806040016040528060018152602001600160fe1b81525084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506131239050565b805190915060005b818110156114b0576113ed604051806040016040528060038152602001626c6f6760e81b8152508483815181106113d7576113d76142a6565b60200260200101516131cd90919063ffffffff16565b15611403576001805460ff1916811790556114a8565b611437604051806040016040528060068152602001653a3932bd37b960d11b8152508483815181106113d7576113d76142a6565b15611450576001805461ff0019166101001790556114a8565b6114a86114896040518060400160405280601581526020017402ab739bab83837b93a32b21031b7b6b6b0b7321d1605d1b815250612eb6565b84838151811061149b5761149b6142a6565b60200260200101516131e3565b60010161139e565b5050505b60026114c18284836146a8565b506000805460ff191660011790556111b6613228565b60008681526017602052604090819020869055805160c08101909152806114fe86896116d5565b815260208082018990526040808301889052606083018790526080830186905260a09092018490526000888152601682528290208351815590830151600182015590820151600282019061155290826145e9565b506060820151600382019061156790826145e9565b506080820151600482019061157c90826145e9565b5060a0820151600582019061159190826145e9565b505050505050505050565b60008281526010602052604090206115b482826145e9565b505050565b600154600090610100900460ff166115dc57600b546001600160a01b03166115e9565b600c546001600160a01b03165b90506001600160a01b03811615801561162457506116246116164660009081526017602052604090205490565b611620600061340f565b1490565b1561164c57507fee6e12ba256a78bc5d3ab9651804c8ab1f12e6bbf3894d4083f33e07309d1f385b6001600160a01b0381166116b05760405162461bcd60e51b815260206004820152602560248201527f47656e6572616c436f6e6669673a2053656e6465722069732061646472657373604482015264283078302960d81b6064820152608401610325565b90565b6040805180820190915260088152672222a82627aca2a960c11b602082015290565b6000807f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316632f103f226040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611755575060408051601f3d908101601f1916820190925261175291810190614768565b60015b6117995761178261177d604051806060016040528060318152602001614dfb60319139612eb6565b613434565b50600080516020614e4c833981519152905061089c565b90504683036117a957905061089c565b60155460ff166117ca5750600080516020614e4c833981519152905061089c565b60008381526017602090815260408083205483526016909152902054600080516020614e4c833981519152811461180457915061089c9050565b60405163975a6ce960e01b8152600090600080516020614e2c8339815191529063975a6ce990611838908990600401613c4e565b600060405180830381865afa158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906142ec565b604051630637469360e31b8152909150600080516020614e2c833981519152906331ba3498906118b1908490600401613c4e565b6020604051808303816000875af19250505080156118ec575060408051601f3d908101601f191682019092526118e991810190614768565b60015b6119345761191a6119146040518060600160405280602b8152602001614dd0602b9139613477565b826131e3565b50600080516020614e4c833981519152925061089c915050565b61196561195f8860405160200161194b9190614781565b604051602081830303815290604052612e8d565b826134a0565b935061089c92505050565b6000838152601660205260408120600101549061198c846111ba565b9050811580159061199d5750805115155b611a025760405162461bcd60e51b815260206004820152603060248201527f47656e6572616c436f6e6669673a204e6574776f726b206f7220436f6e74726160448201526f18dd0812d95e481b9bdd08199bdd5b9960821b6064820152608401610325565b611a0d82848361224f565b6000828152601160205260409020611a2590846134e5565b5060008281526013602090815260408083206001600160a01b038716845282528083208790558483526012909152908190209051849190611a679084906147df565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050505050565b60008281526013602090815260408083206001600160a01b0385168452909152902054801515611acc82612b36565b604051602001611adc91906147fb565b60405160208183030381529060405290611b095760405162461bcd60e51b81526004016103259190613c4e565b5092915050565b6000818152601660205260409020547f3650438c5b6b158a3b6da933280b9ac715c85c6e9616415bededfd3e2fa453898101610d055760405162461bcd60e51b815260206004820152602a60248201527f4e6574776f726b436f6e6669673a204e6574776f726b20666f726b206973206e6044820152691bdd0818dc99585d195960b21b6064820152608401610325565b600061089c4683611a9d565b600080601660008481526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282018054611bf290614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90614256565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050508152602001600382018054611c8490614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb090614256565b8015611cfd5780601f10611cd257610100808354040283529160200191611cfd565b820191906000526020600020905b815481529060010190602001808311611ce057829003601f168201915b50505050508152602001600482018054611d1690614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4290614256565b8015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b50505050508152602001600582018054611da890614256565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490614256565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b5050509190925250506015805460ff19166001179055509050611e4c816040015182602001516116d5565b6000938452601660205260409093208390555090919050565b604080516009808252610140820190925260609160009190816020015b6060815260200190600190039081611e825790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110611ec957611ec96142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b81525081600181518110611f0657611f066142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b81525081600281518110611f4157611f416142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110611f7e57611f7e6142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015611fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261200391908101906142ec565b81600481518110612016576120166142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b81525081600581518110612055576120556142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600681518110612092576120926142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b815250816007815181106120d4576120d46142a6565b602002602001018190525082816008815181106120f3576120f36142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063891604679061212f908490600401614334565b6000604051808303816000875af115801561214e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261083291908101906142ec565b6060601480546106e190614256565b6060610832848461065985612b5c565b606060008260018111156121ab576121ab614290565b146121ba5761079884846123cc565b6108328484600a80546121cc90614256565b80601f01602080910402602001604051908101604052809291908181526020018280546121f890614256565b80156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050610e2a565b60405163348051d760e11b815260048101849052600080516020614e2c8339815191529063c657c7189084906122d4908490636900a3ae90602401600060405180830381865afa1580156122a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122cf91908101906142ec565b612e8d565b6122dd85612eb6565b604051632b65311f60e11b81526001600160a01b0388166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa15801561232f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906142ec565b6040516020016123699392919061487c565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016123959291906148f6565b600060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050505050565b604080516007808252610100820190925260609160009190816020015b60608152602001906001900390816123e95790505090506040518060400160405280600481526020016318d85cdd60e21b81525081600081518110612430576124306142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061246d5761246d6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106124a8576124a86142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b815250816003815181106124e5576124e56142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0385166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261256a91908101906142ec565b8160048151811061257d5761257d6142a6565b6020026020010181905250604051806040016040528060088152602001671696ba3932bd37b960c11b815250816005815181106125bc576125bc6142a6565b602002602001018190525082816006815181106120f3576120f36142a6565b600082815260166020526040812060010154610bce906106c5846111ba565b60408051600a808252610160820190925260609160009190816020015b60608152602001906001900390816126175790505090506040518060400160405280600481526020016318d85cdd60e21b8152508160008151811061265e5761265e6142a6565b6020026020010181905250604051806040016040528060068152602001651dd85b1b195d60d21b8152508160018151811061269b5761269b6142a6565b60200260200101819052506040518060400160405280600481526020016339b4b3b760e11b815250816002815181106126d6576126d66142a6565b6020026020010181905250604051806040016040528060068152602001652d2d66726f6d60d01b81525081600381518110612713576127136142a6565b6020908102919091010152604051632b65311f60e11b81526001600160a01b0386166004820152600080516020614e2c833981519152906356ca623e90602401600060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261279891908101906142ec565b816004815181106127ab576127ab6142a6565b60200260200101819052506040518060400160405280600d81526020016c2d2d707269766174652d6b657960981b815250816005815181106127ef576127ef6142a6565b602002602001018190525061280383612b12565b81600681518110612816576128166142a6565b6020026020010181905250604051806040016040528060068152602001652d2d6461746160d01b81525081600781518110612853576128536142a6565b60200260200101819052506040518060400160405280600b81526020016a2d2d66726f6d2d66696c6560a81b81525081600881518110612895576128956142a6565b60200260200101819052508381600981518110610add57610add6142a6565b6000818152601660205260408120600301805460609291906128d590614256565b80601f016020809104026020016040519081016040528092919081815260200182805461290190614256565b801561294e5780601f106129235761010080835404028352916020019161294e565b820191906000526020600020905b81548152906001019060200180831161293157829003601f168201915b5050505050905080516000036129bc5760405162461bcd60e51b815260206004820152602d60248201527f4e6574776f726b436f6e6669673a204465706c6f796d656e742064697265637460448201526c1bdc9e481b9bdd08199bdd5b99609a1b6064820152608401610325565b6014816040516020016129d092919061491a565b604051602081830303815290604052915050919050565b60606000600c54600160a01b900460ff166001811115612a0957612a09614290565b14612a2457600c54610877906001600160a01b0316836123cc565b600b54600a805461089c926001600160a01b03169185916121cc90614256565b6000610bce4684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a8692505050565b6000828152601260205260408082209051612aa29084906147df565b90815260405160209181900382018120546001600160a01b0316925082151591611adc9185910161493f565b6040805180820190915260098152687472657a6f723a2f2f60b81b602082015290565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6060612b1d826134fa565b8051613078825260020160011990910190815292915050565b604080518082019091526000808252601f8201839052815182016020015260609061089c565b60405163c1978d1f60e01b8152600090600080516020614e2c8339815191529063c1978d1f90612b90908590600401613c4e565b602060405180830381865afa925050508015612bc9575060408051601f3d908101601f19168201909252612bc691810190614768565b60015b61089c5760408051600380825260808201909252600091816020015b6060815260200190600190039081612be557505060405163f877cb1960e01b8152909150600080516020614e2c8339815191529063f877cb1990612c2d908690600401613c4e565b600060405180830381865afa925050508015612c6b57506040513d6000823e601f3d908101601f19168201604052612c6891908101906142ec565b60015b612ca65782604051602001612c8091906149aa565b60408051601f198184030181529082905262461bcd60e51b825261032591600401613c4e565b8082600281518110612cba57612cba6142a6565b6020026020010181905250506040518060400160405280600281526020016106f760f41b81525081600081518110612cf457612cf46142a6565b6020026020010181905250604051806040016040528060048152602001631c99585960e21b81525081600181518110612d2f57612d2f6142a6565b6020908102919091010152604051638916046760e01b8152600080516020614e2c8339815191529063fa91454d9082906371aad10d908290638916046790612d7b908890600401614334565b6000604051808303816000875af1158015612d9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dc291908101906142ec565b6040518263ffffffff1660e01b8152600401612dde9190613c4e565b600060405180830381865afa158015612dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e2391908101906142ec565b6040518263ffffffff1660e01b8152600401612e3f9190613c4e565b602060405180830381865afa158015612e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190614768565b60606000610bce8361355c565b606061089c604051806040016040528060058152602001641b5b39346d60d81b815250836135b7565b606061089c604051806040016040528060058152602001641b5b39336d60d81b815250836135b7565b612f2884848484604051602401612ef99493929190614a7f565b60408051601f198184030181529190526020810180516001600160e01b0316636f34790560e11b179052613601565b50505050565b60405163348051d760e11b81524360048201526131219061177d90600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fa791908101906142ec565b60405163348051d760e11b8152426004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015612ff0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261301891908101906142ec565b60405163348051d760e11b81523a6004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261308991908101906142ec565b60405163348051d760e11b8152456004820152600080516020614e2c83398151915290636900a3ae90602401600060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130fa91908101906142ec565b60405160200161310d9493929190614ad7565b604051602081830303815290604052612eb6565b565b60606000613131848461360a565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146131995760405182820380825286601f8201165b8b8501810151838201528701806131715750600082820160200152603f018616810160405284525b87516020949094019301905081831061315457505050508091508251611b0957602081019150600281510382525092915050565b8051602091820120825192909101919091201490565b6111b682826040516024016131f9929190614bae565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b179052613601565b600154610100900460ff1615613349576132406136d9565b600c8054604080518082019091529182526b2a3932bd37b929b2b73232b960a11b602083015261327b9146916001600160a01b03169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600c54915163028a249b60e41b81526001600160a01b03909216600483015261312191600080516020614e2c833981519152906328a249b0906024015b6000604051808303816000875af11580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332391908101906142ec565b60405180604001604052806008815260200167456e61626c65642160c01b815250613870565b4660009081526017602052604081205461336290610e3a565b905061336d816138b7565b600b5460408051808201909152600981526822a72b29b2b73232b960b91b60208201526133a79146916001600160a01b039091169061224f565b604080518082018252600e81526d23b2b732b930b621b7b73334b39d60911b6020820152600b54915163028a249b60e41b81526001600160a01b03909216600483015261340c91600080516020614e2c833981519152906328a249b0906024016132dc565b50565b600061089c61341d83613972565b6000601f600183510310601f830151029050919050565b61340c816040516024016134489190613c4e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613601565b606061089c604051806040016040528060058152602001641b5b39316d60d81b815250836135b7565b6111b682826040516024016134b6929190614bd3565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052613601565b6000610bce836001600160a01b038416613a84565b606060806040510190506020810160405260008152806f30313233343536373839616263646566600f52600119835b600f811651938201936001850153600f8160041c1651845360081c80613529575050819003601f19909101908152919050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c8b57602002820191906000526020600020905b8154815260200190600101908083116135985750505050509050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016135ea93929190614bf5565b604051602081830303815290604052905092915050565b61340c81612af1565b6060825182518181116136d157602085019450602084019350602060405101925084600182848801030160006020841061364357508286205b601f841660200360031b87515b8951818118831c6136a55783156136835783878c20146136835760018b019a50848b1061367d57506136b4565b50613650565b858b0389529986019960209098019786156136a557848b1061367d57506136b4565b5060018a019950838a10613650575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b32731804c8ab1f12e6bbf3894d4083f33e07309d1f381461370b57600c80546001600160a01b0319163217905561385b565b600080516020614e2c83398151915263f877cb196137276116b3565b6040518263ffffffff1660e01b81526004016137439190613c4e565b600060405180830381865afa92505050801561378157506040513d6000823e601f3d908101601f1916820160405261377e91908101906142ec565b60015b6137a65761378d6116b3565b613795612ace565b604051602001612c80929190614c38565b600080516020614e2c83398151915263c6ce059d6137dc6137c5612ace565b604080516020810190915260008152859190613ad3565b6040518263ffffffff1660e01b81526004016137f89190613c4e565b602060405180830381865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d63565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505b600c805460ff60a01b1916600160a01b179055565b6115b483838360405160240161388893929190614d80565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b179052613601565b600a6138c382826145e9565b50600c805460ff60a01b19169055600080516020614e2c83398151915263221000646138ee83612b5c565b6040518263ffffffff1660e01b815260040161390c91815260200190565b6020604051808303816000875af115801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f9190614d63565b600b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600082600281111561398857613988614290565b036139ae575050604080518082019091526005815264131bd8d85b60da1b602082015290565b60018260028111156139c2576139c2614290565b036139ef57505060408051808201909152600c81526b149bdb9a5b95195cdd1b995d60a21b602082015290565b6002826002811115613a0357613a03614290565b03613a3057505060408051808201909152600c81526b149bdb9a5b93585a5b9b995d60a21b602082015290565b60405162461bcd60e51b8152602060048201526024808201527f44656661756c744e6574776f726b3a20556e6b6e6f776e206e6574776f726b206044820152636e616d6560e01b6064820152608401610325565b6000818152600183016020526040812054613acb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b60608351835183516020870196506020860195506020850194506020604051019350828701838311613ba557600183820301600060208510613b1457508388205b601f851660200360031b89515b8b51818118831c613b8c578315613b5b5783888e2014613b5b57808a5260019c8d019c90990198848d10613b555750613ba0565b50613b21565b60005b8b8101518b820152602001878110613b5e57509b87019b988601988715613b8c57848d10613b555750613ba0565b895260019b8c019b90980197838c10613b21575b505050505b84935060206040510194508781038585030192505b80881015613bd5578751845260209788019790930192613bba565b50506000818401908152602001604052601f19909201918252509392505050565b613121614db9565b60005b83811015613c19578181015183820152602001613c01565b50506000910152565b60008151808452613c3a816020860160208601613bfe565b601f01601f19169290920160200192915050565b602081526000610bce6020830184613c22565b6001600160a01b038116811461340c57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613cb457613cb4613c76565b604052919050565b60006001600160401b03821115613cd557613cd5613c76565b50601f01601f191660200190565b6000613cf6613cf184613cbc565b613c8c565b9050828152838383011115613d0a57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613d3257600080fd5b610bce83833560208501613ce3565b600080600060608486031215613d5657600080fd5b8335613d6181613c61565b925060208401356001600160401b03811115613d7c57600080fd5b613d8886828701613d21565b925050604084013560028110613d9d57600080fd5b809150509250925092565b600060208284031215613dba57600080fd5b81356001600160401b03811115613dd057600080fd5b61083284828501613d21565b600080600060608486031215613df157600080fd5b8335613dfc81613c61565b925060208401356001600160401b03811115613e1757600080fd5b613e2386828701613d21565b925050604084013590509250925092565b600060208284031215613e4657600080fd5b5035919050565b600080600060608486031215613e6257600080fd5b8335613e6d81613c61565b925060208401356001600160401b0380821115613e8957600080fd5b613e9587838801613d21565b93506040860135915080821115613eab57600080fd5b50613eb886828701613d21565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613f035783516001600160a01b031683529284019291840191600101613ede565b50909695505050505050565b600060208284031215613f2157600080fd5b81358015158114610bce57600080fd5b600060208284031215613f4357600080fd5b81356001600160401b03811115613f5957600080fd5b8201601f81018413613f6a57600080fd5b61083284823560208401613ce3565b60008060208385031215613f8c57600080fd5b82356001600160401b0380821115613fa357600080fd5b818501915085601f830112613fb757600080fd5b813581811115613fc657600080fd5b866020828501011115613fd857600080fd5b60209290920196919550909350505050565b60008060008060008060c0878903121561400357600080fd5b863595506020870135945060408701356001600160401b038082111561402857600080fd5b6140348a838b01613d21565b9550606089013591508082111561404a57600080fd5b6140568a838b01613d21565b9450608089013591508082111561406c57600080fd5b6140788a838b01613d21565b935060a089013591508082111561408e57600080fd5b5061409b89828a01613d21565b9150509295509295509295565b600080604083850312156140bb57600080fd5b8235915060208301356001600160401b038111156140d857600080fd5b6140e485828601613d21565b9150509250929050565b6000806040838503121561410157600080fd5b82356001600160401b0381111561411757600080fd5b61412385828601613d21565b95602094909401359450505050565b60008060006060848603121561414757600080fd5b83359250602084013591506040840135613d9d81613c61565b6000806040838503121561417357600080fd5b82359150602083013561418581613c61565b809150509250929050565b6000602082840312156141a257600080fd5b8135610bce81613c61565b600080604083850312156141c057600080fd5b82356141cb81613c61565b915060208301356001600160401b038111156140d857600080fd5b6000806000606084860312156141fb57600080fd5b83359250602084013561420d81613c61565b915060408401356001600160401b0381111561422857600080fd5b613eb886828701613d21565b6000806040838503121561424757600080fd5b50508035926020909101359150565b600181811c9082168061426a57607f821691505b60208210810361428a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006142ca613cf184613cbc565b90508281528383830111156142de57600080fd5b610bce836020830184613bfe565b6000602082840312156142fe57600080fd5b81516001600160401b0381111561431457600080fd5b8201601f8101841361432557600080fd5b610832848251602084016142bc565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561438b57603f19888603018452614379858351613c22565b9450928501929085019060010161435d565b5092979650505050505050565b600081516143aa818560208601613bfe565b9290920192915050565b7f436f6e7472616374436f6e666967286765744164647265737346726f6d43757281527f72656e744e6574776f726b293a20436f6e74726163742054797065206e6f74206020820152660ccdeeadcc840560cb1b604082015260008251614422816047850160208701613bfe565b602960f81b6047939091019283015250604801919050565b6000815461444781614256565b6001828116801561445f5760018114614474576144a3565b60ff19841687528215158302870194506144a3565b8560005260208060002060005b8581101561449a5781548a820152908401908201614481565b50505082870194505b5050505092915050565b60006144c26144bc838761443a565b8561443a565b641739b7b61d60d91b81526144da600582018561443a565b9695505050505050565b60006144f0828461443a565b630b9cdbdb60e21b81526004019392505050565b7f436f6e7472616374436f6e66696728676574436f6e74726163744e616d65293a81527f20436f6e74726163742054797065206e6f7420666f756e64202800000000000060208201526000835161456281603a850160208801613bfe565b61148560f11b603a9184019182015271029ba37b930b3b2902730b6b29026b0b81d160751b603c820152610b60604e82018561443a565b601f8211156115b4576000816000526020600020601f850160051c810160208610156145c25750805b601f850160051c820191505b818110156145e1578281556001016145ce565b505050505050565b81516001600160401b0381111561460257614602613c76565b614616816146108454614256565b84614599565b602080601f83116001811461464b57600084156146335750858301515b600019600386901b1c1916600185901b1785556145e1565b600085815260208120601f198616915b8281101561467a5788860151825594840194600190910190840161465b565b50858210156146985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156146bf576146bf613c76565b6146d3836146cd8354614256565b83614599565b6000601f84116001811461470757600085156146ef5750838201355b600019600387901b1c1916600186901b178355614761565b600083815260209020601f19861690835b828110156147385786850135825560209485019460019092019101614718565b50868210156147555760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561477a57600080fd5b5051919050565b6e02732ba3bb7b935a1b7b73334b39d1608d1b8152600082516147ab81600f850160208701613bfe565b7f20666f726b2063726561746564207769746820666f726b49643a000000000000600f939091019283015250602901919050565b600082516147f1818460208701613bfe565b9190910192915050565b7f436f6e7472616374436f6e66696728676574436f6e747261637454797065427981527f52617744617461293a20436f6e747261637454797065206e6f7420666f756e64602082015261040560f31b604082015260008251614864816042850160208701613bfe565b602960f81b6042939091019283015250604301919050565b600560fb1b815260008451614898816001850160208901613bfe565b602960f81b60019184019182015284516148b9816002840160208901613bfe565b605b60f81b6002929091019182015283516148db816003840160208801613bfe565b605d60f81b6003929091019182015260040195945050505050565b6001600160a01b038316815260406020820181905260009061083290830184613c22565b6000614926828561443a565b8351614936818360208801613bfe565b01949350505050565b7f436f6e7472616374436f6e66696728676574416464726573734279526177446181527f7461293a2041646472657373206e6f7420666f756e643a20000000000000000060208201526000825161499d816038850160208701613bfe565b9190910160380192915050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720656e81527f762061646472657373210a2d20506c65617365206d616b6520602e656e76602060208201527f66696c6520616e6420637265617465206669656c642060000000000000000000604082015260008251614a2e816057850160208701613bfe565b603d60f81b60579390910192830152507f7b6f705f7365637265745f7265666572656e63655f6f725f796f75725f70726960588201526903b30ba32afb5b2bcbeb60b51b6078820152608201919050565b608081526000614a926080830187613c22565b8281036020840152614aa48187613c22565b90508281036040840152614ab88186613c22565b90508281036060840152614acc8185613c22565b979650505050505050565b6d0213637b1b590273ab6b132b91d160951b815260008551614b0081600e850160208a01613bfe565b8083019050620103e160ed1b80600e8301526a02a34b6b2b9ba30b6b81d160ad1b60118301528651614b3981601c850160208b01613bfe565b601c92019182018190526a023b0b990283934b1b29d160ad1b601f8301528551614b6a81602a850160208a01613bfe565b602a920191820152700213637b1b59023b0b9902634b6b4ba1d1607d1b602d820152614b99603e820185614398565b600560f91b8152600101979650505050505050565b604081526000614bc16040830185613c22565b8281036020840152610b608185613c22565b604081526000614be66040830185613c22565b90508260208301529392505050565b60008451614c07818460208901613bfe565b845190830190614c1b818360208901613bfe565b8451910190614c2e818360208801613bfe565b0195945050505050565b7f0a47656e6572616c436f6e6669673a204572726f722066696e64696e6720747281527f657a6f722061646472657373210a2d20506c65617365206f766572726964652060208201527f64656661756c742073656e646572207769746820602d2d73656e646572207b7960408201527f6f75725f7472657a6f725f6163636f756e747d6020746167200a2d204f72206d60608201527f616b6520602e656e76602066696c6520616e6420637265617465206669656c64608082015261010360f51b60a082015260008351614d138160a2850160208801613bfe565b603d60f81b60a2918401918201528351614d348160a3840160208801613bfe565b7503dbcb7bab92fba3932bd37b92fb0b1b1b7bab73a3eb60551b60a3929091019182015260b901949350505050565b600060208284031215614d7557600080fd5b8151610bce81613c61565b606081526000614d936060830186613c22565b8281036020840152614da58186613c22565b905082810360408401526144da8185613c22565b634e487b7160e01b600052605160045260246000fdfe4e6574776f726b436f6e6669673a2043616e6e6f742063726561746520666f726b20776974682075726c3a4e6574776f726b436f6e6669673a20666f726b206d6f64652064697361626c65642c206e6f2061637469766520666f726b0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dc9afbc73a494ea75c49256ccd7f46538ea37a39169e9bea4121202c1d05bac77a2646970667358221220cd7459b4d7e40287665ff953eb1a3332dcd3cd08d88aeafb07e9e0448461944564736f6c63430008170033) - │ │ └─ ← () - │ ├─ [0] VM::label(GeneralConfig: [0x1CED95eC8629bdA85E80B6C506C15DB62aB8f761], "GeneralConfig") - │ │ └─ ← () - │ ├─ [0] VM::makePersistent(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16]) - │ │ └─ ← () - │ ├─ [0] VM::allowCheatcodes(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16]) - │ │ └─ ← () - │ ├─ [0] VM::etch(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], 0x608060405234801561001057600080fd5b506123c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033) - │ │ └─ ← () - │ ├─ [1933] ArtifactFactory::fallback() - │ │ └─ ← 0x608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033 - │ ├─ [0] VM::etch(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], 0x608060405234801561001057600080fd5b50600436106100365760003560e01c806331718a8f1461003b578063d92e82e414610050575b600080fd5b61004e610049366004611d75565b610081565b005b61006560008051602061236e83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6101e56101b8868660008051602061236e83398151915260001c6001600160a01b03166323cfba3360008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011c9190611e78565b6040518263ffffffff1660e01b815260040161013a91815260200190565b600060405180830381865afa158015610157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261017f9190810190611eb5565b6101918c6001600160a01b0316610daf565b6040516020016101a49493929190611f2c565b604051602081830303815290604052610dd3565b6101c183610e02565b6040516020016101d19190611f9b565b604051602081830303815290604052610e46565b60408051639c8afddb60e01b81528151731ced95ec8629bda85e80b6c506c15db62ab8f76192639c8afddb92600480820193918290030181865afa158015610231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102559190611fe6565b5161031c5761031760405180606001604052806021815260200161234d6021913960405163028a249b60e41b81526001600160a01b038a166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906328a249b0906024016000604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102f89190810190611eb5565b604051806040016040528060018152602001600560f91b815250610e8f565b610da5565b600060008051602061236e83398151915260001c6001600160a01b031663e26d0fb860008051602061236e83398151915260001c6001600160a01b031663cedb75ef6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b19190611e78565b6040518263ffffffff1660e01b81526004016103cf91815260200190565b600060405180830381865afa1580156103ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104149190810190611eb5565b9050600081878760405160200161042d93929190612041565b60408051601f198184030181529082905263130d191f60e11b82529150606090600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063261a323e9061047a90869060040161209e565b6020604051808303816000875af1158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906120b1565b156106b4576040516360f9bb1160e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906104fc90879060040161209e565b600060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105419190810190611eb5565b6040516314a29a0f60e21b8152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063528a683c9061057b9084906004016120cc565b602060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc91906120b1565b156106b2576040516360f9bb1160e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063addde2b69082906360f9bb119061060090899060040161209e565b600060405180830381865afa15801561061d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106459190810190611eb5565b6040518263ffffffff1660e01b815260040161066191906120cc565b602060405180830381865afa15801561067e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a29190611e78565b91506106af600183612110565b91505b505b610714604051806040016040528060048152602001636172677360e01b81525088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879493925050610edb9050565b506040805180820190915260058152646e6f6e636560d81b602082015261073d90839087610f6a565b506040805180820190915260098152686973466f756e64727960b81b602082015261076b9083906001610fa8565b506040805180820190915260088152673232b83637bcb2b960c11b60208201526107979083908e610fe6565b5060408051808201909152600781526618da185a5b925960ca1b60208201526107c290839046610f6a565b506040805180820190915260078152666164647265737360c81b60208201526107ed9083908d610fe6565b5060408051808201909152600b81526a313637b1b5a73ab6b132b960a91b602082015261081c90839043610f6a565b50604080518082019091526009815268074696d657374616d760bc1b602082015261084990839042610f6a565b506040805180820190915260148152730c6dedce8e4c2c6e882c4e6ded8eae8caa0c2e8d60631b60208201526108819083908c611024565b5060408051808201909152600e81526d6e756d4465706c6f796d656e747360901b60208201526108b390839083610f6a565b5060006108e2604051806040016040528060018152602001601d60f91b8152508c61106290919063ffffffff16565b905060008151600214610963578b61093e604051806040016040528060048152602001630b9cdbdb60e21b81525060405180604001604052806005815260200164173539b7b760d91b8152508f61110d9092919063ffffffff16565b60405160200161094f929190612131565b6040516020818303038152906040526109ba565b816000815181106109765761097661217f565b6020026020010151826001815181106109915761099161217f565b60200260200101516040516020016109aa929190612195565b6040516020818303038152906040525b6040516360f9bb1160e01b8152909150600090737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906109f790859060040161209e565b600060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3c9190810190611eb5565b90506000610a4982611230565b9050610aaa6040518060400160405280600381526020016261626960e81b815250610aa2610a9d604051806040016040528060058152602001641130b1349160d91b8152508561124990919063ffffffff16565b6112b0565b889190611024565b50610afd60405180604001604052806003815260200162185cdd60ea1b815250610aa2610a9d604051806040016040528060058152602001641130b9ba1160d91b8152508561124990919063ffffffff16565b50610b5660405180604001604052806006815260200165646576646f6360d01b815250610aa2610a9d60405180604001604052806008815260200167113232bb3237b19160c11b8152508561124990919063ffffffff16565b50610bb16040518060400160405280600781526020016675736572646f6360c81b815250610aa2610a9d60405180604001604052806009815260200168113ab9b2b93237b19160b91b8152508561124990919063ffffffff16565b50610c11604051806040016040528060088152602001676d6574616461746160c01b815250610aa2610a9d6040518060400160405280600d81526020016c113930bba6b2ba30b230ba309160991b8152508561124990919063ffffffff16565b50610c786040518060400160405280600d81526020016c1cdd1bdc9859d953185e5bdd5d609a1b815250610aa2610a9d6040518060400160405280600f81526020016e1139ba37b930b3b2a630bcb7baba1160891b8152508561124990919063ffffffff16565b50610cff6040518060400160405280600881526020016762797465636f646560c01b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf96040518060400160405280600a81526020016911313cba32b1b7b2329160b11b8152508761124990919063ffffffff16565b90611249565b50610d906040518060400160405280601081526020016f6465706c6f79656442797465636f646560801b815250610aa2610a9d604051806040016040528060088152602001671137b13532b1ba1160c11b815250610cf960405180604001604052806012815260200171113232b83637bcb2b2213cba32b1b7b2329160711b8152508761124990919063ffffffff16565b9550610d9c86886112bf565b50505050505050505b5050505050505050565b6060610dba8261132e565b8051613078825260020160011990910190815292915050565b6060610dfc604051806040016040528060058152602001641b5b39326d60d81b8152508361139d565b92915050565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480610e1d575050819003601f19909101908152919050565b610e8b8282604051602401610e5c9291906121f5565b60408051601f198184030181529190526020810180516001600160e01b0316634b5c427760e01b1790526113e7565b5050565b610ed6838383604051602401610ea79392919061221a565b60408051601f198184030181529190526020810180516001600160e01b0316632ced7cef60e01b1790526113e7565b505050565b60405163f21d52c760e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f21d52c790610f199087908790879060040161221a565b6000604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f609190810190611eb5565b90505b9392505050565b60405163094f480160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063129e900290610f199087908790879060040161225d565b60405163ac22e97160e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ac22e97190610f1990879087908790600401612293565b604051634b96303160e11b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f19908790879087906004016122cb565b6040516388da6d3560e01b8152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d906388da6d3590610f199087908790879060040161221a565b6060600061107084846113f3565b9050601f1960208201600183510160051b81018651838201526001845101845260005b8251606084528181146110d85760405182820380825286601f8201165b8b8501810151838201528701806110b05750600082820160200152603f018616810160405284525b8751602094909401930190508183106110935750505050809150825161110657602081019150600281510382525b5092915050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111df5760018382030160006020851061114e57508388205b601f851660200360031b89515b8b51818118831c6111c65783156111955783888e201461119557808a5260019c8d019c90990198848d1061118f57506111da565b5061115b565b60005b8b8101518b82015260200187811061119857509b87019b9886019887156111c657848d1061118f57506111da565b895260019b8c019b90980197838c1061115b575b505050505b84935060206040510194508781038585030192505b8088101561120f5787518452602097880197909301926111f4565b50506000818401908152602001604052601f19909201918252509392505050565b6040805160008082529181905290610f638360ff6114c2565b604080516000815290528151606090600716600203610dfc5781516020830120600061127485611c57565b805190915060051b5b80156112a757818101519550601f19018261129787611c66565b805190602001200361127d578593505b50505092915050565b60606000610f638360006114c2565b60405163e23cd19f60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e23cd19f906112f890859085906004016121f5565b600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b60606040519050608081016040526f30313233343536373839616263646566600f526002810190506028815260208101600060288201528260601b925060005b808101820184821a600f81165160018301538060041c518253505060018101906012190161136e575050919050565b60608282604051806040016040528060048152602001631b5b306d60e01b8152506040516020016113d093929190612309565b604051602081830303815290604052905092915050565b6113f081611c85565b50565b6060825182518181116114ba57602085019450602084019350602060405101925084600182848801030160006020841061142c57508286205b601f841660200360031b87515b8951818118831c61148e57831561146c5783878c201461146c5760018b019a50848b10611466575061149d565b50611439565b858b03895299860199602090980197861561148e57848b10611466575061149d565b5060018a019950838a10611439575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6000611bb7565b63101827966000526004601cfd5b805b60016401000026006114ec835160001a90565b1c1615610dfc576001016114d9565b63ffffffff83113d3d3e63ffffffff821b191691901b1790565b6040516115378486036078611532601f19868903016058886114fb565b6114fb565b959095178552505050602082016040525090565b60008061155c8460186000516114fb565b61156687876114d7565b9150868210611575575061169b565b815160001a602281036115a7578261158f898585896118a7565b935061159f60048583868a611515565b94505061168c565b605b81036115c4576115bb888484886116a4565b9350935061168c565b607b81036115d8576115bb8884848861176d565b6703ff200000000000811c600116156115f7576115bb8884848861197b565b8760048401116116515782835160e01c6374727565810361162f5760048501945061162660058684878b611515565b9550505061168c565b636e756c6c810361164e5760048501945061162660068684878b611515565b50505b8760058401116116845782835160d81c6466616c736581036116815760058501945061162660058684878b611515565b50505b61168c6114c9565b505061169886826114d7565b90505b94509492505050565b600060018401815b8682106116bb576116bb6114c9565b826116df576116ca87836114d7565b9150605d6116d9835160001a90565b14611742575b6116eb8783858761154b565b9250925082156117335761170581609885516040176114fb565b8352600101611715825160001a90565b605d81036117235750611742565b602c81036117315750611737565b505b8691505b6001820191506116ac565b50600101611752826038866114fb565b9350611762600182878787611515565b915094509492505050565b6000600184015b858110611783576117836114c9565b816117a75761179286826114d7565b9050607d6117a1825160001a90565b1461184b575b6117b186826114d7565b9050806117c0878385876118a7565b6117ca88826114d7565b9250603a6117d9845160001a90565b0361183d576117ed8860018501868861154b565b93509350831561183d57611814602086018303609861153285850360b889516080176114fb565b8452825160001a607d810361182b5750505061184b565b602c810361183b57505050611843565b505b50508590505b600101611774565b60010161185a826038866114fb565b9350611762600282878787611515565b6001667e0000007e03ff60306118838585015160001a90565b031c16611892576118926114c9565b60058214610e8b57610e8b600183018261186a565b505060008282106118ba576118ba6114c9565b50600181015b805160001a602281036118d35750611931565b605c81146118e457506001016118c0565b600182015160001a905060016a0510110400000000002001602283031c161561191057506002016118c0565b6075810361192c5761192360028361186a565b506006016118c0565b508290505b828110611940576119406114c9565b60010192915050565b805b600a603061195a835160001a90565b0310156119695760010161194b565b808214841615610f6357610f636114c9565b600083602d61198b825160001a90565b03611994576001015b600a60306119a3835160001a90565b03106119b1576119b16114c9565b805160001a600182019150603081146119d3576119d060008884611949565b91505b50602e6119e1825160001a90565b036119f8576119f560018760018401611949565b90505b805160658160001a60201703611a2757611a246001886001850162010001600e8660011a031a01611949565b91505b50611762600382878787611515565b60405190820190601f19601f850181165b8381015183820152810180611a475750508381526000846020830101528360408201016040529392505050565b8483611a36565b50919050565b805160609060028160071611611a7b578215811517611a7b576020811615611ab557603881901c63ffffffff169150611a7b565b604051915060208201603882901c63ffffffff165b8015611afc578082528051601881901c63ffffffff16611aec876018846114fb565b9092525060209190910190611aca565b50601f1983820381018060051c855282604052611b1b856038866114fb565b935083602017865260408110611b4e576020850192508085015b83518151855281526020909301928201808410611b3557505b50505050919050565b8051606090821581151715611b6c5750611baf565b80841c63ffffffff169150808616611bad5760d881901c63ffffffff16611b9a82871c63ffffffff16611a74565b925050611ba88285836114fb565b861783525b505b949350505050565b818015611c295760018114611c3f5760038114611c4e576020840184518101808214611c0f57805160001a60228253611bf68760d8601160f91b6114fb565b600052611c06828460008a61154b565b93509450808253505b83158183101715611c2257611c226114c9565b5050611106565b611c3860106078605887611b57565b9150611106565b611c38600860b8609887611b57565b611baf84611a81565b60606000610f638360036114c2565b805160609060801615611c80576000610f638360016114c2565b919050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b80356001600160a01b0381168114611c8057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cfc57611cfc611cbd565b604052919050565b600067ffffffffffffffff821115611d1e57611d1e611cbd565b50601f01601f191660200190565b60008083601f840112611d3e57600080fd5b50813567ffffffffffffffff811115611d5657600080fd5b602083019150836020828501011115611d6e57600080fd5b9250929050565b60008060008060008060008060c0898b031215611d9157600080fd5b611d9a89611ca6565b9750611da860208a01611ca6565b9650604089013567ffffffffffffffff80821115611dc557600080fd5b818b0191508b601f830112611dd957600080fd5b8135611dec611de782611d04565b611cd3565b8181528d6020838601011115611e0157600080fd5b81602085016020830137600060208383010152809950505060608b0135915080821115611e2d57600080fd5b611e398c838d01611d2c565b909750955060808b0135915080821115611e5257600080fd5b50611e5f8b828c01611d2c565b999c989b50969995989497949560a00135949350505050565b600060208284031215611e8a57600080fd5b5051919050565b60005b83811015611eac578181015183820152602001611e94565b50506000910152565b600060208284031215611ec757600080fd5b815167ffffffffffffffff811115611ede57600080fd5b8201601f81018413611eef57600080fd5b8051611efd611de782611d04565b818152856020838501011115611f1257600080fd5b611f23826020830160208601611e91565b95945050505050565b838582376000848201750103bb4b636103132903232b83637bcb2b21030ba1d160551b81528451611f64816016840160208901611e91565b67616464726573732f60c01b601692909101918201528351611f8d81601e840160208801611e91565b01601e019695505050505050565b670143737b731b29d160c51b815260008251611fbe816008850160208701611e91565b602960f81b6008939091019283015250600901919050565b80518015158114611c8057600080fd5b600060408284031215611ff857600080fd5b6040516040810181811067ffffffffffffffff8211171561201b5761201b611cbd565b60405261202783611fd6565b815261203560208401611fd6565b60208201529392505050565b60008451612053818460208901611e91565b82018385823764173539b7b760d91b9301928352505060050192915050565b6000815180845261208a816020860160208601611e91565b601f01601f19169290920160200192915050565b602081526000610f636020830184612072565b6000602082840312156120c357600080fd5b610f6382611fd6565b6040815260006120df6040830184612072565b8281036020840152600f81526e2e6e756d4465706c6f796d656e747360881b60208201526040810191505092915050565b80820180821115610dfc57634e487b7160e01b600052601160045260246000fd5b652e2f6f75742f60d01b815260008351612152816006850160208801611e91565b602f60f81b6006918401918201528351612173816007840160208801611e91565b01600701949350505050565b634e487b7160e01b600052603260045260246000fd5b652e2f6f75742f60d01b8152600083516121b6816006850160208801611e91565b602f60f81b60069184019182015283516121d7816007840160208801611e91565b64173539b7b760d91b60079290910191820152600c01949350505050565b6040815260006122086040830185612072565b8281036020840152611f238185612072565b60608152600061222d6060830186612072565b828103602084015261223f8186612072565b905082810360408401526122538185612072565b9695505050505050565b6060815260006122706060830186612072565b82810360208401526122828186612072565b915050826040830152949350505050565b6060815260006122a66060830186612072565b82810360208401526122b88186612072565b9150508215156040830152949350505050565b6060815260006122de6060830186612072565b82810360208401526122f08186612072565b91505060018060a01b0383166040830152949350505050565b6000845161231b818460208901611e91565b84519083019061232f818360208901611e91565b8451910190612342818360208801611e91565b019594505050505056fe536b697070696e672061727469666163742067656e65726174696f6e20666f723a0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761a2646970667358221220011a5bdc6e9005313a0ba02b20ef442323f3f1477fb185b0544cae3d5859547d64736f6c63430008170033) - │ │ └─ ← () - │ ├─ [0] VM::label(ArtifactFactory: [0xD43d5C72f803D06869Ba1ECBf5E151Ff59353E16], "ArtifactFactory") - │ │ └─ ← () - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [0] VM::toString(1) [staticcall] - │ │ └─ ← "1" - │ ├─ [0] VM::addr(89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76]) [staticcall] - │ │ └─ ← operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95] - │ ├─ [0] VM::label(operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95], "operator-1") - │ │ └─ ← () - │ ├─ [0] VM::toString(1) [staticcall] - │ │ └─ ← "1" - │ ├─ [0] VM::addr(42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76]) [staticcall] - │ │ └─ ← governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430] - │ ├─ [0] VM::label(governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430], "governor-1") - │ │ └─ ← () - │ ├─ [0] VM::toString(2) [staticcall] - │ │ └─ ← "2" - │ ├─ [0] VM::addr(94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76]) [staticcall] - │ │ └─ ← operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D] - │ ├─ [0] VM::label(operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D], "operator-2") - │ │ └─ ← () - │ ├─ [0] VM::toString(2) [staticcall] - │ │ └─ ← "2" - │ ├─ [0] VM::addr(403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74]) [staticcall] - │ │ └─ ← governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E] - │ ├─ [0] VM::label(governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E], "governor-2") - │ │ └─ ← () - │ ├─ [0] VM::toString(3) [staticcall] - │ │ └─ ← "3" - │ ├─ [0] VM::addr(66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76]) [staticcall] - │ │ └─ ← operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D] - │ ├─ [0] VM::label(operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D], "operator-3") - │ │ └─ ← () - │ ├─ [0] VM::toString(3) [staticcall] - │ │ └─ ← "3" - │ ├─ [0] VM::addr(56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76]) [staticcall] - │ │ └─ ← governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454] - │ ├─ [0] VM::label(governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454], "governor-3") - │ │ └─ ← () - │ ├─ [0] VM::toString(4) [staticcall] - │ │ └─ ← "4" - │ ├─ [0] VM::addr(62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76]) [staticcall] - │ │ └─ ← operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D] - │ ├─ [0] VM::label(operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D], "operator-4") - │ │ └─ ← () - │ ├─ [0] VM::toString(4) [staticcall] - │ │ └─ ← "4" - │ ├─ [0] VM::addr(27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76]) [staticcall] - │ │ └─ ← governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4] - │ ├─ [0] VM::label(governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4], "governor-4") - │ │ └─ ← () - │ ├─ [0] VM::toString(5) [staticcall] - │ │ └─ ← "5" - │ ├─ [0] VM::addr(26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76]) [staticcall] - │ │ └─ ← operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41] - │ ├─ [0] VM::label(operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41], "operator-5") - │ │ └─ ← () - │ ├─ [0] VM::toString(5) [staticcall] - │ │ └─ ← "5" - │ ├─ [0] VM::addr(104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77]) [staticcall] - │ │ └─ ← governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11] - │ ├─ [0] VM::label(governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11], "governor-5") - │ │ └─ ← () - │ ├─ [0] VM::toString(6) [staticcall] - │ │ └─ ← "6" - │ ├─ [0] VM::addr(113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]) [staticcall] - │ │ └─ ← operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8] - │ ├─ [0] VM::label(operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], "operator-6") - │ │ └─ ← () - │ ├─ [0] VM::toString(6) [staticcall] - │ │ └─ ← "6" - │ ├─ [0] VM::addr(6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]) [staticcall] - │ │ └─ ← governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8] - │ ├─ [0] VM::label(governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], "governor-6") - │ │ └─ ← () - │ ├─ [0] VM::addr(91510552187238886959033578665964256892121014792639911859038233360780899104770 [9.151e76]) [staticcall] - │ │ └─ ← governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e] - │ ├─ [0] VM::label(governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e], "governance-admin") - │ │ └─ ← () - │ ├─ [0] VM::addr(32023155812407028061452097301509641536118192107878305823158825758004472210926 [3.202e76]) [staticcall] - │ │ └─ ← validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40] - │ ├─ [0] VM::label(validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40], "validator-set-contract") - │ │ └─ ← () - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0c42726964676552657761726400000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [0] VM::addr(67501766086945423188359301496192992873575530264346267663568933074015626216763 [6.75e76]) [staticcall] - │ │ └─ ← proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90] - │ ├─ [0] VM::label(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90], "proxy-admin") - │ │ └─ ← () - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] - │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] - │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] - │ ├─ [3519290] GeneralConfig::setRawSharedArguments(0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000013492c1caa270f0a24342015a049518cf093dd40000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c400000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c0049600000000000000000000000013492c1caa270f0a24342015a049518cf093dd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000013492c1caa270f0a24342015a049518cf093dd4000000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000012800000000000000000000000000000000000000000000000000000000000001340000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000001640000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c00496000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000000000060000000000000000000000007083c6a0f61b3fdc6a8f4bb573f5097b485cbb9500000000000000000000000010e09aacfb9408a6da536d258d3d64718ab56e4d000000000000000000000000698bec9a526055cd092e9e15acccfc542b63f92d0000000000000000000000000d8274a6b3cddb84e8fd4f8c93b4cfa26dbcb45d000000000000000000000000af627c77b0b0ed13882b0ff7b10af7a610035a41000000000000000000000000ccfca9c1c0b543d21dc71c43dce7b174a7015fb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000bf91bfd887138c482101bff998f4a96d41c5c4300000000000000000000000008856475dd525166b6654edd18e0011e592459a8e000000000000000000000000c966b8836e01db8f720f0a169da0252767b87454000000000000000000000000713886700f9f4b7df033bd1615177684cedceee4000000000000000000000000a131e33ef51a90640f54291645bdcee9de3d1c1100000000000000000000000030949311d69fa2eae2b805a9905eb6d72a5b38a80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c004960000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c57726170706564205745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5772617070656420524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134178696520496e66696e6974792053686172640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034158530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012536d6f6f7468204c6f766520506f74696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000006c584057a233113f3d6bbb9fa535457f882e4a1651e9872443fbbc09c98cab8b5d0775821d287000a7bcdf57179f0756bcea1e44933bc9b95e7437a24f89565ec922694c2a69e2569e7c38daf93226a6654bf3ab7f08a5bae2f0f3ba29b7c335c8961c3586584723ed2cf8ed4692507f7ccfa033d901aa56911770fa9ab4bb3e03b1918b42fc7ffb813c3827ed00534d936c7930115f3d65fab756c2e15b0e3bdfa57e1de87203668f02b950f40e1246963fa77677df934e74c97577520c1513700000000000000000000000000000000000000000000000000000000000000065d2503fc5f74f349f61fd45c72868b37a10b28a35052be8e3f15eb5d1f65796c00e49bee553750db35dc75dd0f611fc9ca1a950367e3c78244d9fbf66e643c7c7c8efe0b120312d5f846e2e27820676655285e2808b5e4e93580b1d5b5129b0c3d07b40a68891e1ce2246c87932f18ffd4c01876519808e339af84d9d65aab7fe7bedbcabd91f0b98becc732538ae35a6d72e3efc234a10b4383ae967d1af9590e91dc744fe301c24bac6970238cabaca15627df2414bf146a664dd0792399b3) - │ │ └─ ← () - │ └─ ← 72975 bytes of code - ├─ [5408475] 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f::run() - │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] - │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) - │ ├─ [0] console::log("> ", "\u{1b}[94m_deployProxy RoninGatewayV3\u{1b}[0m", "...") [staticcall] - │ │ └─ ← () - │ ├─ [5406] GeneralConfig::getContractName(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← "RoninGatewayV3" - │ ├─ [0] console::log("> ", "\u{1b}[94m_deployLogic RoninGatewayV3\u{1b}[0m", "...") [staticcall] - │ │ └─ ← () - │ ├─ [5406] GeneralConfig::getContractName(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← "RoninGatewayV3" - │ ├─ [3855] GeneralConfig::getContractAbsolutePath(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← "RoninGatewayV3.sol" - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] - │ │ └─ ← 3 - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::broadcast() - │ │ └─ ← () - │ ├─ [0] VM::getCode("RoninGatewayV3.sol") [staticcall] - │ │ └─ ← 0x608060405234801561001057600080fd5b506000805460ff19169055614d358061002a6000396000f3fe6080604052600436106102815760003560e01c8063835fc6ca1161014f578063c28f7894116100c1578063e75235b81161007a578063e75235b814610838578063ecc8364914610850578063f0ce418e1461087d578063f668214a146108c3578063fa389659146108e3578063fc6574bc1461090357610290565b8063c28f789414610752578063ca15c87314610798578063d547741f146107b8578063dafae408146107d8578063dbd2ef6c146107f8578063de981f1b1461081857610290565b80639584a592116101135780639584a5921461069a578063a217fddf146106ba578063affed0e0146106cf578063b9afa177146106e5578063b9c3620914610705578063bc7f03861461072557610290565b8063835fc6ca146105f45780638456cb5914610625578063865e6fd31461063a5780639010d07c1461065a57806391d148541461067a57610290565b80633e70838b116101f35780635cd8a76b116101ac5780635cd8a76b146105475780635d6a9a901461055c57806364363f781461058957806371706cbe146105a957806375535f86146105bf5780637de5dedd146105df57610290565b80633e70838b146104595780633f4ba83a1461047957806347b56b2c1461048e5780634d92c4f0146104ae5780635a7dd06a1461050f5780635c975abb1461052f57610290565b806317fa2ea11161024557806317fa2ea11461036e578063248a9ca31461039b5780632f2ff15d146103d95780633101cfcb146103f957806336568abe146104195780633e4574ec1461043957610290565b806301ffc9a714610298578063065b3adf146102cd5780630b1ff17f14610305578063109679ef1461032557806317892f961461034557610290565b366102905761028e610955565b005b61028e610955565b3480156102a457600080fd5b506102b86102b3366004613afa565b61096e565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506005546102ed906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b34801561031157600080fd5b5061028e610320366004613b24565b610999565b34801561033157600080fd5b5061028e610340366004613b55565b6109b0565b34801561035157600080fd5b506078546079545b604080519283526020830191909152016102c4565b34801561037a57600080fd5b5061038e610389366004613bb2565b610a55565b6040516102c49190613bf3565b3480156103a757600080fd5b506103cb6103b6366004613c39565b6000908152606b602052604090206001015490565b6040519081526020016102c4565b3480156103e557600080fd5b5061028e6103f4366004613c72565b610d92565b34801561040557600080fd5b5061028e610414366004613ca2565b610dbc565b34801561042557600080fd5b5061028e610434366004613c72565b610e68565b34801561044557600080fd5b506102b8610454366004613c72565b610ee2565b34801561046557600080fd5b5061028e610474366004613ca2565b610f12565b34801561048557600080fd5b5061028e610f3c565b34801561049a57600080fd5b5061028e6104a9366004613c39565b610f4e565b3480156104ba57600080fd5b506104ff6104c9366004613cbf565b606f602090815260009283526040808420909152908252902080546001820154600383015460049093015460ff90921692909184565b6040516102c49493929190613cf7565b34801561051b57600080fd5b5061028e61052a366004613d27565b611119565b34801561053b57600080fd5b5060005460ff166102b8565b34801561055357600080fd5b5061028e61117e565b34801561056857600080fd5b5061057c610577366004613da1565b611280565b6040516102c49190613ddd565b34801561059557600080fd5b5061028e6105a4366004613e09565b611324565b3480156105b557600080fd5b506103cb606e5481565b3480156105cb57600080fd5b506103596105da366004613cbf565b61135a565b3480156105eb57600080fd5b506103cb61137b565b34801561060057600080fd5b5061061461060f366004613c39565b611392565b6040516102c4959493929190613ebd565b34801561063157600080fd5b5061028e611464565b34801561064657600080fd5b5061028e610655366004613f0b565b611474565b34801561066657600080fd5b506102ed610675366004613cbf565b61148f565b34801561068657600080fd5b506102b8610695366004613c72565b6114a7565b3480156106a657600080fd5b5061028e6106b5366004613f48565b6114d2565b3480156106c657600080fd5b506103cb600081565b3480156106db57600080fd5b506103cb60045481565b3480156106f157600080fd5b5061038e610700366004614041565b611621565b34801561071157600080fd5b50610359610720366004613cbf565b6117b3565b34801561073157600080fd5b506103cb610740366004613ca2565b60386020526000908152604090205481565b34801561075e57600080fd5b506104ff61076d366004613c39565b607660205260009081526040902080546001820154600383015460049093015460ff90921692909184565b3480156107a457600080fd5b506103cb6107b3366004613c39565b6117c8565b3480156107c457600080fd5b5061028e6107d3366004613c72565b6117df565b3480156107e457600080fd5b506102b86107f3366004613c39565b611804565b34801561080457600080fd5b5061028e6108133660046140b6565b611830565b34801561082457600080fd5b506102ed610833366004614179565b611882565b34801561084457600080fd5b50600154600254610359565b34801561085c57600080fd5b5061087061086b366004614194565b6118fd565b6040516102c4919061422f565b34801561088957600080fd5b506104ff610898366004613c39565b607060205260009081526040902080546001820154600383015460049093015460ff90921692909184565b3480156108cf57600080fd5b506102b86108de366004613c39565b611a64565b3480156108ef57600080fd5b5061028e6108fe366004613e09565b611a92565b34801561090f57600080fd5b506102b861091e366004614293565b6000928352606f602090815260408085209385529281528284206001600160a01b0392909216845260029091019052902054151590565b60405163129c2ce160e31b815260040160405180910390fd5b60006001600160e01b03198216635a05180f60e01b1480610993575061099382611c8b565b92915050565b6109a1611cc0565b6109ac823383611d06565b5050565b6109b8611cc0565b6109c0611dde565b336109e16109d3368490038401846143da565b826109dc61137b565b611e7f565b6109eb6003611882565b60405163c7c4fea960e01b81526001600160a01b03919091169063c7c4fea990610a1f90600090863590869060040161447b565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050505050565b6060610a5f611dde565b336000610a6a61137b565b90506000846001600160401b03811115610a8657610a866142cc565b604051908082528060200260200182016040528015610aaf578160200160208202803683370190505b5093506000610abe6003611882565b905060005b86811015610d8757878782818110610add57610add6144a8565b905060200201359250816001600160a01b031663c7c4fea9600285886040518463ffffffff1660e01b8152600401610b179392919061447b565b600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b50505050610b5283611a64565b15610b80576001868281518110610b6b57610b6b6144a8565b91151560209283029190910190910152610d7f565b600083815260706020908152604080832060718352818420825160a081019093528054835260018082015492959491929184019160ff1690811115610bc757610bc7613ce1565b6001811115610bd857610bd8613ce1565b8152604080516060808201835260028501546001600160a01b039081168352600386015481166020848101919091526004870154848601528086019390935283518083018552600587015482168152600687015490911692810192909252600785015482840152828401919091528151808201909252600884018054919093019290829060ff166001811115610c7057610c70613ce1565b6001811115610c8157610c81613ce1565b81526001820154602082015260029091015460409091015290525090506000610ca982612120565b90506000610cb9848a8a856121ea565b90506001816004811115610ccf57610ccf613ce1565b03610d7a57835460ff19166002908117855560405163114fc47560e11b81526001600160a01b0388169163229f88ea91610d0e91908b906004016144be565b600060405180830381600087803b158015610d2857600080fd5b505af1158015610d3c573d6000803e3d6000fd5b505050507f62520d049932cdee872e9b3c59c0f6073637147e5e9bc8b050b062430eaf5c9f8284604051610d719291906144d9565b60405180910390a15b505050505b600101610ac3565b505050505092915050565b6000828152606b6020526040902060010154610dad8161221b565b610db78383612228565b505050565b603754600390610100900460ff16158015610dde575060375460ff8083169116105b610e035760405162461bcd60e51b8152600401610dfa9061453a565b60405180910390fd5b6037805461ffff191660ff831617610100179055610e22600b8361224a565b6037805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6001600160a01b0381163314610ed85760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610dfa565b6109ac82826122ee565b60008281526070602090815260408083206001600160a01b038516845260020190915281205415155b9392505050565b610f1a612310565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610f4461236a565b610f4c6123d9565b565b610f56611cc0565b610f5f81611a64565b15610f7d576040516327ddf84960e11b815260040160405180910390fd5b6000818152607160209081526040808320815160a0810190925280548252600180820154929391929184019160ff1690811115610fbc57610fbc613ce1565b6001811115610fcd57610fcd613ce1565b8152604080516060808201835260028501546001600160a01b039081168352600386015481166020848101919091526004870154848601528086019390935283518083018552600587015482168152600687015490911692810192909252600785015482840152828401919091528151808201909252600884018054919093019290829060ff16600181111561106557611065613ce1565b600181111561107657611076613ce1565b8152600182015460208201526002909101546040918201529152606083015101519192505046146110e0576060810151604090810151905163092048d160e11b81526001600160e01b03196000351660048201526024810191909152466044820152606401610dfa565b7f04e8cbd836dea43a2dc7eb19de345cca3a8e6978a2ef5225d924775500f67c7c61110a82612120565b82604051610e5c9291906144d9565b611121611cc0565b6000829003611143576040516316ee9d3b60e11b815260040160405180910390fd5b60005b8281101561117857611170848483818110611163576111636144a8565b905060a002013384611d06565b600101611146565b50505050565b603754600290610100900460ff161580156111a0575060375460ff8083169116105b6111bc5760405162461bcd60e51b8152600401610dfa9061453a565b6037805461ffff191660ff8316176101001790556074546111e8906008906001600160a01b031661224a565b607554611200906003906001600160a01b031661224a565b60775461121890600a906001600160a01b031661224a565b607480546001600160a01b031990811690915560758054821690556077805490911690556037805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b604080518082018252600080825260208083018290526001600160a01b038616825260738152838220858352905282902082518084019093528054919291829060ff1660018111156112d4576112d4613ce1565b60018111156112e5576112e5613ce1565b815290546001600160a01b036101009091048116602092830152908201519192501661099357604051631b79f53b60e21b815260040160405180910390fd5b61132c612310565b600083900361134e576040516316ee9d3b60e11b815260040160405180910390fd5b6111788484848461242b565b600080611365612310565b61136f848461250e565b915091505b9250929050565b600061138d611388612599565b612606565b905090565b607160209081526000918252604091829020805460018083015485516060808201885260028601546001600160a01b03908116835260038701548116838901526004870154838a015288518083018a526005880154821681526006880154909116978101979097526007860154878901528751908101909752600885018054949760ff93841697929692959294909391928492169081111561143657611436613ce1565b600181111561144757611447613ce1565b815260200160018201548152602001600282015481525050905085565b61146c61236a565b610f4c61263c565b61147c612310565b61148581612679565b6109ac828261224a565b6000828152606c60205260408120610f0b90836126af565b6000918252606b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b603754610100900460ff16158080156114f25750603754600160ff909116105b8061150c5750303b15801561150c575060375460ff166001145b6115285760405162461bcd60e51b8152600401610dfa9061453a565b6037805460ff19166001179055801561154b576037805461ff0019166101001790555b61155660008d6126bb565b6115608b8b6126c5565b505061156c898961250e565b506000905061157b8680614588565b905011156115cd576115ae6115908680614588565b61159d6020890189614588565b6115a78980614588565b8989612751565b6115cd6115bb8680614588565b6115c86020880188614588565b61242b565b8015611613576037805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b606061162b611cc0565b611633611dde565b3361163c613a8d565b836001600160401b03811115611654576116546142cc565b60405190808252806020026020018201604052801561167d578160200160208202803683370190505b509250600061168a61137b565b905060006116986003611882565b905060005b86811015610d87578787828181106116b7576116b76144a8565b905061016002018036038101906116ce91906143da565b805160405163c7c4fea960e01b81529195506001600160a01b0384169163c7c4fea99161170391600091908a9060040161447b565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b506002925061173e915050565b6040808601518101516000908152606f6020908152828220885183529052205460ff16600481111561177257611772613ce1565b036117a057600186828151811061178b5761178b6144a8565b911515602092830291909101909101526117ab565b6117ab848685611e7f565b60010161169d565b6000806117be612310565b61136f84846126c5565b6000818152606c602052604081206109939061295a565b6000828152606b60205260409020600101546117fa8161221b565b610db783836122ee565b600061180e612599565b60015461181b91906145e7565b60025461182890846145e7565b101592915050565b611838612310565b6000879003611868576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b6118788888888888888888612751565b5050505050505050565b60007fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600083600f8111156118b9576118b9613ce1565b60ff1681526020810191909152604001600020546001600160a01b03169050806118f8578160405163409140df60e11b8152600401610dfa9190614613565b919050565b6060816001600160401b03811115611917576119176142cc565b60405190808252806020026020018201604052801561194a57816020015b60608152602001906001900390816119355790505b50905060005b82811015611a5c57600085815260726020526040812090858584818110611979576119796144a8565b905060200201602081019061198e9190613ca2565b6001600160a01b03166001600160a01b0316815260200190815260200160002080546119b99061462d565b80601f01602080910402602001604051908101604052809291908181526020018280546119e59061462d565b8015611a325780601f10611a0757610100808354040283529160200191611a32565b820191906000526020600020905b815481529060010190602001808311611a1557829003601f168201915b5050505050828281518110611a4957611a496144a8565b6020908102919091010152600101611950565b509392505050565b6000600260008381526070602052604090205460ff166004811115611a8b57611a8b613ce1565b1492915050565b611a9a611cc0565b611aa2611dde565b338315801590611ab157508382145b611adc576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b6000611ae661137b565b9050600080611af56003611882565b905060005b87811015611c8057888882818110611b1457611b146144a8565b905060200201359250868682818110611b2f57611b2f6144a8565b9050602002810190611b419190614661565b60008581526072602090815260408083206001600160a01b038b168452909152902091611b6f9190836146ef565b5060405163c7c4fea960e01b81526001600160a01b0383169063c7c4fea990611ba19060019087908a9060040161447b565b600060405180830381600087803b158015611bbb57600080fd5b505af1158015611bcf573d6000803e3d6000fd5b50505060008481526076602052604081209150611bee828888886121ea565b90506001816004811115611c0457611c04613ce1565b03611c7657815460ff1916600217825560405163114fc47560e11b81526001600160a01b0385169063229f88ea90611c439060019089906004016144be565b600060405180830381600087803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b505050505b5050600101611afa565b505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061099357506301ffc9a760e01b6001600160e01b0319831614610993565b60005460ff1615610f4c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dfa565b611d20611d1b368590038501604086016147ae565b612964565b611d29836129df565b6000611d44611d3e6040860160208701613ca2565b83611280565b80519091506001811115611d5a57611d5a613ce1565b611d6a60608601604087016147ca565b6001811115611d7b57611d7b613ce1565b14611d985760405162035e2b60ea1b815260040160405180910390fd5b611dc78330611dad6040880160208901613ca2565b611dbf36899003890160408a016147ae565b929190612a5d565b611dd78483858460200151612c5c565b5050505050565b611de8600b611882565b604051635a02d57960e11b81523360048201526001600160a01b03919091169063b405aaf290602401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5291906147e7565b610f4c576000356001600160e01b0319166006604051620f948f60ea1b8152600401610dfa929190614809565b82516080840151611e8f90612964565b600084602001516001811115611ea757611ea7613ce1565b14611ec55760405163182f3d8760e11b815260040160405180910390fd5b4684606001516040015114611f13576060840151604090810151905163092048d160e11b81526001600160e01b03196000351660048201526024810191909152466044820152606401610dfa565b6000611f2f856060015160200151866040015160400151611280565b6080860151519091506001811115611f4957611f49613ce1565b81516001811115611f5c57611f5c613ce1565b148015611f8657508460400151602001516001600160a01b031681602001516001600160a01b0316145b611fa35760405163f4b8742f60e01b815260040160405180910390fd5b6040808601518101516000908152606f6020908152828220858352905290812090611fcd87612120565b90506000611fdd838888856121ea565b905087604001516040015185886001600160a01b03167f48c4262ed68beb92fe5d7d48d70772e49cd50c317937dea60a99f15f794b64598560405161202491815260200190565b60405180910390a4600181600481111561204057612040613ce1565b0361187857825460ff191660021783556060880151805160209091015160808a015161206f9290916000612de6565b6120796003611882565b885160405163114fc47560e11b81526001600160a01b03929092169163229f88ea916120ab91600091906004016144be565b600060405180830381600087803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b505050507f8d20d8121a34dded9035ff5b43e901c142824f7a22126392992c353c37890524828960405161210e9291906144d9565b60405180910390a15050505050505050565b6000806121308360400151613102565b905060006121418460600151613102565b905060006121958560800151604080517f1e2b74b2a792d5c0f0b6e59b037fa9d43d84fbb759337f0112fcc15ca414fc8d815282516020808301919091528301518183015291015160608201526080902090565b604080517fb9d1fe7c9deeec5dc90a2f47ff1684239519f2545b2228d3d91fb27df3189eea815287516020808301919091529097015190870152606086019390935250608084015260a08301525060c0902090565b60006121f785858461314a565b60006122038684613200565b90506122118685838661330e565b9695505050505050565b612225813361335a565b50565b61223282826133be565b6000828152606c60205260409020610db79082613444565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f81111561228057612280613ce1565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f8111156122c1576122c1613ce1565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b6122f88282613459565b6000828152606c60205260409020610db790826134c0565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03163314610f4c576000356001600160e01b0319166001604051620f948f60ea1b8152600401610dfa929190614809565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03163314806123ac57506005546001600160a01b031633145b610f4c576000356001600160e01b0319166001604051620f948f60ea1b8152600401610dfa929190614809565b6123e16134d5565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b828114612459576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b60005b838110156124ca57828282818110612476576124766144a8565b9050602002013560386000878785818110612493576124936144a8565b90506020020160208101906124a89190613ca2565b6001600160a01b0316815260208101919091526040016000205560010161245c565b507f6f52f53a938df83439fa4c6055c7df0a6906d621aa6dfa4708187037fdfc41da8484848460405161250094939291906148a5565b60405180910390a150505050565b600080828411156125325760405163964a4d2760e01b815260040160405180910390fd5b505060018054600254607885905560798490556004805493840190556040805183815260208101839052929391928592879290917feac82d4d949d2d4f77f96aa68ab6b1bb750da73f14e55d41a1b93f387471ecba91015b60405180910390a49250929050565b60006125a5600b611882565b6001600160a01b03166306aba0e16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d91906148d7565b600060025460016002548460015461261e91906145e7565b61262891906148f0565b6126329190614903565b6109939190614916565b612644611cc0565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861240e3390565b806001600160a01b03163b60000361222557604051630bfc64a360e21b81526001600160a01b0382166004820152602401610dfa565b6000610f0b838361351e565b6109ac8282612228565b600080828411156126f7576000356001600160e01b0319166040516387f6f09560e01b8152600401610dfa91906145fe565b50506001805460028054858455908490556004805493840190556040805183815260208101839052929391928592879290917f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910161258a565b868514801561275f57508683145b61278a576000356001600160e01b0319166040516306b5667560e21b8152600401610dfa91906145fe565b60005b8781101561291c578686828181106127a7576127a76144a8565b90506020020160208101906127bc9190613ca2565b607360008b8b858181106127d2576127d26144a8565b90506020020160208101906127e79190613ca2565b6001600160a01b03166001600160a01b03168152602001908152602001600020600087878581811061281b5761281b6144a8565b90506020020135815260200190815260200160002060000160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550828282818110612869576128696144a8565b905060200201602081019061287e91906147ca565b607360008b8b85818110612894576128946144a8565b90506020020160208101906128a99190613ca2565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008787858181106128dd576128dd6144a8565b60209081029290920135835250810191909152604001600020805460ff19166001838181111561290f5761290f613ce1565b021790555060010161278d565b507f2544bff60c6d5b84946e06804af9f84e150bbee85238dbdee79efca4e0adf401888888888888888860405161210e989796959493929190614938565b6000610993825490565b60008151600181111561297957612979613ce1565b14801561298a575060008160400151115b801561299857506020810151155b806129c257506001815160018111156129b3576129b3613ce1565b1480156129c257506040810151155b6122255760405163034992a760e51b815260040160405180910390fd5b60006129f160608301604084016147ca565b6001811115612a0257612a02613ce1565b148015612a3f575060386000612a1e6040840160208501613ca2565b6001600160a01b031681526020810191909152604001600020546080820135105b1561222557604051636eff4a8560e11b815260040160405180910390fd5b600060608186516001811115612a7557612a75613ce1565b03612b525760408681015181516001600160a01b038881166024830152878116604483015260648083019390935283518083039093018352608490910183526020820180516001600160e01b03166323b872dd60e01b179052915191851691612ade91906149c9565b6000604051808303816000865af19150503d8060008114612b1b576040519150601f19603f3d011682016040523d82523d6000602084013e612b20565b606091505b509092509050818015612b4b575080511580612b4b575080806020019051810190612b4b91906147e7565b9150612c36565b600186516001811115612b6757612b67613ce1565b03612c1d57602086810151604080516001600160a01b0389811660248301528881166044830152606480830194909452825180830390940184526084909101825292820180516001600160e01b03166323b872dd60e01b1790525191851691612bd091906149c9565b6000604051808303816000865af19150503d8060008114612c0d576040519150601f19603f3d011682016040523d82523d6000602084013e612c12565b606091505b505080925050612c36565b6040516361e411a760e11b815260040160405180910390fd5b81610a4d5785858585604051639d2e4c6760e01b8152600401610dfa94939291906149e5565b606e805460009182612c6d83614a1b565b9091555090506000612c9484838588612c8b368c90038c018c614a34565b93929190613548565b60008381526071602090815260409091208251815590820151600180830180549495508594909160ff19909116908381811115612cd357612cd3613ce1565b021790555060408281015180516002840180546001600160a01b039283166001600160a01b03199182161790915560208084015160038701805491851691841691909117905592840151600486015560608601518051600587018054918516918416919091179055928301516006860180549190931691161790550151600782015560808201518051600883018054909190829060ff191660018381811115612d7e57612d7e613ce1565b0217905550602082015181600101556040820151816002015550509050507ff313c253a5be72c29d0deb2c8768a9543744ac03d6b3cafd50cc976f1c2632fc612dc682612120565b82604051612dd59291906144d9565b60405180910390a150949350505050565b6000816001600160a01b0316836001600160a01b031603612e955760408086015190516001600160a01b0386169180156108fc02916000818181858888f19350505050612e9057816001600160a01b031663d0e30db086604001516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6c57600080fd5b505af1158015612e80573d6000803e3d6000fd5b5050505050612e908585856135b4565b611dd7565b600085516001811115612eaa57612eaa613ce1565b03613013576040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a91906148d7565b9050856040015181101561300257836001600160a01b03166340c10f1930838960400151612f489190614903565b6040516001600160a01b03909216602483015260448201526064016040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612f9c91906149c9565b6000604051808303816000865af19150503d8060008114612fd9576040519150601f19603f3d011682016040523d82523d6000602084013e612fde565b606091505b5050809250508161300257604051632f739fff60e11b815260040160405180910390fd5b61300d8686866135b4565b50611dd7565b60018551600181111561302857613028613ce1565b03612c1d5761303c83858760200151613632565b612e9057602085810151604080516001600160a01b038881166024830152604480830194909452825180830390940184526064909101825292820180516001600160e01b03166340c10f1960e01b179052519185169161309c91906149c9565b6000604051808303816000865af19150503d80600081146130d9576040519150601f19603f3d011682016040523d82523d6000602084013e6130de565b606091505b50508091505080612e905760405163c8e3a09f60e01b815260040160405180910390fd5b604080517f353bdd8d69b9e3185b3972e08b03845c0c14a21a390215302776a7a34b0e8764815282516020808301919091528301518183015291015160608201526080902090565b60008360030154118015613162575042836003015411155b1561317357825460ff191660041783555b6001600160a01b0382166000908152600284016020526040902054156131b75760405163025fd59560e41b81526001600160a01b0383166004820152602401610dfa565b6001600160a01b039091166000818152600284016020908152604082209390935560059093018054600181018255908452919092200180546001600160a01b0319169091179055565b600080600061320f600b611882565b6001600160a01b031663c441c4a86040518163ffffffff1660e01b8152600401600060405180830381865afa15801561324c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132749190810190614b22565b81519194509250905060005b8181101561330457858760020160008684815181106132a1576132a16144a8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054036132fc578281815181106132e1576132e16144a8565b60200260200101516bffffffffffffffffffffffff16850194505b600101613280565b5050505092915050565b600083831015801561333557506000855460ff16600481111561333357613333613ce1565b145b1561334d57845460ff19166001908117865585018290555b5050915460ff1692915050565b61336482826114a7565b6109ac5761337c816001600160a01b031660146136dd565b6133878360206136dd565b604051602001613398929190614c1a565b60408051601f198184030181529082905262461bcd60e51b8252610dfa91600401614c8f565b6133c882826114a7565b6109ac576000828152606b602090815260408083206001600160a01b03851684529091529020805460ff191660011790556134003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f0b836001600160a01b038416613878565b61346382826114a7565b156109ac576000828152606b602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0b836001600160a01b0384166138c7565b60005460ff16610f4c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610dfa565b6000826000018281548110613535576135356144a8565b9060005260206000200154905092915050565b613550613a8d565b92835260016020808501919091526060840180516001600160a01b0396871690528682015181519087169083015251466040918201528651818601805191881690915280519490961693909101929092529251810192909252910151608082015290565b600080845160018111156135ca576135ca613ce1565b036135e5576135de828486604001516139ba565b905061360e565b6001845160018111156135fa576135fa613ce1565b03612c1d576135de82848660200151613632565b80611178578383836040516341bd7d9160e11b8152600401610dfa93929190614ca2565b604080513060248201526001600160a01b038481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092861691613690916149c9565b6000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b509095945050505050565b606060006136ec8360026145e7565b6136f79060026148f0565b6001600160401b0381111561370e5761370e6142cc565b6040519080825280601f01601f191660200182016040528015613738576020820181803683370190505b509050600360fc1b81600081518110613753576137536144a8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613782576137826144a8565b60200101906001600160f81b031916908160001a90535060006137a68460026145e7565b6137b19060016148f0565b90505b6001811115613829576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106137e5576137e56144a8565b1a60f81b8282815181106137fb576137fb6144a8565b60200101906001600160f81b031916908160001a90535060049490941c9361382281614cd2565b90506137b4565b508315610f0b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610dfa565b60008181526001830160205260408120546138bf57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610993565b506000610993565b600081815260018301602052604081205480156139b05760006138eb600183614903565b85549091506000906138ff90600190614903565b905081811461396457600086600001828154811061391f5761391f6144a8565b9060005260206000200154905080876000018481548110613942576139426144a8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397557613975614ce9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610993565b6000915050610993565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009260609290871691613a1791906149c9565b6000604051808303816000865af19150503d8060008114613a54576040519150601f19603f3d011682016040523d82523d6000602084013e613a59565b606091505b509092509050818015613a84575080511580613a84575080806020019051810190613a8491906147e7565b95945050505050565b6040805160a08101825260008082526020808301829052835160608082018652838252818301849052818601849052848601919091528451808201865283815280830184905280860184905281850152845190810185528281529081018290529283015290608082015290565b600060208284031215613b0c57600080fd5b81356001600160e01b031981168114610f0b57600080fd5b60008082840360c0811215613b3857600080fd5b60a0811215613b4657600080fd5b50919360a08501359350915050565b60006101608284031215613b6857600080fd5b50919050565b60008083601f840112613b8057600080fd5b5081356001600160401b03811115613b9757600080fd5b6020830191508360208260051b850101111561137457600080fd5b60008060208385031215613bc557600080fd5b82356001600160401b03811115613bdb57600080fd5b613be785828601613b6e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015613c2d578351151583529284019291840191600101613c0f565b50909695505050505050565b600060208284031215613c4b57600080fd5b5035919050565b6001600160a01b038116811461222557600080fd5b80356118f881613c52565b60008060408385031215613c8557600080fd5b823591506020830135613c9781613c52565b809150509250929050565b600060208284031215613cb457600080fd5b8135610f0b81613c52565b60008060408385031215613cd257600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6080810160058610613d0b57613d0b613ce1565b9481526020810193909352604083019190915260609091015290565b600080600060408486031215613d3c57600080fd5b83356001600160401b0380821115613d5357600080fd5b818601915086601f830112613d6757600080fd5b813581811115613d7657600080fd5b87602060a083028501011115613d8b57600080fd5b6020928301989097509590910135949350505050565b60008060408385031215613db457600080fd5b8235613dbf81613c52565b946020939093013593505050565b6002811061222557612225613ce1565b81516040820190613ded81613dcd565b82526020928301516001600160a01b0316929091019190915290565b60008060008060408587031215613e1f57600080fd5b84356001600160401b0380821115613e3657600080fd5b613e4288838901613b6e565b90965094506020870135915080821115613e5b57600080fd5b50613e6887828801613b6e565b95989497509550505050565b80516001600160a01b03908116835260208083015190911690830152604090810151910152565b8051613ea681613dcd565b825260208181015190830152604090810151910152565b8581526101608101613ece86613dcd565b856020830152613ee16040830186613e74565b613eee60a0830185613e74565b612211610100830184613e9b565b8035601081106118f857600080fd5b60008060408385031215613f1e57600080fd5b613f2783613efc565b91506020830135613c9781613c52565b806040810183101561099357600080fd5b60008060008060008060008060008060006101208c8e031215613f6a57600080fd5b613f738c613c67565b9a5060208c0135995060408c0135985060608c0135975060808c013596506001600160401b038060a08e01351115613faa57600080fd5b613fba8e60a08f01358f01613b6e565b909750955060c08d0135811015613fd057600080fd5b613fe08e60c08f01358f01613f37565b94508060e08e01351115613ff357600080fd5b6140038e60e08f01358f01613f37565b9350806101008e0135111561401757600080fd5b506140298d6101008e01358e01613b6e565b81935080925050509295989b509295989b9093969950565b6000806020838503121561405457600080fd5b82356001600160401b038082111561406b57600080fd5b818501915085601f83011261407f57600080fd5b81358181111561408e57600080fd5b866020610160830285010111156140a457600080fd5b60209290920196919550909350505050565b6000806000806000806000806080898b0312156140d257600080fd5b88356001600160401b03808211156140e957600080fd5b6140f58c838d01613b6e565b909a50985060208b013591508082111561410e57600080fd5b61411a8c838d01613b6e565b909850965060408b013591508082111561413357600080fd5b61413f8c838d01613b6e565b909650945060608b013591508082111561415857600080fd5b506141658b828c01613b6e565b999c989b5096995094979396929594505050565b60006020828403121561418b57600080fd5b610f0b82613efc565b6000806000604084860312156141a957600080fd5b8335925060208401356001600160401b038111156141c657600080fd5b6141d286828701613b6e565b9497909650939450505050565b60005b838110156141fa5781810151838201526020016141e2565b50506000910152565b6000815180845261421b8160208601602086016141df565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561428657603f19888603018452614274858351614203565b94509285019290850190600101614258565b5092979650505050505050565b6000806000606084860312156142a857600080fd5b833592506020840135915060408401356142c181613c52565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614304576143046142cc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614332576143326142cc565b604052919050565b6002811061222557600080fd5b60006060828403121561435957600080fd5b6143616142e2565b9050813561436e81613c52565b8152602082013561437e81613c52565b806020830152506040820135604082015292915050565b6000606082840312156143a757600080fd5b6143af6142e2565b905081356143bc8161433a565b80825250602082013560208201526040820135604082015292915050565b600061016082840312156143ed57600080fd5b60405160a081018181106001600160401b038211171561440f5761440f6142cc565b6040528235815260208301356144248161433a565b60208201526144368460408501614347565b60408201526144488460a08501614347565b606082015261445b846101008501614395565b60808201529392505050565b6003811061447757614477613ce1565b9052565b606081016144898286614467565b60208201939093526001600160a01b0391909116604090910152919050565b634e487b7160e01b600052603260045260246000fd5b604081016144cc8285614467565b8260208301529392505050565b6000610180820190508382528251602083015260208301516144fa81613dcd565b8060408401525060408301516145136060840182613e74565b50606083015161452660c0840182613e74565b506080830151611a5c610120840182613e9b565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000808335601e1984360301811261459f57600080fd5b8301803591506001600160401b038211156145b957600080fd5b6020019150600581901b360382131561137457600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610993576109936145d1565b6001600160e01b031991909116815260200190565b602081016010831061462757614627613ce1565b91905290565b600181811c9082168061464157607f821691505b602082108103613b6857634e487b7160e01b600052602260045260246000fd5b6000808335601e1984360301811261467857600080fd5b8301803591506001600160401b0382111561469257600080fd5b60200191503681900382131561137457600080fd5b601f821115610db7576000816000526020600020601f850160051c810160208610156146d05750805b601f850160051c820191505b81811015610a4d578281556001016146dc565b6001600160401b03831115614706576147066142cc565b61471a83614714835461462d565b836146a7565b6000601f84116001811461474e57600085156147365750838201355b600019600387901b1c1916600186901b178355611dd7565b600083815260209020601f19861690835b8281101561477f578685013582556020948501946001909201910161475f565b508682101561479c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000606082840312156147c057600080fd5b610f0b8383614395565b6000602082840312156147dc57600080fd5b8135610f0b8161433a565b6000602082840312156147f957600080fd5b81518015158114610f0b57600080fd5b6001600160e01b03198316815260408101600b83106144cc576144cc613ce1565b8183526000602080850194508260005b8581101561486857813561484d81613c52565b6001600160a01b03168752958201959082019060010161483a565b509495945050505050565b81835260006001600160fb1b0383111561488c57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006148b960408301868861482a565b82810360208401526148cc818587614873565b979650505050505050565b6000602082840312156148e957600080fd5b5051919050565b80820180821115610993576109936145d1565b81810381811115610993576109936145d1565b60008261493357634e487b7160e01b600052601260045260246000fd5b500490565b60808152600061494c608083018a8c61482a565b60208382036020850152614961828a8c61482a565b9150838203604085015261497682888a614873565b848103606086015285815286925060200160005b868110156149b857833561499d8161433a565b6149a681613dcd565b8252928201929082019060010161498a565b509c9b505050505050505050505050565b600082516149db8184602087016141df565b9190910192915050565b60c081016149f38287613e9b565b6001600160a01b0394851660608301529284166080820152921660a090920191909152919050565b600060018201614a2d57614a2d6145d1565b5060010190565b600060a08284031215614a4657600080fd5b614a4e6142e2565b8235614a5981613c52565b81526020830135614a6981613c52565b6020820152614a7b8460408501614395565b60408201529392505050565b60006001600160401b03821115614aa057614aa06142cc565b5060051b60200190565b600082601f830112614abb57600080fd5b81516020614ad0614acb83614a87565b61430a565b8083825260208201915060208460051b870101935086841115614af257600080fd5b602086015b84811015614b17578051614b0a81613c52565b8352918301918301614af7565b509695505050505050565b600080600060608486031215614b3757600080fd5b83516001600160401b0380821115614b4e57600080fd5b614b5a87838801614aaa565b9450602091508186015181811115614b7157600080fd5b614b7d88828901614aaa565b945050604086015181811115614b9257600080fd5b86019050601f81018713614ba557600080fd5b8051614bb3614acb82614a87565b81815260059190911b82018301908381019089831115614bd257600080fd5b928401925b82841015614c0b5783516bffffffffffffffffffffffff81168114614bfc5760008081fd5b82529284019290840190614bd7565b80955050505050509250925092565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614c528160178501602088016141df565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614c838160288401602088016141df565b01602801949350505050565b602081526000610f0b6020830184614203565b60a08101614cb08286613e9b565b6001600160a01b03938416606083015291909216608090920191909152919050565b600081614ce157614ce16145d1565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ee02a5eecdaf000f89a97c80581647ea2e6846acd876adce9ad2517b01ba19a64736f6c63430008170033 - │ ├─ [3959122] → new (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]@0x90193C961A926261B756D1E5bb255e67ff9498A1 - │ │ └─ ← 19765 bytes of code - │ ├─ [8581] GeneralConfig::label(31337 [3.133e4], (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "RoninGatewayV3::Logic") - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) [staticcall] - │ │ │ └─ ← "0x90193C961A926261B756D1E5bb255e67ff9498A1" - │ │ ├─ [0] VM::label((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]") - │ │ │ └─ ← () - │ │ └─ ← () - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [19843] ArtifactFactory::generateArtifact(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1], "RoninGatewayV3.sol", "RoninGatewayV3Logic", 0x, 3) - │ │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ │ ├─ [2646] GeneralConfig::getExplorer(0x054c6f63616c0000000000000000000000000000000000000000000000000000) [staticcall] - │ │ │ └─ ← "" - │ │ ├─ [0] console::log("\u{1b}[92mRoninGatewayV3Logic will be deployed at: address/0x90193c961a926261b756d1e5bb255e67ff9498a1\u{1b}[0m", "(nonce: 3)") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [1210] GeneralConfig::getRuntimeConfig() [staticcall] - │ │ │ └─ ← Option({ log: false, trezor: false }) - │ │ ├─ [0] VM::getLabel((31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) - │ │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]" - │ │ ├─ [0] console::log("Skipping artifact generation for:", "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3::Logic\u{1b}[0m[0x90193C961A926261B756D1E5bb255e67ff9498A1]", "\n") [staticcall] - │ │ │ └─ ← () - │ │ └─ ← () - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] - │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] - │ │ └─ ← 4 - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::broadcast() - │ │ └─ ← () - │ ├─ [0] VM::getCode("TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy") [staticcall] - │ │ └─ ← 0x608060405260405162000db238038062000db2833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000d6b833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000d8b6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000d6b8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61081480620005576000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106a6565b610118565b61005b6100933660046106c1565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106a6565b6101ed565b3480156100f557600080fd5b506100ad61020d565b61010661022e565b6101166101116102c3565b6102cd565b565b6101206102f1565b6001600160a01b0316330361014d5761014a81604051806020016040528060008152506000610324565b50565b61014a6100fe565b61015d6102f1565b6001600160a01b031633036101b4576101af8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610324915050565b505050565b6101af6100fe565b60006101c66102f1565b6001600160a01b031633036101e2576101dd6102c3565b905090565b6101ea6100fe565b90565b6101f56102f1565b6001600160a01b0316330361014d5761014a8161034f565b60006102176102f1565b6001600160a01b031633036101e2576101dd6102f1565b6102366102f1565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd6103a3565b3660008037600080366000845af43d6000803e8080156102ec573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61032d836103cb565b60008251118061033a5750805b156101af57610349838361040b565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103786102f1565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a81610437565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610315565b6103d4816104e0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061043083836040518060600160405280602781526020016107b860279139610574565b9392505050565b6001600160a01b03811661049c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ba565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61054d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102ba565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104bf565b60606001600160a01b0384163b6105dc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016102ba565b600080856001600160a01b0316856040516105f79190610768565b600060405180830381855af49150503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b5091509150610647828286610651565b9695505050505050565b60608315610660575081610430565b8251156106705782518084602001fd5b8160405162461bcd60e51b81526004016102ba9190610784565b80356001600160a01b03811681146106a157600080fd5b919050565b6000602082840312156106b857600080fd5b6104308261068a565b6000806000604084860312156106d657600080fd5b6106df8461068a565b9250602084013567ffffffffffffffff808211156106fc57600080fd5b818601915086601f83011261071057600080fd5b81358181111561071f57600080fd5b87602082850101111561073157600080fd5b6020830194508093505050509250925092565b60005b8381101561075f578181015183820152602001610747565b50506000910152565b6000825161077a818460208701610744565b9190910192915050565b60208152600082518060208401526107a3816040850160208701610744565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ec12be842bfcb61122d5b6339b7102392ff14c28176829b5fed43c54c70a9d5064736f6c63430008170033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564 - │ ├─ [688350] → new (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]@0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496 - │ │ ├─ emit Upgraded(implementation: (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]: [0x90193C961A926261B756D1E5bb255e67ff9498A1]) - │ │ ├─ [222010] (31337)RoninGatewayV3::Logic[0x90193C961A926261B756D1E5bb255e67ff9498A1]::initialize(0x0000000000000000000000000000000000000000, 3, 6, 2, 3, [], [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], [[1], [0]], [0]) [delegatecall] - │ │ │ ├─ emit RoleGranted(role: 0x0000000000000000000000000000000000000000000000000000000000000000, account: 0x0000000000000000000000000000000000000000, sender: DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) - │ │ │ ├─ emit ThresholdUpdated(nonce: 0, numerator: 3, denominator: 6, previousNumerator: 0, previousDenominator: 0) - │ │ │ ├─ emit TrustedThresholdUpdated(nonce: 1, numerator: 2, denominator: 3, previousNumerator: 3, previousDenominator: 6) - │ │ │ ├─ emit TokenMapped(roninTokens: [0x0000000000000000000000000000000000000000], mainchainTokens: [0x0000000000000000000000000000000000000000], chainIds: [1], standards: [0]) - │ │ │ ├─ emit MinimumThresholdsUpdated(tokens: [0x0000000000000000000000000000000000000000], threshold: [0]) - │ │ │ ├─ emit Initialized(version: 1) - │ │ │ └─ ← () - │ │ ├─ emit AdminChanged(previousAdmin: 0x0000000000000000000000000000000000000000, newAdmin: proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) - │ │ └─ ← 2068 bytes of code - │ ├─ [0] VM::load((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) [staticcall] - │ │ └─ ← 0x000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90 - │ ├─ [0] VM::getLabel((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) - │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]" - │ ├─ [0] VM::toString(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) [staticcall] - │ │ └─ ← "0x399251E522341ef9791CfdC520caF8a89563ee90" - │ ├─ [0] VM::toString(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90]) [staticcall] - │ │ └─ ← "0x399251E522341ef9791CfdC520caF8a89563ee90" - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [17957] GeneralConfig::setAddress(0x054c6f63616c0000000000000000000000000000000000000000000000000000, 0x0e526f6e696e4761746577617956330000000000000000000000000000000000, (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) - │ │ ├─ [0] VM::toString(31337 [3.133e4]) [staticcall] - │ │ │ └─ ← "31337" - │ │ ├─ [0] VM::toString((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) [staticcall] - │ │ │ └─ ← "0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496" - │ │ ├─ [0] VM::label((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]") - │ │ │ └─ ← () - │ │ └─ ← () - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [19849] ArtifactFactory::generateArtifact(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496], "TransparentUpgradeableProxy.sol:TransparentUpgradeableProxy", "RoninGatewayV3Proxy", 0x9584a5920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000, 4) - │ │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ │ ├─ [2646] GeneralConfig::getExplorer(0x054c6f63616c0000000000000000000000000000000000000000000000000000) [staticcall] - │ │ │ └─ ← "" - │ │ ├─ [0] console::log("\u{1b}[92mRoninGatewayV3Proxy will be deployed at: address/0xa8452ec99ce0c64f20701db7dd3abdb607c00496\u{1b}[0m", "(nonce: 4)") [staticcall] - │ │ │ └─ ← () - │ │ ├─ [1210] GeneralConfig::getRuntimeConfig() [staticcall] - │ │ │ └─ ← Option({ log: false, trezor: false }) - │ │ ├─ [0] VM::getLabel((31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]) - │ │ │ └─ ← "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]" - │ │ ├─ [0] console::log("Skipping artifact generation for:", "(\u{1b}[94m31337\u{1b}[0m)\u{1b}[93mRoninGatewayV3\u{1b}[0m[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]", "\n") [staticcall] - │ │ │ └─ ← () - │ │ └─ ← () - │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - ├─ [14422983] → new MainchainBridgeManagerDeploy@0x2e234DAe75C793f67A35089C9d99245E1C58470b - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [1127] GeneralConfig::getCurrentNetwork() [staticcall] - │ │ └─ ← 0x054c6f63616c0000000000000000000000000000000000000000000000000000 - │ ├─ [0] VM::toString(1) [staticcall] - │ │ └─ ← "1" - │ ├─ [0] VM::addr(89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76]) [staticcall] - │ │ └─ ← operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95] - │ ├─ [0] VM::label(operator-1: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95], "operator-1") - │ │ └─ ← () - │ ├─ [0] VM::toString(1) [staticcall] - │ │ └─ ← "1" - │ ├─ [0] VM::addr(42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76]) [staticcall] - │ │ └─ ← governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430] - │ ├─ [0] VM::label(governor-1: [0xbF91bFD887138C482101Bff998F4A96D41C5c430], "governor-1") - │ │ └─ ← () - │ ├─ [0] VM::toString(2) [staticcall] - │ │ └─ ← "2" - │ ├─ [0] VM::addr(94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76]) [staticcall] - │ │ └─ ← operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D] - │ ├─ [0] VM::label(operator-2: [0x10e09AaCfb9408a6da536d258d3d64718ab56E4D], "operator-2") - │ │ └─ ← () - │ ├─ [0] VM::toString(2) [staticcall] - │ │ └─ ← "2" - │ ├─ [0] VM::addr(403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74]) [staticcall] - │ │ └─ ← governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E] - │ ├─ [0] VM::label(governor-2: [0x8856475Dd525166b6654eDd18e0011e592459a8E], "governor-2") - │ │ └─ ← () - │ ├─ [0] VM::toString(3) [staticcall] - │ │ └─ ← "3" - │ ├─ [0] VM::addr(66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76]) [staticcall] - │ │ └─ ← operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D] - │ ├─ [0] VM::label(operator-3: [0x698beC9a526055cD092E9E15aCcCfC542b63f92D], "operator-3") - │ │ └─ ← () - │ ├─ [0] VM::toString(3) [staticcall] - │ │ └─ ← "3" - │ ├─ [0] VM::addr(56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76]) [staticcall] - │ │ └─ ← governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454] - │ ├─ [0] VM::label(governor-3: [0xC966b8836E01dB8f720f0A169dA0252767b87454], "governor-3") - │ │ └─ ← () - │ ├─ [0] VM::toString(4) [staticcall] - │ │ └─ ← "4" - │ ├─ [0] VM::addr(62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76]) [staticcall] - │ │ └─ ← operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D] - │ ├─ [0] VM::label(operator-4: [0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D], "operator-4") - │ │ └─ ← () - │ ├─ [0] VM::toString(4) [staticcall] - │ │ └─ ← "4" - │ ├─ [0] VM::addr(27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76]) [staticcall] - │ │ └─ ← governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4] - │ ├─ [0] VM::label(governor-4: [0x713886700F9F4b7dF033BD1615177684cEDCeee4], "governor-4") - │ │ └─ ← () - │ ├─ [0] VM::toString(5) [staticcall] - │ │ └─ ← "5" - │ ├─ [0] VM::addr(26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76]) [staticcall] - │ │ └─ ← operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41] - │ ├─ [0] VM::label(operator-5: [0xaf627C77b0b0ed13882b0FF7B10af7a610035A41], "operator-5") - │ │ └─ ← () - │ ├─ [0] VM::toString(5) [staticcall] - │ │ └─ ← "5" - │ ├─ [0] VM::addr(104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77]) [staticcall] - │ │ └─ ← governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11] - │ ├─ [0] VM::label(governor-5: [0xa131e33Ef51a90640F54291645BdcEE9De3D1c11], "governor-5") - │ │ └─ ← () - │ ├─ [0] VM::toString(6) [staticcall] - │ │ └─ ← "6" - │ ├─ [0] VM::addr(113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]) [staticcall] - │ │ └─ ← operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8] - │ ├─ [0] VM::label(operator-6: [0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], "operator-6") - │ │ └─ ← () - │ ├─ [0] VM::toString(6) [staticcall] - │ │ └─ ← "6" - │ ├─ [0] VM::addr(6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]) [staticcall] - │ │ └─ ← governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8] - │ ├─ [0] VM::label(governor-6: [0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], "governor-6") - │ │ └─ ← () - │ ├─ [0] VM::addr(91510552187238886959033578665964256892121014792639911859038233360780899104770 [9.151e76]) [staticcall] - │ │ └─ ← governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e] - │ ├─ [0] VM::label(governance-admin: [0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e], "governance-admin") - │ │ └─ ← () - │ ├─ [0] VM::addr(32023155812407028061452097301509641536118192107878305823158825758004472210926 [3.202e76]) [staticcall] - │ │ └─ ← validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40] - │ ├─ [0] VM::label(validator-set-contract: [0x13492C1CaA270F0A24342015A049518CF093dD40], "validator-set-contract") - │ │ └─ ← () - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0c42726964676552657761726400000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeReward[0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351]: [0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [0] VM::addr(67501766086945423188359301496192992873575530264346267663568933074015626216763 [6.75e76]) [staticcall] - │ │ └─ ← proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90] - │ ├─ [0] VM::label(proxy-admin: [0x399251E522341ef9791CfdC520caF8a89563ee90], "proxy-admin") - │ │ └─ ← () - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]: [0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e427269646765547261636b696e670000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeTracking[0x50EEf481cae4250d252Ae577A09bF514f224C6C4]: [0x50EEf481cae4250d252Ae577A09bF514f224C6C4] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x0e526f6e696e4761746577617956330000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)RoninGatewayV3[0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496]: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496] - │ ├─ [7326] GeneralConfig::getAddressFromCurrentNetwork(0x0b427269646765536c6173680000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)BridgeSlash[0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809]: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] - │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] - │ ├─ [7330] GeneralConfig::getAddressFromCurrentNetwork(0x124d61696e636861696e47617465776179563300000000000000000000000000) [staticcall] - │ │ └─ ← (31337)MainchainGatewayV3[0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB]: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0457455448000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)WETH[0x978e3286EB805934215a88694d80b09aDed68D90]: [0x978e3286EB805934215a88694d80b09aDed68D90] - │ ├─ [7336] GeneralConfig::getAddressFromCurrentNetwork(0x0455534443000000000000000000000000000000000000000000000000000000) [staticcall] - │ │ └─ ← (31337)USDC[0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6]: [0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6] - │ ├─ [2964] GeneralConfig::setRawSharedArguments(0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000013492c1caa270f0a24342015a049518cf093dd40000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c400000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c0049600000000000000000000000013492c1caa270f0a24342015a049518cf093dd400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c300000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000013492c1caa270f0a24342015a049518cf093dd4000000000000000000000000084850a90002c2edf9bff8d3c296e9c9c0427cd9e000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000012800000000000000000000000000000000000000000000000000000000000001340000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000001640000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d21060559c9beb54fc07afd6151adf6cfcddcaeb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c00496000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000000000060000000000000000000000007083c6a0f61b3fdc6a8f4bb573f5097b485cbb9500000000000000000000000010e09aacfb9408a6da536d258d3d64718ab56e4d000000000000000000000000698bec9a526055cd092e9e15acccfc542b63f92d0000000000000000000000000d8274a6b3cddb84e8fd4f8c93b4cfa26dbcb45d000000000000000000000000af627c77b0b0ed13882b0ff7b10af7a610035a41000000000000000000000000ccfca9c1c0b543d21dc71c43dce7b174a7015fb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000bf91bfd887138c482101bff998f4a96d41c5c4300000000000000000000000008856475dd525166b6654edd18e0011e592459a8e000000000000000000000000c966b8836e01db8f720f0a169da0252767b87454000000000000000000000000713886700f9f4b7df033bd1615177684cedceee4000000000000000000000000a131e33ef51a90640f54291645bdcee9de3d1c1100000000000000000000000030949311d69fa2eae2b805a9905eb6d72a5b38a80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a8452ec99ce0c64f20701db7dd3abdb607c004960000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c57726170706564205745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5772617070656420524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457524f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000134178696520496e66696e6974792053686172640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034158530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012536d6f6f7468204c6f766520506f74696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000855534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553444300000000000000000000000000000000000000000000000000000000000000000000000000000000399251e522341ef9791cfdc520caf8a89563ee90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000006c584057a233113f3d6bbb9fa535457f882e4a1651e9872443fbbc09c98cab8b5d0775821d287000a7bcdf57179f0756bcea1e44933bc9b95e7437a24f89565ec922694c2a69e2569e7c38daf93226a6654bf3ab7f08a5bae2f0f3ba29b7c335c8961c3586584723ed2cf8ed4692507f7ccfa033d901aa56911770fa9ab4bb3e03b1918b42fc7ffb813c3827ed00534d936c7930115f3d65fab756c2e15b0e3bdfa57e1de87203668f02b950f40e1246963fa77677df934e74c97577520c1513700000000000000000000000000000000000000000000000000000000000000065d2503fc5f74f349f61fd45c72868b37a10b28a35052be8e3f15eb5d1f65796c00e49bee553750db35dc75dd0f611fc9ca1a950367e3c78244d9fbf66e643c7c7c8efe0b120312d5f846e2e27820676655285e2808b5e4e93580b1d5b5129b0c3d07b40a68891e1ce2246c87932f18ffd4c01876519808e339af84d9d65aab7fe7bedbcabd91f0b98becc732538ae35a6d72e3efc234a10b4383ae967d1af9590e91dc744fe301c24bac6970238cabaca15627df2414bf146a664dd0792399b3) - │ │ └─ ← () - │ └─ ← 69933 bytes of code - ├─ [450330] MainchainBridgeManagerDeploy::run() - │ ├─ [169710] GeneralConfig::sharedArguments() [staticcall] - │ │ └─ ← SharedParameter({ mainchainBridgeManager: BridgeManagerParam({ num: 70, denom: 100, roninChainId: 31337 [3.133e4], expiryDuration: 0, bridgeContract: 0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB, callbackRegisters: [], bridgeOperators: [], governors: [], voteWeights: [], targetOptions: [1], targets: [0xd21060559c9beb54fC07aFd6151aDf6cFCDDCAeB] }), mainchainGatewayV3: MainchainGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, wrappedToken: 0x0000000000000000000000000000000000000000, roninChainId: 0, numerator: 1, highTierVWNumerator: 10, denominator: 10, addresses: [[0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], [0x978e3286EB805934215a88694d80b09aDed68D90, 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6], []], thresholds: [[10, 0], [20, 0], [100000 [1e5], 0], [12, 0]], standards: [0, 0] }), roninBridgeManager: BridgeManagerParam({ num: 2, denom: 4, roninChainId: 0, expiryDuration: 1209600 [1.209e6], bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, callbackRegisters: [0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809], bridgeOperators: [0x7083C6a0F61B3FdC6a8f4Bb573F5097b485Cbb95, 0x10e09AaCfb9408a6da536d258d3d64718ab56E4D, 0x698beC9a526055cD092E9E15aCcCfC542b63f92D, 0x0D8274A6B3CDDB84e8FD4F8c93B4cfA26dBCb45D, 0xaf627C77b0b0ed13882b0FF7B10af7a610035A41, 0xcCfCA9C1C0b543d21DC71C43dce7B174A7015Fb8], governors: [0xbF91bFD887138C482101Bff998F4A96D41C5c430, 0x8856475Dd525166b6654eDd18e0011e592459a8E, 0xC966b8836E01dB8f720f0A169dA0252767b87454, 0x713886700F9F4b7dF033BD1615177684cEDCeee4, 0xa131e33Ef51a90640F54291645BdcEE9De3D1c11, 0x30949311D69Fa2eAE2b805A9905eb6D72a5B38a8], voteWeights: [100, 100, 100, 100, 100, 100], targetOptions: [1, 2, 3, 4], targets: [0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351, 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, 0x50EEf481cae4250d252Ae577A09bF514f224C6C4] }), roninGatewayV3: RoninGatewayV3Param({ roleSetter: 0x0000000000000000000000000000000000000000, numerator: 3, denominator: 6, trustedNumerator: 2, trustedDenominator: 3, withdrawalMigrators: [], packedAddresses: [[0x0000000000000000000000000000000000000000], [0x0000000000000000000000000000000000000000]], packedNumbers: [[1], [0]], standards: [0] }), bridgeSlash: BridgeSlashParam({ validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e }), bridgeTracking: BridgeTrackingParam({ bridgeContract: 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496, validatorContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, startedAtBlock: 0 }), bridgeReward: BridgeRewardParam({ bridgeManagerContract: 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3, bridgeTrackingContract: 0x50EEf481cae4250d252Ae577A09bF514f224C6C4, bridgeSlashContract: 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809, validatorSetContract: 0x13492C1CaA270F0A24342015A049518CF093dD40, dposGA: 0x84850a90002c2edf9BFF8D3C296e9C9C0427CD9e, rewardPerPeriod: 5000 }), weth: MockWrappedTokenParam({ name: "Wrapped WETH", symbol: "WETH" }), wron: MockWrappedTokenParam({ name: "Wrapped RON", symbol: "WRON" }), axs: MockERC20Param({ name: "Axie Infinity Shard", symbol: "AXS" }), slp: MockERC20Param({ name: "Smooth Love Potion", symbol: "SLP" }), usdc: MockERC20Param({ name: "USD Coin", symbol: "USDC" }), test: UnitTestParam({ proxyAdmin: 0x399251E522341ef9791CfdC520caF8a89563ee90, operatorPKs: [89338892785005572287897341235069628097861401345577076384027374511660850657461 [8.933e76], 94291935571555911197469540623796976523702620179200967527175130350870576063980 [9.429e76], 66105842787854347706174987450235791373805460984806302077048451364001077277532 [6.61e76], 62139592644894956050512135403780103102340499689216530470315027870165852992480 [6.213e76], 26730799742766852067733297249950721399537296601340543341730795111646130922429 [2.673e76], 113233486732718915359374711713006098219786402783232076428732164185014040351031 [1.132e77]], governorPKs: [42130495768838953123449699907647043401609189235260698547160306600511619299692 [4.213e76], 403917326894831356924335699703306599620251154684925206401321994183394999420 [4.039e74], 56339438849551946521399288704068023525847000585964828640418712388045726980876 [5.633e76], 27604694287983472608131360737372851209735677770180426011553376648209901464447 [2.76e76], 104821485913365662130142988392886912637914151491318229463022685936103607433561 [1.048e77], 6590094224521758730518853749126478106862199057651219259336272091588099021235 [6.59e75]] }) }) - │ ├─ [0] console::log("> ", "\u{1b}[94m_deployImmutable RoninBridgeManager\u{1b}[0m", "...") [staticcall] - │ │ └─ ← () - │ ├─ [5409] GeneralConfig::getContractName(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← "RoninBridgeManager" - │ ├─ [3855] GeneralConfig::getContractAbsolutePath(0x12526f6e696e4272696467654d616e6167657200000000000000000000000000) [staticcall] - │ │ └─ ← "RoninBridgeManager.sol" - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::getNonce(DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall] - │ │ └─ ← 5 - │ ├─ [3270] GeneralConfig::getSender() [staticcall] - │ │ └─ ← DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38] - │ ├─ [0] VM::broadcast() - │ │ └─ ← () - │ ├─ [0] VM::getCode("RoninBridgeManager.sol") [staticcall] - │ │ └─ ← 0x60a060405260405162007a4d38038062007a4d833981016040819052620000269162001520565b8181898d8d8d8c8c8c8c8c836200003d81620001a0565b5050600160008051602062007a2d833981519152556200005e8888620002af565b506200006e9050600286620003c4565b604080516020808201839052600c60608301526b212924a223a2afa0a226a4a760a11b6080808401919091528284018a905283518084038201815260a0840185528051908301207f599a80fcaa47b95e2323ab4d34d34e0cc9feda4b843edafcc30c7bdf60ea15bf60c08501527f9d3fa1662ea89365eb7af36506f0ad5413bd7e078960d8481ff4718763aaa8e960e08501527fad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5610100850152610120808501919091528451808503909101815261014090930190935281519101209052620001598183856200046e565b50505050505050505062000173816200088e60201b60201c565b5062000181600030620008c1565b6200018d82826200095d565b505050505050505050505050506200199c565b606081620001ae8162000a20565b8251806001600160401b03811115620001cb57620001cb62001331565b604051908082528060200260200182016040528015620001f5578160200160208202803683370190505b50925080600003620002085750620002a9565b600080516020620079ed83398151915260006314d72edb60e21b815b84811015620002a3578781815181106200024257620002426200168c565b602002602001015192506200025d8362000a5c60201b60201c565b62000269838362000a94565b62000275848462000c73565b8782815181106200028a576200028a6200168c565b9115156020928302919091019091015260010162000224565b50505050505b50919050565b60008082841115620002e7576040516387f6f09560e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b60008051602062007a0d833981519152549150620003237fac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ff5490565b90506200033e60008051602062007a0d833981519152859055565b620003687fac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ff849055565b82846200038460008051602062007a2d83398151915262000c93565b60408051868152602081018690527f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910160405180910390a49250929050565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f811115620003fd57620003fd620016a2565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f811115620004415762000441620016a2565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b60606200047c838362000cbb565b620004878162000a20565b82518551811480156200049a5750845181145b620004c7576040516306b5667560e21b81526001600160e01b0319600035166004820152602401620002de565b806001600160401b03811115620004e257620004e262001331565b6040519080825280602002602001820160405280156200050c578160200160208202803683370190505b509250806000036200051f575062000886565b604080518082019091526000808252602082018190527f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c917f8400683eb2cb350596d73644c0c89fe45f108600003457374f4ab3e87b4f3aa3917fd38c234075fde25875da8a6b7e36b58b86681d483271a99eeeee1d78e258a24d917f88547008e60f5748911f2e59feb3093b7e4c2e87b2dd69d61f112fcc932de8e3919081908190815b89811015620007d8578d8181518110620005e257620005e26200168c565b602002602001015194508c81815181106200060157620006016200168c565b602002602001015193506200061c8562000dd960201b60201c565b620006278462000dd9565b8e81815181106200063c576200063c6200168c565b60200260200101516001600160601b03166000036200067d57604051637f11b8a360e11b81526001600160e01b0319600035166004820152602401620002de565b62000689898662000e10565b806200069c57506200069c898562000e10565b80620006af5750620006af878662000e10565b80620006c25750620006c2878562000e10565b158c8281518110620006d857620006d86200168c565b6020026020010190151590811515815250508b8181518110620006ff57620006ff6200168c565b602002602001015115620007cf5762000719898662000c73565b5062000726878562000c73565b506001600160a01b03848116600081815260208b90526040902080546001600160a01b0319169288169290921790915582528e518f90829081106200076f576200076f6200168c565b6020908102919091018101516001600160601b0316908301819052620007969084620016b8565b6001600160a01b038087166000908152602089815260409091208551918601516001600160601b0316600160a01b029190921617905592505b600101620005c4565b50620008057f6924fe71b0c8b61aea02ca498b5f53b29bd95726278b1fe4eb791bb24a42644c8362000e33565b506200083d635ebae8a060e01b8d8d6040516020016200082792919062001756565b60408051601f1981840301815291905262000e4d565b7f897810999654e525e272b5909785c4d0ceaee1bbf9c87d9091a37558b0423b788b8f8f8f60405162000874949392919062001788565b60405180910390a15050505050505050505b509392505050565b600281905560405181907fe5cd1c123a8cf63fa1b7229678db61fe8ae99dbbd27889370b6667c8cae97da190600090a250565b8060036000846004811115620008db57620008db620016a2565b6004811115620008ef57620008ef620016a2565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b039283161790558116826004811115620009305762000930620016a2565b6040517f356c8c57e9e84b99b1cb58b13c985b2c979f78cbdf4d0fa70fe2a98bb09a099d90600090a35050565b60005b825181101562000a1b57306001600160a01b03168282815181106200098957620009896200168c565b60200260200101516001600160a01b031603620009c85760405163053265f160e01b81526001600160e01b0319600035166004820152602401620002de565b62000a12838281518110620009e157620009e16200168c565b6020026020010151838381518110620009fe57620009fe6200168c565b6020026020010151620008c160201b60201c565b60010162000960565b505050565b62000a2b8162001188565b1562000a5957604051630d697db160e11b81526001600160e01b0319600035166004820152602401620002de565b50565b806001600160a01b03163b60000362000a5957604051630bfc64a360e21b81526001600160a01b0382166004820152602401620002de565b6040516001600160e01b03198216602482015260009060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525190915060009081906001600160a01b0386169062000af89085906200183e565b600060405180830381855afa9150503d806000811462000b35576040519150601f19603f3d011682016040523d82523d6000602084013e62000b3a565b606091505b50915091508162000c1c57846001600160a01b03168360405160240162000b6291906200188a565b60408051601f198184030181529181526020820180516001600160e01b03166325da93a560e11b1790525162000b9991906200183e565b600060405180830381855afa9150503d806000811462000bd6576040519150601f19603f3d011682016040523d82523d6000602084013e62000bdb565b606091505b5090925090508162000c1c5760405163069d427960e11b81526001600160e01b0319851660048201526001600160a01b0386166024820152604401620002de565b8080602001905181019062000c3291906200189f565b62000c6c5760405163069d427960e11b81526001600160e01b0319851660048201526001600160a01b0386166024820152604401620002de565b5050505050565b600062000c8a836001600160a01b03841662001233565b90505b92915050565b600062000c9e825490565b905062000cb68262000cb2836001620016b8565b9055565b919050565b81518151606091908082016001600160401b0381111562000ce05762000ce062001331565b60405190808252806020026020018201604052801562000d0a578160200160208202803683370190505b50925060005b8281101562000d6c5785818151811062000d2e5762000d2e6200168c565b602002602001015184828151811062000d4b5762000d4b6200168c565b6001600160a01b039092166020928302919091019091015260010162000d10565b60005b8281101562000dcf5785818151811062000d8d5762000d8d6200168c565b602002602001015185838151811062000daa5762000daa6200168c565b6001600160a01b03909216602092830291909101909101526001918201910162000d6f565b5050505092915050565b6001600160a01b03811662000a595760405163104c66df60e31b81526001600160e01b0319600035166004820152602401620002de565b6001600160a01b0381166000908152600183016020526040812054151562000c8a565b600062000c8d8362000e46818562001285565b9250829055565b600062000e69600080516020620079ed833981519152620012a5565b8051909150600081900362000e7e5750505050565b6000816001600160401b0381111562000e9b5762000e9b62001331565b60405190808252806020026020018201604052801562000ec5578160200160208202803683370190505b5090506000826001600160401b0381111562000ee55762000ee562001331565b60405190808252806020026020018201604052801562000f1a57816020015b606081526020019060019003908162000f045790505b5090506000868660405160200162000f34929190620018c3565b604051602081830303815290604052905060008160405160240162000f5a91906200188a565b60408051601f198184030181529190526020810180516001600160e01b03166325da93a560e11b179052905060005b858110156200113e5786818151811062000fa75762000fa76200168c565b60200260200101516001600160a01b03168360405162000fc891906200183e565b6000604051808303816000865af19150503d806000811462001007576040519150601f19603f3d011682016040523d82523d6000602084013e6200100c565b606091505b508683815181106200102257620010226200168c565b602002602001018684815181106200103e576200103e6200168c565b60200260200101829052821515151581525050508481815181106200106757620010676200168c565b602002602001015162001135578681815181106200108957620010896200168c565b60200260200101516001600160a01b031682604051620010aa91906200183e565b6000604051808303816000865af19150503d8060008114620010e9576040519150601f19603f3d011682016040523d82523d6000602084013e620010ee565b606091505b508683815181106200110457620011046200168c565b602002602001018684815181106200112057620011206200168c565b60200260200101829052821515151581525050505b60010162000f89565b507fc0b07a27e66788f39cc91405f012f34066b16f31b4bda9438c52f2dae0cc5b6382878686604051620011769493929190620018f6565b60405180910390a15050505050505050565b600081516000036200119c57506000919050565b60005b60018351038110156200122a57600181015b83518110156200122057838181518110620011d057620011d06200168c565b60200260200101516001600160a01b0316848381518110620011f657620011f66200168c565b60200260200101516001600160a01b03160362001217575060019392505050565b600101620011b1565b506001016200119f565b50600092915050565b60008181526001830160205260408120546200127c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000c8d565b50600062000c8d565b815481018181101562000c8d57634e487b7160005260116020526024601cfd5b60606000620012b483620012bb565b9392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156200130d57602002820191906000526020600020905b815481526020019060010190808311620012f8575b50505050509050919050565b80516001600160a01b038116811462000cb657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562001372576200137262001331565b604052919050565b60006001600160401b0382111562001396576200139662001331565b5060051b60200190565b600082601f830112620013b257600080fd5b81516020620013cb620013c5836200137a565b62001347565b8083825260208201915060208460051b870101935086841115620013ee57600080fd5b602086015b848110156200141557620014078162001319565b8352918301918301620013f3565b509695505050505050565b600082601f8301126200143257600080fd5b8151602062001445620013c5836200137a565b8083825260208201915060208460051b8701019350868411156200146857600080fd5b602086015b84811015620014155780516001600160601b03811681146200148f5760008081fd5b83529183019183016200146d565b600082601f830112620014af57600080fd5b81516020620014c2620013c5836200137a565b80838252602082019150600560208560051b880101945087851115620014e757600080fd5b602087015b8581101562001513578051828110620015055760008081fd5b8452928401928401620014ec565b5090979650505050505050565b60008060008060008060008060008060006101608c8e0312156200154357600080fd5b8b519a5060208c0151995060408c0151985060608c015197506200156a60808d0162001319565b60a08d01519097506001600160401b038111156200158757600080fd5b620015958e828f01620013a0565b60c08e015190975090506001600160401b03811115620015b457600080fd5b620015c28e828f01620013a0565b60e08e015190965090506001600160401b03811115620015e157600080fd5b620015ef8e828f01620013a0565b6101008e015190955090506001600160401b038111156200160f57600080fd5b6200161d8e828f0162001420565b6101208e015190945090506001600160401b038111156200163d57600080fd5b6200164b8e828f016200149d565b6101408e015190935090506001600160401b038111156200166b57600080fd5b620016798e828f01620013a0565b9150509295989b509295989b9093969950565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b8082018082111562000c8d57634e487b7160e01b600052601160045260246000fd5b60008151808452602080850194506020840160005b83811015620017165781516001600160a01b031687529582019590820190600101620016ef565b509495945050505050565b60008151808452602080850194506020840160005b838110156200171657815115158752958201959082019060010162001736565b6040815260006200176b6040830185620016da565b82810360208401526200177f818562001721565b95945050505050565b6080815260006200179d608083018762001721565b82810360208481019190915286518083528782019282019060005b81811015620017df5784516001600160601b031683529383019391830191600101620017b8565b50508481036040860152620017f58188620016da565b9250505082810360608401526200180d8185620016da565b979650505050505050565b60005b83811015620018355781810151838201526020016200181b565b50506000910152565b600082516200185281846020870162001818565b9190910192915050565b600081518084526200187681602086016020860162001818565b601f01601f19169290920160200192915050565b60208152600062000c8a60208301846200185c565b600060208284031215620018b257600080fd5b81518015158114620012b457600080fd5b6001600160e01b0319831681528151600090620018e881600485016020870162001818565b919091016004019392505050565b6080815260006200190b60808301876200185c565b602083820381850152620019208288620016da565b9150838203604085015262001936828762001721565b915083820360608501528185518084528284019150828160051b85010183880160005b838110156200198b57601f19878403018552620019788383516200185c565b9486019492509085019060010162001959565b50909b9a5050505050505050505050565b608051616019620019d4600039600081816103c5015281816106ba015281816108da015281816109db015261121801526160196000f3fe608060405234801561001057600080fd5b50600436106102685760003560e01c80639a7d338211610151578063c441c4a8116100c3578063de981f1b11610087578063de981f1b14610633578063e75235b81461065e578063e9c0349814610666578063f80b535214610679578063fb4f637114610681578063fdc4fa471461069457600080fd5b8063c441c4a8146105ce578063cc7e6b3b146105e5578063d0a50db014610605578063d78392f81461060d578063dafae4081461062057600080fd5b8063b384abef11610115578063b384abef1461050a578063b405aaf214610565578063b9c3620914610578578063bc4e068f146105a0578063bc9182fd146105b3578063bc96180b146105c657600080fd5b80639a7d3382146104b65780639b19dbfd146104c95780639b2ee437146104d1578063a1819f9a146104e4578063a8a0e32c146104f757600080fd5b80632d6d7d73116101ea578063663ac011116101ae578063663ac011146103e75780637de5dedd146103fa578063800eaab314610402578063828fc1a114610415578063865e6fd314610428578063901979d51461043b57600080fd5b80632d6d7d73146103675780632faf925d1461037a57806334d5f37b1461038d57806335da8121146103ad5780633644e515146103c057600080fd5b80630b881830116102315780630b881830146102e75780630f7c3189146102fa5780631c905e391461030f5780631f425338146103315780632c5e65201461034457600080fd5b80624054b81461026d57806301a5f43f1461028257806306aba0e1146102ab57806309fcd8c7146102c15780630a44fa43146102d4575b600080fd5b61028061027b366004614b75565b6106a7565b005b610295610290366004614c09565b6106e6565b6040516102a29190614ce0565b60405180910390f35b6102b3610799565b6040519081526020016102a2565b6102806102cf366004614cf3565b6107b6565b6102b36102e2366004614dc2565b61084b565b6102806102f5366004614b75565b6108d0565b6103026108fe565b6040516102a29190614e3d565b61032261031d366004614e50565b610917565b6040516102a293929190614e9c565b61029561033f366004614dc2565b610933565b610357610352366004614f66565b610980565b60405190151581526020016102a2565b610302610375366004614dc2565b61098d565b610280610388366004614f9b565b6109d1565b6102b361039b366004614ff4565b60006020819052908152604090205481565b6102956103bb366004614dc2565b6109ff565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6102806103f536600461501c565b610a45565b6102b3610b32565b61028061041036600461529d565b610bae565b610357610423366004615300565b610bf3565b61028061043636600461533b565b610c01565b61049e610449366004615365565b6001600160a01b039081166000908152600080516020615f8483398151915260209081526040808320549093168252600080516020615f6483398151915290522054600160a01b90046001600160601b031690565b6040516001600160601b0390911681526020016102a2565b6102806104c4366004614e50565b610c1c565b610302610c68565b6102806104df366004615365565b610c72565b6102806104f2366004615380565b610e09565b610280610505366004615459565b610ed0565b610554610518366004614e50565b600160208181526000938452604080852090915291835291208054918101546002820154600383015460069093015460ff909416939192909185565b6040516102a29594939291906154ad565b610357610573366004615365565b610eec565b61058b610586366004614e50565b610f06565b604080519283526020830191909152016102a2565b6103226105ae366004614ff4565b610f27565b6103026105c13660046154db565b610f44565b6102b3611035565b6105d6611040565b6040516102a293929190615549565b6105f86105f3366004614dc2565b61106a565b6040516102a2919061558c565b6102b36110a8565b61049e61061b366004615365565b6110c1565b61035761062e366004614ff4565b6110cc565b61064661064136600461559f565b611109565b6040516001600160a01b0390911681526020016102a2565b61058b611184565b610295610674366004614dc2565b6111b5565b6103026111fb565b61028061068f366004614f9b565b611205565b6103026106a2366004614dc2565b611245565b6106b03361132c565b6106df85858585857f000000000000000000000000000000000000000000000000000000000000000033611371565b5050505050565b60606106f0611416565b61078e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061144692505050565b979650505050505050565b60006107b1600080516020615fc48339815191525490565b905090565b6107bf3361132c565b61084089898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061080592508a91508b9050615685565b8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503392506117c2915050565b505050505050505050565b600082828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061088c925083915061191f9050565b6108c884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061195492505050565b949350505050565b6106df85858585857f00000000000000000000000000000000000000000000000000000000000000006119d8565b60606107b1600080516020615f04833981519152611a8c565b60608060606109268585611a99565b9250925092509250925092565b606061093d611416565b610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e8292505050565b9392505050565b60006108c8848484611f4d565b606061097983838080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250611f83915050565b92915050565b6106df85858585857f00000000000000000000000000000000000000000000000000000000000000006120dd565b6060610a09611416565b61097983838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061220092505050565b610a4e3361132c565b60003390506000610b17468d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610adc92508d91508e9050615685565b8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506122f2915050565b9050610b24828285612401565b505050505050505050505050565b6000610b4a600080516020615f248339815191525490565b6001610b62600080516020615f248339815191525490565b610b90610b7b600080516020615fc48339815191525490565b600080516020615f4483398151915290612517565b610b9a91906156a8565b610ba491906156bb565b6107b191906156ce565b333014610be5576000356001600160e01b0319166040516307337e1960e41b8152600401610bdc91906156f0565b60405180910390fd5b610bef8282612542565b5050565b600061097960008484611f4d565b610c09611416565b610c12816125f0565b610bef8282612626565b6000828152600160208181526040808420858552909152822090810154909103610c595760405163713b099760e11b815260040160405180910390fd5b610c62816126ca565b50505050565b60606107b16128df565b610c7b3361132c565b610c84816128f8565b336000908152600080516020615f6483398151915260208190526040909120546001600160a01b039081169083168103610cdc57604051630669b93360e31b81526001600160a01b0384166004820152602401610bdc565b600080516020615fa48339815191526000610cf7828461292d565b8015610d085750610d088286612942565b905080610d335760405163080fab4b60e31b81526001600160a01b0386166004820152602401610bdc565b6001600160a01b038381166000818152600080516020615f848339815191526020818152604080842080546001600160a01b0319908116909155958b16808552818520805488163390811790915585528a8352938190208054909616841790955584519081019390935292820152610dc6906364b18d0960e11b906060015b604051602081830303815290604052612957565b6040516001600160a01b03808816919086169033907fcef34cd748f30a1b7a2f214fd1651779f79bc6c1be02785cad5c1f0ee877213d90600090a4505050505050565b610e123361132c565b610ec38a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250610e8892508a91508b9050615685565b8787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503392506122f2915050565b5050505050505050505050565b610ed93361132c565b610bef33610ee684615784565b83612401565b60006109cb600080516020615fa483398151915283612c5f565b600080610f11611416565b610f1b8484612c81565b915091505b9250929050565b6060806060610f37600085611a99565b9250925092509193909250565b8051606090806001600160401b03811115610f6157610f616150f9565b604051908082528060200260200182016040528015610f8a578160200160208202803683370190505b509150600080516020615f6483398151915260005b8281101561102d57816000868381518110610fbc57610fbc615858565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160009054906101000a90046001600160a01b031684828151811061100d5761100d615858565b6001600160a01b0390921660209283029190910190910152600101610f9f565b505050919050565b60006107b160025490565b606080606061104d612d76565b925061105883610f44565b915061106383612da1565b9050909192565b6060610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612da192505050565b60006107b1600080516020615fa4833981519152612e8a565b60006109cb82612e94565b60006110e7610b7b600080516020615fc48339815191525490565b600080516020615f2483398151915254611101908461586e565b101592915050565b60007fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600083600f81111561114057611140614e72565b60ff1681526020810191909152604001600020546001600160a01b031690508061117f578160405163409140df60e11b8152600401610bdc9190615885565b919050565b60008061119d600080516020615f448339815191525490565b600080516020615f2483398151915254915091509091565b60606111bf611416565b610979838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ecc92505050565b60606107b1612d76565b61120e3361132c565b61123d85858585857f0000000000000000000000000000000000000000000000000000000000000000336131b1565b505050505050565b606081806001600160401b03811115611260576112606150f9565b604051908082528060200260200182016040528015611289578160200160208202803683370190505b509150600080516020615f8483398151915260005b82811015611323578160008787848181106112bb576112bb615858565b90506020020160208101906112d09190615365565b6001600160a01b039081168252602082019290925260400160002054855191169085908390811061130357611303615858565b6001600160a01b039092166020928302919091019091015260010161129e565b50505092915050565b61133581612e94565b6001600160601b031660000361136e576000356001600160e01b0319166003604051620f948f60ea1b8152600401610bdc92919061589f565b50565b61138361137d88615784565b82613200565b50600061139761139289615784565b6132ff565b905061140c6113a589615784565b888888886113f8896113b889600061343e565b60405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6114078a6113b88a600161343e565b613477565b5050505050505050565b333014611444576000356001600160e01b0319166040516307337e1960e41b8152600401610bdc91906156f0565b565b606061145283836136dc565b61145b8161191f565b825185518114801561146d5750845181145b611498576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b806001600160401b038111156114b0576114b06150f9565b6040519080825280602002602001820160405280156114d9578160200160208202803683370190505b509250806000036114ea57506117ba565b604080518082019091526000808252602082018190527f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c91600080516020615f8483398151915291600080516020615fa483398151915291600080516020615f64833981519152919081908190815b8981101561173b578d818151811061157357611573615858565b602002602001015194508c818151811061158f5761158f615858565b602002602001015193506115a2856128f8565b6115ab846128f8565b8e81815181106115bd576115bd615858565b60200260200101516001600160601b03166000036115fc576000356001600160e01b031916604051637f11b8a360e11b8152600401610bdc91906156f0565b6116068986612c5f565b8061161657506116168985612c5f565b8061162657506116268786612c5f565b8061163657506116368785612c5f565b158c828151811061164957611649615858565b6020026020010190151590811515815250508b818151811061166d5761166d615858565b602002602001015115611733576116848986612942565b5061168f8785612942565b506001600160a01b03848116600081815260208b90526040902080546001600160a01b0319169288169290921790915582528e518f90829081106116d5576116d5615858565b6020908102919091018101516001600160601b03169083018190526116fa90846156a8565b6001600160a01b038087166000908152602089815260409091208551918601516001600160601b0316600160a01b029190921617905592505b600101611559565b50611754600080516020615fc4833981519152836137e6565b50611773635ebae8a060e01b8d8d604051602001610db29291906158cd565b7f897810999654e525e272b5909785c4d0ceaee1bbf9c87d9091a37558b0423b788b8f8f8f6040516117a894939291906158fb565b60405180910390a15050505050505050505b509392505050565b60006117ce60006137fd565b905060006040518060c001604052808381526020018a8152602001898980806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093855250505060208083018a905260408084018a9052606090930188905282518b820281810183019094528b8152939450909261187f92611878928d918d9182919085019084908082843760009201919091525060019250611f83915050565b83906138ad565b90506118966002548261399f90919063ffffffff16565b60006118a1826132ff565b6000858152600080516020615ee483398151915260205260409020600181018290556006018c9055905080847f771d78ae9e5fca95a532fb0971d575d0ce9b59d14823c063e08740137e0e0eca846118f887613a40565b878a60405161190a9493929190615a96565b60405180910390a35050505050505050505050565b61192881613b77565b1561136e576000356001600160e01b031916604051630d697db160e11b8152600401610bdc91906156f0565b6000816119608161191f565b600080516020615f6483398151915260005b845181101561102d5781600086838151811061199057611990615858565b6020908102919091018101516001600160a01b03168252810191909152604001600020546119ce90600160a01b90046001600160601b0316856156a8565b9350600101611972565b60006119e661139288615784565b6020808901356000908152600180835260408083208c35845290935291902001549091508114611a55576020808801356000908152600180835260408083208b3584529093529082902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b611a83611a6188615784565b87878787611a74886113b889600061343e565b611407896113b88a600161343e565b50505050505050565b6060600061097983613c16565b60008281526001602090815260408083208484529091528120600481015460058201546060938493849390929091611ad182846156a8565b9050806001600160401b03811115611aeb57611aeb6150f9565b604051908082528060200260200182016040528015611b14578160200160208202803683370190505b509550806001600160401b03811115611b2f57611b2f6150f9565b604051908082528060200260200182016040528015611b7a57816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181611b4d5790505b509450806001600160401b03811115611b9557611b956150f9565b604051908082528060200260200182016040528015611bbe578160200160208202803683370190505b50965060005b83811015611d13576000878281518110611be057611be0615858565b60200260200101906001811115611bf957611bf9614e72565b90816001811115611c0c57611c0c614e72565b90525060008a81526001602090815260408083208c845290915281206004870180546007909201929184908110611c4557611c45615858565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815460ff16815260018201549381019390935260020154908201528651879083908110611ca357611ca3615858565b6020026020010181905250846004018181548110611cc357611cc3615858565b9060005260206000200160009054906101000a90046001600160a01b0316888281518110611cf357611cf3615858565b6001600160a01b0390921660209283029190910190910152600101611bc4565b5060005b82811015611e7657600187611d2c86846156a8565b81518110611d3c57611d3c615858565b60200260200101906001811115611d5557611d55614e72565b90816001811115611d6857611d68614e72565b90525060008a81526001602090815260408083208c845290915281206005870180546007909201929184908110611da157611da1615858565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815460ff168152600182015493810193909352600201549082015286611df686846156a8565b81518110611e0657611e06615858565b6020026020010181905250846005018181548110611e2657611e26615858565b6000918252602090912001546001600160a01b031688611e4686846156a8565b81518110611e5657611e56615858565b6001600160a01b0390921660209283029190910190910152600101611d17565b50505050509250925092565b606081611e8e8161191f565b8251806001600160401b03811115611ea857611ea86150f9565b604051908082528060200260200182016040528015611ed1578160200160208202803683370190505b509250600080516020615f0483398151915260005b82811015611f4457611f1a868281518110611f0357611f03615858565b60200260200101518361292d90919063ffffffff16565b858281518110611f2c57611f2c615858565b91151560209283029190910190910152600101611ee6565b50505050919050565b600083815260016020908152604080832085845282528083206001600160a01b038516845260080190915281205460ff166108c8565b606082516001600160401b03811115611f9e57611f9e6150f9565b604051908082528060200260200182016040528015611fc7578160200160208202803683370190505b50905060005b83518110156120d65760036000858381518110611fec57611fec615858565b6020026020010151600481111561200557612005614e72565b600481111561201657612016614e72565b815260200190815260200160002060009054906101000a90046001600160a01b031682828151811061204a5761204a615858565b60200260200101906001600160a01b031690816001600160a01b0316815250508280156120a2575060006001600160a01b031682828151811061208f5761208f615858565b60200260200101516001600160a01b0316145b156120ce576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b600101611fcd565b5092915050565b600061213b61212c6120f260408a018a615b7d565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525060019250611f83915050565b61213589615bc6565b906138ad565b90506000612148826132ff565b60008080526001602081815285518352600080516020615ee483398151915290526040909120015490915081146121c55760008080526001602081815284518352600080516020615ee4833981519152905260409182902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b60006121d86121d38a615bc6565b613a40565b905061084083898989896121f18a6113b889600061343e565b6114078b6113b88a600161343e565b60608161220c8161191f565b8251806001600160401b03811115612226576122266150f9565b60405190808252806020026020018201604052801561224f578160200160208202803683370190505b5092508060000361226057506122ec565b600080516020615f0483398151915260006314d72edb60e21b815b848110156122e65787818151811061229557612295615858565b602002602001015192506122a8836125f0565b6122b28383613c72565b6122bc8484612942565b8782815181106122ce576122ce615858565b9115156020928302919091019091015260010161227b565b50505050505b50919050565b6122fa614a6c565b8760000361232e576000356001600160e01b03191660004660405163092048d160e11b8152600401610bdc93929190615c90565b6000612339896137fd565b90506040518060e001604052808281526020018a81526020018981526020018881526020018781526020018681526020018581525091506123856002548361399f90919063ffffffff16565b6000612390836132ff565b60008b81526001602081815260408084208785529091529091209081018290556006018a9055905080828b7fa57d40f1496988cf60ab7c9d5ba4ff83647f67d3898d441a3aaf21b651678fd986886040516123ec929190615cb2565b60405180910390a45050979650505050505050565b4682602001511461243a57602082015160405163092048d160e11b8152610bdc916001600160e01b031960003516914690600401615c90565b6000612445836132ff565b60208085015160009081526001808352604080832088518452909352919020015490915081146124b457602080840151600090815260018083526040808320875184529093529082902001549051632bee7fdb60e21b8152610bdc918391600401918252602082015260400190565b60006124be613e05565b90506000816124cb613e0f565b6124d591906156bb565b6124e09060016156a8565b604080516060810182526000808252602082018190529181019190915290915061140c868685858b866125128e613e19565b613e33565b6000825480156120d657828102915080820483146120d657634e487b7160005260116020526024601cfd5b60005b82518110156125eb57306001600160a01b031682828151811061256a5761256a615858565b60200260200101516001600160a01b0316036125a7576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b6125e38382815181106125bc576125bc615858565b60200260200101518383815181106125d6576125d6615858565b602002602001015161417c565b600101612545565b505050565b806001600160a01b03163b60000361136e57604051630bfc64a360e21b81526001600160a01b0382166004820152602401610bdc565b807fdea3103d22025c269050bea94c0c84688877f12fa22b7e6d2d5d78a9a49aa1cb600084600f81111561265c5761265c614e72565b60ff168152602081019190915260400160002080546001600160a01b0319166001600160a01b03928316179055811682600f81111561269d5761269d614e72565b6040517f865d1c228a8ea13709cfe61f346f7ff67f1bbd4a18ff31ad3e7147350d317c5990600090a35050565b600080825460ff1660048111156126e3576126e3614e72565b1480156126f4575042826006015411155b9050801561117f5760018201546040517f58f98006a7f2f253f8ae8f8b7cec9008ca05359633561cd7c22f3005682d4a5590600090a260005b60048301548110156127e05782600801600084600401838154811061275457612754615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff19169055600484018054600786019291908490811061279d5761279d615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff1916815560018181018390556002909101919091550161272d565b5060005b60058301548110156128975782600801600084600501838154811061280b5761280b615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff19169055600584018054600786019291908490811061285457612854615858565b60009182526020808320909101546001600160a01b031683528201929092526040018120805460ff191681556001818101839055600290910191909155016127e4565b50815460ff1916825560006001830181905560028301819055600383018190556128c5906004840190614aa9565b6128d3600583016000614aa9565b60006006830155919050565b60606107b1600080516020615fa4833981519152611a8c565b6001600160a01b03811661136e576000356001600160e01b03191660405163104c66df60e31b8152600401610bdc91906156f0565b6000610979836001600160a01b03841661420f565b6000610979836001600160a01b038416614302565b6000612970600080516020615f04833981519152611a8c565b805190915060008190036129845750505050565b6000816001600160401b0381111561299e5761299e6150f9565b6040519080825280602002602001820160405280156129c7578160200160208202803683370190505b5090506000826001600160401b038111156129e4576129e46150f9565b604051908082528060200260200182016040528015612a1757816020015b6060815260200190600190039081612a025790505b50905060008686604051602001612a2f929190615cdc565b6040516020818303038152906040529050600081604051602401612a539190615d0d565b60408051601f198184030181529190526020810180516001600160e01b03166325da93a560e11b179052905060005b85811015612c1757868181518110612a9c57612a9c615858565b60200260200101516001600160a01b031683604051612abb9190615d20565b6000604051808303816000865af19150503d8060008114612af8576040519150601f19603f3d011682016040523d82523d6000602084013e612afd565b606091505b50868381518110612b1057612b10615858565b60200260200101868481518110612b2957612b29615858565b6020026020010182905282151515158152505050848181518110612b4f57612b4f615858565b6020026020010151612c0f57868181518110612b6d57612b6d615858565b60200260200101516001600160a01b031682604051612b8c9190615d20565b6000604051808303816000865af19150503d8060008114612bc9576040519150601f19603f3d011682016040523d82523d6000602084013e612bce565b606091505b50868381518110612be157612be1615858565b60200260200101868481518110612bfa57612bfa615858565b60200260200101829052821515151581525050505b600101612a82565b507fc0b07a27e66788f39cc91405f012f34066b16f31b4bda9438c52f2dae0cc5b6382878686604051612c4d9493929190615d3c565b60405180910390a15050505050505050565b6001600160a01b03811660009081526001830160205260408120541515610979565b60008082841115612cb3576000356001600160e01b0319166040516387f6f09560e01b8152600401610bdc91906156f0565b600080516020615f44833981519152549150612cdb600080516020615f248339815191525490565b9050612cf4600080516020615f44833981519152859055565b612d0b600080516020615f24833981519152849055565b8284612d367f92872d32822c9d44b36a2537d3e0d4c46fc4de1ce154ccfaed560a8a58445f1d614355565b60408051868152602081018690527f976f8a9c5bdf8248dec172376d6e2b80a8e3df2f0328e381c6db8e1cf138c0f8910160405180910390a49250929050565b60606107b17f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c611a8c565b8051606090806001600160401b03811115612dbe57612dbe6150f9565b604051908082528060200260200182016040528015612de7578160200160208202803683370190505b509150600080516020615f6483398151915260005b8281101561102d57816000868381518110612e1957612e19615858565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160149054906101000a90046001600160601b0316848281518110612e6a57612e6a615858565b6001600160601b0390921660209283029190910190910152600101612dfc565b60006109cb825490565b6001600160a01b03166000908152600080516020615f648339815191526020526040902054600160a01b90046001600160601b031690565b606081612ed88161191f565b8251806001600160401b03811115612ef257612ef26150f9565b604051908082528060200260200182016040528015612f1b578160200160208202803683370190505b50925080600003612f2c57506122ec565b60408051808201909152600080825260208201819052600080516020615f84833981519152917f546f6b46ab35b030b6816596b352aef78857377176c8b24baa2046a62cf1998c91600080516020615fa483398151915291600080516020615f64833981519152919081908190815b89811015613131578c8181518110612fb557612fb5615858565b6020908102919091018101516001600160a01b038082166000908152928c905260409092205490911695509350612feb856128f8565b612ff4846128f8565b6001600160a01b0385811660009081526020888152604091829020825180840190935254808416808452600160a01b9091046001600160601b03169183019190915290935090851614613068576000356001600160e01b03191660405163053265f160e01b8152600401610bdc91906156f0565b6130728785612c5f565b801561308357506130838886612c5f565b8c828151811061309557613095615858565b6020026020010190151590811515815250508b81815181106130b9576130b9615858565b602002602001015115613129576130d0888661292d565b506130db878561292d565b506001600160a01b03808516600090815260208b8152604080832080546001600160a01b0319169055928816825288815291812055820151613126906001600160601b0316846156a8565b92505b600101612f9b565b5061314a600080516020615fc483398151915283614370565b5061316963c48549de60e01b8d8d604051602001610db29291906158cd565b7fdf3dcd7987202f64648f3acdbf12401e3a2bb23e77e19f99826b5475cbb863698b8d60405161319a929190615d89565b60405180910390a150505050505050505050919050565b6131b9614a6c565b6131cb6131c589615bc6565b83614380565b905060006131db6121d38a615bc6565b90506131f482898989896121f18a6113b889600061343e565b50979650505050505050565b602082015160009080820361323b576000356001600160e01b03191660004660405163092048d160e11b8152600401610bdc93929190615c90565b60025461324990859061399f565b6000613254856132ff565b905061325f826137fd565b600083815260016020818152604080842085855290915291829020918801519082018490556006909101559250845183146132bb576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b8083837fa57d40f1496988cf60ab7c9d5ba4ff83647f67d3898d441a3aaf21b651678fd988886040516132ef929190615cb2565b60405180910390a4505092915050565b6080810151606082015160a083015151600092919083906001600160401b0381111561332d5761332d6150f9565b604051908082528060200260200182016040528015613356578160200160208202803683370190505b5060c086015190915060005b82518110156133b5578660a00151818151811061338157613381615858565b6020026020010151805190602001208382815181106133a2576133a2615858565b6020908102919091010152600101613362565b50604080517fd051578048e6ff0bbc9fca3b65a42088dbde10f36ca841de566711087ad9b08a8152875160208083019190915280890151828401529790910151606082015283518702938701939093206080840152835186029386019390932060a0830152805185029085012060c082015281518402919093012060e083015250610100902090565b604080517fd900570327c4c0df8dd6bdd522b7da7e39145dd049d2fd4602276adcd511e3c2815260208101939093528201526060902090565b841580159061348557508483145b6134b0576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b60006134ba613e05565b90506000816134c7613e0f565b6134d191906156bb565b6134dc9060016156a8565b9050600080366000805b898110156136a0578a8a8281811061350057613500615858565b606002919091019350600090508d8d8381811061351f5761351f615858565b90506020020160208101906135349190615dae565b600181111561354557613545614e72565b036135715761356a8961355b6020860186615dda565b85602001358660400135614480565b93506135e8565b60018d8d8381811061358557613585615858565b905060200201602081019061359a9190615dae565b60018111156135ab576135ab614e72565b036135c15761356a8861355b6020860186615dda565b6000356001600160e01b031916604051630612418f60e11b8152600401610bdc91906156f0565b836001600160a01b0316856001600160a01b031610613628576000356001600160e01b031916604051635d3dcd3160e01b8152600401610bdc91906156f0565b839450600061363685613e19565b9050801561369757600192506136858f8f8f8581811061365857613658615858565b905060200201602081019061366d9190615dae565b8a8a8961367f368b90038b018b615df5565b87613e33565b15613697575050505050505050611a83565b506001016134e6565b50806136cd576000356001600160e01b03191660405163726b3acb60e01b8152600401610bdc91906156f0565b50505050505050505050505050565b81518151606091908082016001600160401b038111156136fe576136fe6150f9565b604051908082528060200260200182016040528015613727578160200160208202803683370190505b50925060005b828110156137815785818151811061374757613747615858565b602002602001015184828151811061376157613761615858565b6001600160a01b039092166020928302919091019091015260010161372d565b60005b828110156137dc5785818151811061379e5761379e615858565b60200260200101518583815181106137b8576137b8615858565b6001600160a01b039092166020928302919091019091015260019182019101613784565b5050505092915050565b60006109cb836137f685856144a8565b9250829055565b6000818152602081905260408120549081900361382c5750600090815260208190526040902060019081905590565b600082815260016020908152604080832084845290915281209061384f826126ca565b9050806138a6576000825460ff16600481111561386e5761386e614e72565b0361388c5760405163757a436360e01b815260040160405180910390fd5b600084815260208190526040902080546001019081905592505b5050919050565b6138b5614a6c565b82518152602080840151604080840191909152600091830191909152830151516001600160401b038111156138ec576138ec6150f9565b604051908082528060200260200182016040528015613915578160200160208202803683370190505b5060608083019190915283015160808083019190915283015160a08083019190915283015160c082015260005b8360400151518110156120d65782818151811061396157613961615858565b60200260200101518260600151828151811061397f5761397f615858565b6001600160a01b0390921660209283029190910190910152600101613942565b60008260600151511180156139bd5750816080015151826060015151145b80156139d257508160a0015151826060015151145b80156139e757508160c0015151826060015151145b613a12576000356001600160e01b0319166040516306b5667560e21b8152600401610bdc91906156f0565b613a1c81426156a8565b82604001511115610bef5760405163ad89be9d60e01b815260040160405180910390fd5b60608101516040820151608083015151600092919083906001600160401b03811115613a6e57613a6e6150f9565b604051908082528060200260200182016040528015613a97578160200160208202803683370190505b5060a086015190915060005b8251811015613af65786608001518181518110613ac257613ac2615858565b602002602001015180519060200120838281518110613ae357613ae3615858565b6020908102919091010152600101613aa3565b50604080517f1463f426c05aff2c1a7a0957a71c9898bc8b47142540538e79ee25ee911413508152875160208083019190915297880151918101919091528351870293870193909320606084015283518602938601939093206080830152805185029085012060a082015281518402919093012060c08301525060e0902090565b60008151600003613b8a57506000919050565b60005b6001835103811015613c0d57600181015b8351811015613c0457838181518110613bb957613bb9615858565b60200260200101516001600160a01b0316848381518110613bdc57613bdc615858565b60200260200101516001600160a01b031603613bfc575060019392505050565b600101613b9e565b50600101613b8d565b50600092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613c6657602002820191906000526020600020905b815481526020019060010190808311613c52575b50505050509050919050565b600081604051602401613c8591906156f0565b60408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525190915060009081906001600160a01b03861690613cce908590615d20565b600060405180830381855afa9150503d8060008114613d09576040519150601f19603f3d011682016040523d82523d6000602084013e613d0e565b606091505b509150915081613dd057846001600160a01b031683604051602401613d339190615d0d565b60408051601f198184030181529181526020820180516001600160e01b03166325da93a560e11b17905251613d689190615d20565b600060405180830381855afa9150503d8060008114613da3576040519150601f19603f3d011682016040523d82523d6000602084013e613da8565b606091505b50909250905081613dd057838560405163069d427960e11b8152600401610bdc929190615e55565b80806020019051810190613de49190615e78565b6106df57838560405163069d427960e11b8152600401610bdc929190615e55565b60006107b1610b32565b60006107b1610799565b6000613e2482612e94565b6001600160601b031692915050565b60208088015188516000828152600184526040808220838352909452928320613e5b816126ca565b15613e6c576001935050505061078e565b6020808c015160009081529081905260409020548214613ead576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b6000815460ff166004811115613ec557613ec5614e72565b14613ee3576040516322de95ff60e21b815260040160405180910390fd5b6001600160a01b038716600090815260088201602052604090205460ff1615613f2a5760405163025fd59560e41b81526001600160a01b0388166004820152602401610bdc565b6001600160a01b03871660009081526008820160209081526040909120805460ff19166001179055860151151580613f655750604086015115155b80613f735750855160ff1615155b15613fba576001600160a01b03871660009081526007820160209081526040918290208851815460ff191660ff909116178155908801516001820155908701516002909101555b866001600160a01b031681600101547f1203f9e81c814a35f5f4cc24087b2a24c6fb7986a9f1406b68a9484882c93a238c88604051613ffa929190615e9a565b60405180910390a3600080808c600181111561401857614018614e72565b0361406d576004830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b038c161790556003840180548992906140609084906156a8565b92505081905591506140d2565b60018c600181111561408157614081614e72565b036135c1576005830180546001810182556000918252602082200180546001600160a01b0319166001600160a01b038c161790556002840180548992906140c99084906156a8565b92505081905590505b8a821061412657825460ff19166001908117845580840154604051919750907f5c819725ea53655a3b898f3df59b66489761935454e9212ca1e5ebd759953d0b90600090a2614121838e6144c7565b61416c565b89811061416c57825460ff19166003178355600180840154604051919750907f55295d4ce992922fa2e5ffbf3a3dcdb367de0a15e125ace083456017fd22060f90600090a25b5050505050979650505050505050565b806003600084600481111561419357614193614e72565b60048111156141a4576141a4614e72565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b0392831617905581168260048111156141e2576141e2614e72565b6040517f356c8c57e9e84b99b1cb58b13c985b2c979f78cbdf4d0fa70fe2a98bb09a099d90600090a35050565b600081815260018301602052604081205480156142f85760006142336001836156bb565b8554909150600090614247906001906156bb565b90508181146142ac57600086600001828154811061426757614267615858565b906000526020600020015490508087600001848154811061428a5761428a615858565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142bd576142bd615ea8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109cb565b60009150506109cb565b6000818152600183016020526040812054614349575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109cb565b5060006109cb565b9055565b600061435f825490565b905061117f826143518360016156a8565b60006109cb836137f68585614534565b614388614a6c565b6143a161439a84604001516001611f83565b84906138ad565b90506143b86002548261399f90919063ffffffff16565b60006143c3826132ff565b905060006143d160006137fd565b6000818152600080516020615ee4833981519152602090815260409091209087015160018201859055600690910155905082518114614431576000356001600160e01b03191660405163d4cec26960e01b8152600401610bdc91906156f0565b81817f771d78ae9e5fca95a532fb0971d575d0ce9b59d14823c063e08740137e0e0eca8561445e89613a40565b89896040516144709493929190615a96565b60405180910390a3505092915050565b60008060006144918787878761455d565b9150915061449e8161464a565b5095945050505050565b81548101818110156109cb57634e487b7160005260116020526024601cfd5b6144d081614800565b15610bef57815460ff191660021782556000806144ec8361481a565b9150915083600101547fe134987599ae266ec90edeff1b26125b287dbb57b10822649432d1bb26537fba8383604051614526929190615ebe565b60405180910390a250505050565b600082548281101561455357634e487b7160005260116020526024601cfd5b9190910392915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156145945750600090506003614641565b8460ff16601b141580156145ac57508460ff16601c14155b156145bd5750600090506004614641565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614611573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661463a57600060019250925050614641565b9150600090505b94509492505050565b600081600481111561465e5761465e614e72565b036146665750565b600181600481111561467a5761467a614e72565b036146c75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bdc565b60028160048111156146db576146db614e72565b036147285760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bdc565b600381600481111561473c5761473c614e72565b036147945760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bdc565b60048160048111156147a8576147a8614e72565b0361136e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bdc565b60008160200151600014806109cb57505060200151461490565b60608061482683614800565b61485857602083015160405163092048d160e11b8152610bdc916001600160e01b031960003516914690600401615c90565b8260600151516001600160401b03811115614875576148756150f9565b60405190808252806020026020018201604052801561489e578160200160208202803683370190505b5091508260600151516001600160401b038111156148be576148be6150f9565b6040519080825280602002602001820160405280156148f157816020015b60608152602001906001900390816148dc5790505b50905060005b836060015151811015614a66578360c00151818151811061491a5761491a615858565b60200260200101515a1161494d57614931846132ff565b6040516307aec4ab60e21b8152600401610bdc91815260200190565b8360600151818151811061496357614963615858565b60200260200101516001600160a01b03168460800151828151811061498a5761498a615858565b60200260200101518560c0015183815181106149a8576149a8615858565b6020026020010151908660a0015184815181106149c7576149c7615858565b60200260200101516040516149dc9190615d20565b600060405180830381858888f193505050503d8060008114614a1a576040519150601f19603f3d011682016040523d82523d6000602084013e614a1f565b606091505b50848381518110614a3257614a32615858565b60200260200101848481518110614a4b57614a4b615858565b602090810291909101019190915290151590526001016148f7565b50915091565b6040518060e00160405280600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b508054600082559060005260206000209081019061136e91905b80821115614ad75760008155600101614ac3565b5090565b600060e082840312156122ec57600080fd5b60008083601f840112614aff57600080fd5b5081356001600160401b03811115614b1657600080fd5b6020830191508360208260051b8501011115610f2057600080fd5b60008083601f840112614b4357600080fd5b5081356001600160401b03811115614b5a57600080fd5b602083019150836020606083028501011115610f2057600080fd5b600080600080600060608688031215614b8d57600080fd5b85356001600160401b0380821115614ba457600080fd5b614bb089838a01614adb565b96506020880135915080821115614bc657600080fd5b614bd289838a01614aed565b90965094506040880135915080821115614beb57600080fd5b50614bf888828901614b31565b969995985093965092949392505050565b60008060008060008060608789031215614c2257600080fd5b86356001600160401b0380821115614c3957600080fd5b614c458a838b01614aed565b90985096506020890135915080821115614c5e57600080fd5b614c6a8a838b01614aed565b90965094506040890135915080821115614c8357600080fd5b50614c9089828a01614aed565b979a9699509497509295939492505050565b60008151808452602080850194506020840160005b83811015614cd5578151151587529582019590820190600101614cb7565b509495945050505050565b6020815260006109796020830184614ca2565b600080600080600080600080600060a08a8c031215614d1157600080fd5b8935985060208a01356001600160401b0380821115614d2f57600080fd5b614d3b8d838e01614aed565b909a50985060408c0135915080821115614d5457600080fd5b614d608d838e01614aed565b909850965060608c0135915080821115614d7957600080fd5b614d858d838e01614aed565b909650945060808c0135915080821115614d9e57600080fd5b50614dab8c828d01614aed565b915080935050809150509295985092959850929598565b60008060208385031215614dd557600080fd5b82356001600160401b03811115614deb57600080fd5b614df785828601614aed565b90969095509350505050565b60008151808452602080850194506020840160005b83811015614cd55781516001600160a01b031687529582019590820190600101614e18565b6020815260006109796020830184614e03565b60008060408385031215614e6357600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b60028110614e9857614e98614e72565b9052565b60006060808352614eb06060840187614e03565b83810360208581019190915286518083528782019282019060005b81811015614eee57614ede838651614e88565b9383019391830191600101614ecb565b50506040925085810360408701528087518083528383019150838901925060005b81811015614f3f578351805160ff1684528581015186850152860151868401529284019291860191600101614f0f565b50909a9950505050505050505050565b80356001600160a01b038116811461117f57600080fd5b600080600060608486031215614f7b57600080fd5b8335925060208401359150614f9260408501614f4f565b90509250925092565b600080600080600060608688031215614fb357600080fd5b85356001600160401b0380821115614fca57600080fd5b9087019060c0828a031215614fde57600080fd5b90955060208701359080821115614bc657600080fd5b60006020828403121561500657600080fd5b5035919050565b80356002811061117f57600080fd5b60008060008060008060008060008060c08b8d03121561503b57600080fd5b8a35995060208b01356001600160401b038082111561505957600080fd5b6150658e838f01614aed565b909b50995060408d013591508082111561507e57600080fd5b61508a8e838f01614aed565b909950975060608d01359150808211156150a357600080fd5b6150af8e838f01614aed565b909750955060808d01359150808211156150c857600080fd5b506150d58d828e01614aed565b90945092506150e8905060a08c0161500d565b90509295989b9194979a5092959850565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715615131576151316150f9565b60405290565b60405160c081016001600160401b0381118282101715615131576151316150f9565b604051601f8201601f191681016001600160401b0381118282101715615181576151816150f9565b604052919050565b60006001600160401b038211156151a2576151a26150f9565b5060051b60200190565b600082601f8301126151bd57600080fd5b813560206151d26151cd83615189565b615159565b80838252602082019150600560208560051b8801019450878511156151f657600080fd5b602087015b8581101561521f5780358281106152125760008081fd5b84529284019284016151fb565b5090979650505050505050565b600082601f83011261523d57600080fd5b8135602061524d6151cd83615189565b8083825260208201915060208460051b87010193508684111561526f57600080fd5b602086015b848110156152925761528581614f4f565b8352918301918301615274565b509695505050505050565b600080604083850312156152b057600080fd5b82356001600160401b03808211156152c757600080fd5b6152d3868387016151ac565b935060208501359150808211156152e957600080fd5b506152f68582860161522c565b9150509250929050565b6000806040838503121561531357600080fd5b8235915061532360208401614f4f565b90509250929050565b80356010811061117f57600080fd5b6000806040838503121561534e57600080fd5b6153578361532c565b915061532360208401614f4f565b60006020828403121561537757600080fd5b61097982614f4f565b60008060008060008060008060008060c08b8d03121561539f57600080fd5b8a35995060208b0135985060408b01356001600160401b03808211156153c457600080fd5b6153d08e838f01614aed565b909a50985060608d01359150808211156153e957600080fd5b6153f58e838f01614aed565b909850965060808d013591508082111561540e57600080fd5b61541a8e838f01614aed565b909650945060a08d013591508082111561543357600080fd5b506154408d828e01614aed565b915080935050809150509295989b9194979a5092959850565b6000806040838503121561546c57600080fd5b82356001600160401b0381111561548257600080fd5b61548e85828601614adb565b9250506153236020840161500d565b6005811061136e5761136e614e72565b60a081016154ba8761549d565b95815260208101949094526040840192909252606083015260809091015290565b6000602082840312156154ed57600080fd5b81356001600160401b0381111561550357600080fd5b6108c88482850161522c565b60008151808452602080850194506020840160005b83811015614cd55781516001600160601b031687529582019590820190600101615524565b60608152600061555c6060830186614e03565b828103602084015261556e8186614e03565b90508281036040840152615582818561550f565b9695505050505050565b602081526000610979602083018461550f565b6000602082840312156155b157600080fd5b6109798261532c565b60006155c86151cd84615189565b8381529050602080820190600585901b8401868111156155e757600080fd5b845b8181101561567a5780356001600160401b03808211156156095760008081fd5b8188019150601f8a8184011261561f5760008081fd5b823582811115615631576156316150f9565b615642818301601f19168801615159565b92508083528b8782860101111561565b57600091508182fd5b80878501888501376000908301870152508552509282019282016155e9565b505050509392505050565b60006109793684846155ba565b634e487b7160e01b600052601160045260246000fd5b808201808211156109cb576109cb615692565b818103818111156109cb576109cb615692565b6000826156eb57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b031991909116815260200190565b600082601f83011261571657600080fd5b813560206157266151cd83615189565b8083825260208201915060208460051b87010193508684111561574857600080fd5b602086015b84811015615292578035835291830191830161574d565b600082601f83011261577557600080fd5b610979838335602085016155ba565b600060e0823603121561579657600080fd5b61579e61510f565b82358152602083013560208201526040830135604082015260608301356001600160401b03808211156157d057600080fd5b6157dc3683870161522c565b606084015260808501359150808211156157f557600080fd5b61580136838701615705565b608084015260a085013591508082111561581a57600080fd5b61582636838701615764565b60a084015260c085013591508082111561583f57600080fd5b5061584c36828601615705565b60c08301525092915050565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176109cb576109cb615692565b602081016010831061589957615899614e72565b91905290565b6001600160e01b03198316815260408101600b83106158c0576158c0614e72565b8260208301529392505050565b6040815260006158e06040830185614e03565b82810360208401526158f28185614ca2565b95945050505050565b60808152600061590e6080830187614ca2565b8281036020840152615920818761550f565b905082810360408401526159348186614e03565b9050828103606084015261078e8185614e03565b60008151808452602080850194506020840160005b83811015614cd55781518752958201959082019060010161595d565b60005b8381101561599457818101518382015260200161597c565b50506000910152565b600081518084526159b5816020860160208601615979565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561521f57601f19868403018952615a0483835161599d565b988401989250908301906001016159e8565b8051825260208101516020830152604081015160408301526000606082015160e06060850152615a4960e0850182614e03565b905060808301518482036080860152615a628282615948565b91505060a083015184820360a0860152615a7c82826159c9565b91505060c083015184820360c08601526158f28282615948565b608081526000615aa96080830187615a16565b60208681850152838203604085015260c08201865183528187015182840152604087015160c0604085015281815180845260e0860191508483019350600092505b80831015615b13578351615afd8161549d565b8252928401926001929092019190840190615aea565b50606089015193508481036060860152615b2d8185615948565b935050505060808601518282036080840152615b4982826159c9565b91505060a086015182820360a0840152615b638282615948565b93505050506158f260608301846001600160a01b03169052565b6000808335601e19843603018112615b9457600080fd5b8301803591506001600160401b03821115615bae57600080fd5b6020019150600581901b3603821315610f2057600080fd5b600060c08236031215615bd857600080fd5b615be0615137565b823581526020830135602082015260408301356001600160401b0380821115615c0857600080fd5b615c14368387016151ac565b60408401526060850135915080821115615c2d57600080fd5b615c3936838701615705565b60608401526080850135915080821115615c5257600080fd5b615c5e36838701615764565b608084015260a0850135915080821115615c7757600080fd5b50615c8436828601615705565b60a08301525092915050565b6001600160e01b03199390931683526020830191909152604082015260600190565b604081526000615cc56040830185615a16565b905060018060a01b03831660208301529392505050565b6001600160e01b0319831681528151600090615cff816004850160208701615979565b919091016004019392505050565b602081526000610979602083018461599d565b60008251615d32818460208701615979565b9190910192915050565b608081526000615d4f608083018761599d565b8281036020840152615d618187614e03565b90508281036040840152615d758186614ca2565b9050828103606084015261078e81856159c9565b604081526000615d9c6040830185614ca2565b82810360208401526158f28185614e03565b600060208284031215615dc057600080fd5b6109798261500d565b803560ff8116811461117f57600080fd5b600060208284031215615dec57600080fd5b61097982615dc9565b600060608284031215615e0757600080fd5b604051606081018181106001600160401b0382111715615e2957615e296150f9565b604052615e3583615dc9565b815260208301356020820152604083013560408201528091505092915050565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b600060208284031215615e8a57600080fd5b8151801515811461097957600080fd5b604081016158c08285614e88565b634e487b7160e01b600052603160045260246000fd5b604081526000615ed16040830185614ca2565b82810360208401526158f281856159c956fea6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495da136eb38f8d8e354915fc8a767c0dc81d49de5fb65d5477122a82ddd976240ac1ff16a4f04f2a37a9ba5252a69baa100b460e517d1f8019c054a5ad698f9ffc55405a488814eaa0e2a685a0131142785b8d033d311c8c8244e34a7c12ca40f88547008e60f5748911f2e59feb3093b7e4c2e87b2dd69d61f112fcc932de8e38400683eb2cb350596d73644c0c89fe45f108600003457374f4ab3e87b4f3aa3d38c234075fde25875da8a6b7e36b58b86681d483271a99eeeee1d78e258a24d6924fe71b0c8b61aea02ca498b5f53b29bd95726278b1fe4eb791bb24a42644ca26469706673582212202b9889dbcffa51841f7d0004a5bbec4f7d87e2f76d85649d246727a9563eac8f64736f6c634300081700335da136eb38f8d8e354915fc8a767c0dc81d49de5fb65d5477122a82ddd976240c55405a488814eaa0e2a685a0131142785b8d033d311c8c8244e34a7c12ca40f92872d32822c9d44b36a2537d3e0d4c46fc4de1ce154ccfaed560a8a58445f1d - │ ├─ [8446] → new (31337)RoninBridgeManager[0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3]@0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3 - │ │ └─ ← 0 bytes of code - │ └─ ← revert: StdCheats deployCode(string,bytes): Deployment failed. - └─ ← revert: StdCheats deployCode(string,bytes): Deployment failed. - -Test result: FAILED. 0 passed; 1 failed; 0 skipped; finished in 310.13ms - -Ran 1 test suites: 0 tests passed, 1 failed, 0 skipped (1 total tests) - -Failing tests: -Encountered 1 failing test in test/bridge/integration/Base.t.sol:Base_Integration -[FAIL. Reason: setup failed: revert: StdCheats deployCode(string,bytes): Deployment failed.] setUp() (gas: 0) - -Encountered a total of 1 failing tests, 0 tests succeeded diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index bf9b533c..00ba0cfc 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -59,10 +59,10 @@ contract GeneralConfig is BaseGeneralConfig, Utils { // ronin bridge contracts setAddress(DefaultNetwork.Local.key(), Contract.RoninGatewayV3.key(), vm.computeCreateAddress(deployer, 4)); - setAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key(), vm.computeCreateAddress(deployer, 5)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key(), vm.computeCreateAddress(deployer, 7)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key(), vm.computeCreateAddress(deployer, 9)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key(), vm.computeCreateAddress(deployer, 11)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key(), vm.computeCreateAddress(deployer, 6)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key(), vm.computeCreateAddress(deployer, 8)); + setAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key(), vm.computeCreateAddress(deployer, 10)); + setAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key(), vm.computeCreateAddress(deployer, 11)); //mainchain bridge contracts setAddress(DefaultNetwork.Local.key(), Contract.MainchainGatewayV3.key(), vm.computeCreateAddress(deployer, 13)); @@ -75,24 +75,6 @@ contract GeneralConfig is BaseGeneralConfig, Utils { setAddress(DefaultNetwork.Local.key(), Contract.AXS.key(), vm.computeCreateAddress(deployer, 16)); setAddress(DefaultNetwork.Local.key(), Contract.SLP.key(), vm.computeCreateAddress(deployer, 17)); setAddress(DefaultNetwork.Local.key(), Contract.USDC.key(), vm.computeCreateAddress(deployer, 18)); - - console.log("Deployer", deployer); - console.log(" > roninGateway", getAddress(DefaultNetwork.Local.key(), Contract.RoninGatewayV3.key())); - console.log(" > mainchainGateway", getAddress(DefaultNetwork.Local.key(), Contract.MainchainGatewayV3.key())); - console.log(" > bridgeTrackingContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key())); - console.log(" > bridgeSlashContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key())); - console.log(" > bridgeRewardContract", getAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key())); - console.log( - " > roninBridgeManagerContract", getAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key()) - ); - console.log( - " > mainchainBridgeManagerContract", - getAddress(DefaultNetwork.Local.key(), Contract.MainchainBridgeManager.key()) - ); - console.log(" > WETH", getAddress(DefaultNetwork.Local.key(), Contract.WETH.key())); - console.log(" > AXS", getAddress(DefaultNetwork.Local.key(), Contract.AXS.key())); - console.log(" > SLP", getAddress(DefaultNetwork.Local.key(), Contract.SLP.key())); - console.log(" > USDC", getAddress(DefaultNetwork.Local.key(), Contract.USDC.key())); } } diff --git a/script/Migration.s.sol b/script/Migration.s.sol index 4bf4f10b..fed07af8 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -122,15 +122,14 @@ contract Migration is BaseMigration, Utils { options[0] = GlobalProposal.TargetOption.GatewayContract; targets[0] = loadContract(Contract.MainchainGatewayV3.key()); - param.mainchainBridgeManager.num = 70; - param.mainchainBridgeManager.denom = 100; - param.mainchainBridgeManager.roninChainId = block.chainid; - param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days + param.mainchainBridgeManager.num = 2; + param.mainchainBridgeManager.denom = 4; + param.mainchainBridgeManager.roninChainId = 0; param.mainchainBridgeManager.bridgeContract = loadContract(Contract.MainchainGatewayV3.key()); param.mainchainBridgeManager.callbackRegisters = getEmptyAddressArray(); - param.mainchainBridgeManager.bridgeOperators = getEmptyAddressArray(); - param.mainchainBridgeManager.governors = getEmptyAddressArray(); - param.mainchainBridgeManager.voteWeights = getEmptyUint96Array(); + param.mainchainBridgeManager.bridgeOperators = operatorAddrs; + param.mainchainBridgeManager.governors = governorAddrs; + param.mainchainBridgeManager.voteWeights = voteWeights; param.mainchainBridgeManager.targetOptions = options; param.mainchainBridgeManager.targets = targets; diff --git a/script/contracts/MainchainBridgeManagerDeploy.s.sol b/script/contracts/MainchainBridgeManagerDeploy.s.sol index 4d2efdac..31cc13f3 100644 --- a/script/contracts/MainchainBridgeManagerDeploy.s.sol +++ b/script/contracts/MainchainBridgeManagerDeploy.s.sol @@ -16,7 +16,6 @@ contract MainchainBridgeManagerDeploy is Migration { param.num, param.denom, param.roninChainId, - param.expiryDuration, param.bridgeContract, param.callbackRegisters, param.bridgeOperators, diff --git a/test/bridge/integration/Base.t.sol b/test/bridge/integration/BaseIntegration.t.sol similarity index 97% rename from test/bridge/integration/Base.t.sol rename to test/bridge/integration/BaseIntegration.t.sol index 0d0a9123..dfb75295 100644 --- a/test/bridge/integration/Base.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -27,7 +27,7 @@ import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; -contract Base_Integration is Base_Test { +contract BaseIntegration_Test is Base_Test { ISharedArgument.SharedParameter _param; RoninBridgeManager _roninBridgeManager; @@ -45,10 +45,10 @@ contract Base_Integration is Base_Test { function setUp() public virtual { _roninGatewayV3 = new RoninGatewayV3Deploy().run(); - _roninBridgeManager = new RoninBridgeManagerDeploy().run(); _bridgeTracking = new BridgeTrackingDeploy().run(); _bridgeSlash = new BridgeSlashDeploy().run(); _bridgeReward = new BridgeRewardDeploy().run(); + _roninBridgeManager = new RoninBridgeManagerDeploy().run(); _mainchainGatewayV3 = new MainchainGatewayV3Deploy().run(); _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); @@ -60,6 +60,4 @@ contract Base_Integration is Base_Test { _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); } - - function test_() public { } } diff --git a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol b/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol deleted file mode 100644 index 62c7862b..00000000 --- a/test/bridge/integration/bridge-manager/BridgeManagerInterface.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import { SignerUtils } from "@ronin/test/utils/Signers.sol"; -import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; - -contract BridgeManagerInterface is SignerUtils { - RoninBridgeManager internal _contract; - Account[] internal _signers; - - constructor(RoninBridgeManager bridgeManager, Account[] memory signers) { - _contract = bridgeManager; - _setSigners(signers); - } - - function _setSigners(Account[] memory signers) internal { - delete _signers; - for (uint256 i; i < signers.length; i++) { - _signers.push(signers[i]); - } - } - - function createGlobalProposal( - uint256 expiryTs, - GlobalProposal.TargetOption targetOption, - uint256 value_, - bytes memory calldata_, - uint256 gasAmount_, - uint256 nonce_ - ) public view returns (GlobalProposal.GlobalProposalDetail memory rs) { } -} diff --git a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol b/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol deleted file mode 100644 index 61e7b7e6..00000000 --- a/test/bridge/integration/bridge-manager/BridgeManager_IntegrationTest.t.sol +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { console2 } from "forge-std/console2.sol"; -import { StdStyle } from "forge-std/StdStyle.sol"; - -import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; -import { MockRoninGatewayV3Extended } from "@ronin/contracts/mocks/ronin/MockRoninGatewayV3Extended.sol"; -import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; -import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; -import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; -import { BridgeSlash } from "src/ronin/gateway/BridgeSlash.sol"; -import { BridgeTracking } from "src/ronin/gateway/BridgeTracking.sol"; -import { BridgeReward } from "src/ronin/gateway/BridgeReward.sol"; - -import { Base_Test } from "@ronin/test/Base.t.sol"; -import { SignerUtils } from "@ronin/test/utils/Signers.sol"; -import { InitTest } from "@ronin/test/init-test/InitTest.sol"; -import { DefaultTestConfig } from "@ronin/test/init-test/DefaultTestConfig.sol"; -import "@ronin/test/init-test/Structs.sol"; -import "./BridgeManagerInterface.sol"; - -contract Bridge_Integration_Test is Base_Test, InitTest, SignerUtils { - uint256 internal _operatorNum; - uint256 internal _bridgeAdminNumerator; - uint256 internal _bridgeAdminDenominator; - Account[] internal _operators; - Account[] internal _governors; - - MockRoninGatewayV3Extended internal _roninGatewayV3Contract; - MainchainGatewayV3 internal _mainchainGatewayV3; - RoninBridgeManager internal _roninBridgeManager; - BridgeTracking internal _bridgeTracking; - BridgeSlash internal _bridgeSlash; - BridgeReward internal _bridgeReward; - MainchainBridgeManager internal _mainchainBridgeManager; - - BridgeManagerInterface _bridgeManagerInterface; - - function setUp() public virtual { - _operatorNum = 6; - _setOperators(getSigners(_operatorNum)); - _setGovernors(getSigners(_operatorNum)); - _prepareDeploymentArgs(); - - InitTestOutput memory output = init(); - - _roninGatewayV3Contract = MockRoninGatewayV3Extended(output.roninGatewayV3Address); - _roninBridgeManager = RoninBridgeManager(output.roninBridgeManagerAddress); - _bridgeSlash = BridgeSlash(output.bridgeSlashAddress); - _bridgeReward = BridgeReward(output.bridgeRewardAddress); - _bridgeTracking = BridgeTracking(output.bridgeTrackingAddress); - - _mainchainGatewayV3 = MainchainGatewayV3(output.mainchainGatewayV3Address); - _mainchainBridgeManager = MainchainBridgeManager(output.mainchainBridgeManagerAddress); - - vm.roll(1); - } - - function _prepareDeploymentArgs() internal { - _bridgeAdminNumerator = 2; - _bridgeAdminDenominator = 4; - - BridgeManagerMemberStruct[] memory members = new BridgeManagerMemberStruct[](_operatorNum); - for (uint256 i; i < members.length; i++) { - members[i].operator = _operators[i].addr; - members[i].governor = _governors[i].addr; - members[i].weight = 100; - } - - BridgeManagerArguments memory arg = BridgeManagerArguments({ - numerator: _bridgeAdminNumerator, - denominator: _bridgeAdminDenominator, - expiryDuration: DefaultTestConfig.get().bridgeManagerArguments.expiryDuration, - members: members, - targets: DefaultTestConfig.get().bridgeManagerArguments.targets - }); - - setBridgeManagerArgs(arg); - } - - function _setOperators(Account[] memory operators) internal { - delete _operators; - for (uint256 i; i < operators.length; i++) { - _operators.push(operators[i]); - } - } - - function _setGovernors(Account[] memory governors) internal { - delete _governors; - for (uint256 i; i < governors.length; i++) { - _governors.push(governors[i]); - } - } -} diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol index da199111..358c4810 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol @@ -1,9 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "../BridgeManager_IntegrationTest.t.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import "../../BaseIntegration.t.sol"; -contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { +contract SetConfig_MainchainManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); } @@ -16,9 +18,7 @@ contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { function test_configBridgeOperatorsCorrectly() external { address[] memory bridgeOperators = _mainchainBridgeManager.getBridgeOperators(); - for (uint256 i; i < bridgeOperators.length; i++) { - assertEq(bridgeOperators[i], _operators[i].addr); - } + assertEq(bridgeOperators, _param.mainchainBridgeManager.bridgeOperators); } function test_configTargetsCorrectly() external { @@ -33,8 +33,8 @@ contract SetConfig_MainchainManager_Test is Bridge_Integration_Test { assertEq(results[0], address(_mainchainBridgeManager)); assertEq(results[1], address(_mainchainGatewayV3)); - assertEq(results[2], address(DEFAULT_ADDRESS)); - assertEq(results[3], address(DEFAULT_ADDRESS)); - assertEq(results[4], address(DEFAULT_ADDRESS)); + assertEq(results[2], address(address(0))); + assertEq(results[3], address(address(0))); + assertEq(results[4], address(address(0))); } } diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index b33fed83..d27aa9d4 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -1,24 +1,24 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "../BridgeManager_IntegrationTest.t.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import "../../BaseIntegration.t.sol"; -contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { +contract SetConfig_RoninBridgeManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); } function test_configBridgeContractCorrectly() external { address bridgeContract = _roninBridgeManager.getContract(ContractType.BRIDGE); - assertEq(bridgeContract, address(_roninGatewayV3Contract)); + assertEq(bridgeContract, address(_roninGatewayV3)); } function test_configBridgeOperatorsCorrectly() external { address[] memory bridgeOperators = _roninBridgeManager.getBridgeOperators(); - for (uint256 i; i < bridgeOperators.length; i++) { - assertEq(bridgeOperators[i], _operators[i].addr); - } + assertEq(bridgeOperators, _param.roninBridgeManager.bridgeOperators); } function test_configTargetsCorrectly() external { @@ -32,7 +32,7 @@ contract SetConfig_RoninBridgeManager_Test is Bridge_Integration_Test { address[] memory results = _roninBridgeManager.resolveTargets(targets); assertEq(results[0], address(_roninBridgeManager)); - assertEq(results[1], address(_roninGatewayV3Contract)); + assertEq(results[1], address(_roninGatewayV3)); assertEq(results[2], address(_bridgeSlash)); assertEq(results[3], address(_bridgeReward)); assertEq(results[4], address(_bridgeTracking)); diff --git a/test/init-test/DefaultTestConfig.sol b/test/init-test/DefaultTestConfig.sol deleted file mode 100644 index dace185a..00000000 --- a/test/init-test/DefaultTestConfig.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import "./Structs.sol"; - -library DefaultTestConfig { - function get() public pure returns (InitTestInput memory rs) { - rs.roninGeneralConfig.bridgeContract = address(0); - rs.roninGeneralConfig.startedAtBlock = 0; - rs.mainchainGeneralConfig.bridgeContract = address(0); - rs.mainchainGeneralConfig.startedAtBlock = 0; - - // maintenanceArguments - rs.maintenanceArguments.minMaintenanceDurationInBlock = 100; - rs.maintenanceArguments.maxMaintenanceDurationInBlock = 1000; - rs.maintenanceArguments.minOffsetToStartSchedule = 200; - rs.maintenanceArguments.maxOffsetToStartSchedule = 200 * 7; - rs.maintenanceArguments.maxSchedules = 2; - rs.maintenanceArguments.cooldownSecsToMaintain = 0; - - // stakingArguments - rs.stakingArguments.minValidatorStakingAmount = 100; - rs.stakingArguments.maxCommissionRate = 100; - rs.stakingArguments.cooldownSecsToUndelegate = 3 * 86400; - rs.stakingArguments.waitingSecsToRevoke = 7 * 86400; - - //stakingVestingArguments - rs.stakingVestingArguments.blockProducerBonusPerBlock = 1000; - rs.stakingVestingArguments.bridgeOperatorBonusPerBlock = 1000; - rs.stakingVestingArguments.topupAmount = 100_000_000_000; - rs.stakingVestingArguments.fastFinalityRewardPercent = 1_00; - - //slashIndicatorArguments.bridgeOperatorSlashing - rs.slashIndicatorArguments.bridgeOperatorSlashing.missingVotesRatioTier1 = 10_00; - rs.slashIndicatorArguments.bridgeOperatorSlashing.missingVotesRatioTier2 = 20_00; - rs.slashIndicatorArguments.bridgeOperatorSlashing.jailDurationForMissingVotesRatioTier2 = 28800 * 2; - rs.slashIndicatorArguments.bridgeOperatorSlashing.skipBridgeOperatorSlashingThreshold = 10; - - //slashIndicatorArguments.bridgeVotingSlashing - rs.slashIndicatorArguments.bridgeVotingSlashing.bridgeVotingThreshold = 28800 * 3; - rs.slashIndicatorArguments.bridgeVotingSlashing.bridgeVotingSlashAmount = 10_000 * 1e18; - - //slashIndicatorArguments.doubleSignSlashing - rs.slashIndicatorArguments.doubleSignSlashing.slashDoubleSignAmount = 10 * 1e18; - rs.slashIndicatorArguments.doubleSignSlashing.doubleSigningJailUntilBlock = type(uint256).max; - rs.slashIndicatorArguments.doubleSignSlashing.doubleSigningOffsetLimitBlock = 28800; - - //slashIndicatorArguments.unavailabilitySlashing - rs.slashIndicatorArguments.unavailabilitySlashing.unavailabilityTier1Threshold = 5; - rs.slashIndicatorArguments.unavailabilitySlashing.unavailabilityTier2Threshold = 10; - rs.slashIndicatorArguments.unavailabilitySlashing.slashAmountForUnavailabilityTier2Threshold = 1e18; - rs.slashIndicatorArguments.unavailabilitySlashing.jailDurationForUnavailabilityTier2Threshold = 28800; - - //slashIndicatorArguments.creditScore - rs.slashIndicatorArguments.creditScore.gainCreditScore = 50; - rs.slashIndicatorArguments.creditScore.maxCreditScore = 600; - rs.slashIndicatorArguments.creditScore.bailOutCostMultiplier = 5; - rs.slashIndicatorArguments.creditScore.cutOffPercentageAfterBailout = 50_00; - - //roninValidatorSetArguments - rs.roninValidatorSetArguments.maxValidatorNumber = 4; - rs.roninValidatorSetArguments.maxPrioritizedValidatorNumber = 0; - rs.roninValidatorSetArguments.numberOfBlocksInEpoch = 600; - rs.roninValidatorSetArguments.maxValidatorCandidate = 10; - rs.roninValidatorSetArguments.minEffectiveDaysOnwards = 7; - rs.roninValidatorSetArguments.emergencyExitLockedAmount = 500; - rs.roninValidatorSetArguments.emergencyExpiryDuration = 14 * 86400; - - //roninTrustedOrganizationArguments - // rs.roninTrustedOrganizationArguments.trustedOrganizations = new TrustedOrganization[](0); - rs.roninTrustedOrganizationArguments.numerator = 0; - rs.roninTrustedOrganizationArguments.denominator = 1; - - //governanceAdminArguments - rs.governanceAdminArguments.proposalExpiryDuration = 60 * 60 * 24 * 14; // 14 days - - //bridgeManagerArguments - rs.bridgeManagerArguments.numerator = 70; - rs.bridgeManagerArguments.denominator = 100; - rs.bridgeManagerArguments.expiryDuration = 60 * 60 * 24 * 14; // 14 days - rs.bridgeManagerArguments.members = new BridgeManagerMemberStruct[](0); - rs.bridgeManagerArguments.targets = new TargetOptionStruct[](0); - - //bridgeRewardArguments - rs.bridgeRewardArguments.rewardPerPeriod = 5_000; - rs.bridgeRewardArguments.topupAmount = 100_000_000_000; - } -} diff --git a/test/init-test/InitTest.sol b/test/init-test/InitTest.sol deleted file mode 100644 index 443d1404..00000000 --- a/test/init-test/InitTest.sol +++ /dev/null @@ -1,377 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { console2 } from "forge-std/console2.sol"; -import "../Base.t.sol"; -import "./Structs.sol"; - -import { DefaultTestConfig } from "./DefaultTestConfig.sol"; - -import { TransparentUpgradeableProxyV2 } from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; - -import { BridgeTracking } from "@ronin/contracts/ronin/gateway/BridgeTracking.sol"; -import { BridgeSlash } from "@ronin/contracts/ronin/gateway/BridgeSlash.sol"; -import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; -import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; -import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; -import { RoninGatewayV3 } from "@ronin/contracts/ronin/gateway/RoninGatewayV3.sol"; -import { MockRoninGatewayV3Extended } from "@ronin/contracts/mocks/ronin/MockRoninGatewayV3Extended.sol"; -import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; -import { AddressArrayUtils } from "@ronin/contracts/libraries/AddressArrayUtils.sol"; - -contract InitTest is Base_Test { - address constant DEFAULT_ADDRESS = address(0); - - InitTestInput internal _inputArguments; - address internal _deployer; - address internal _proxyAdmin; - - constructor() { - _inputArguments.roninGeneralConfig = DefaultTestConfig.get().roninGeneralConfig; - _inputArguments.maintenanceArguments = DefaultTestConfig.get().maintenanceArguments; - _inputArguments.stakingVestingArguments = DefaultTestConfig.get().stakingVestingArguments; - _inputArguments.slashIndicatorArguments = DefaultTestConfig.get().slashIndicatorArguments; - _inputArguments.roninValidatorSetArguments = DefaultTestConfig.get().roninValidatorSetArguments; - _inputArguments.governanceAdminArguments = DefaultTestConfig.get().governanceAdminArguments; - _inputArguments.bridgeRewardArguments = DefaultTestConfig.get().bridgeRewardArguments; - - setRoninGatewayArgs(DefaultTestConfig.get().roninGatewayV3Arguments); - setMainchainGatewayArgs(DefaultTestConfig.get().mainchainGatewayV3Arguments); - setBridgeManagerArgs(DefaultTestConfig.get().bridgeManagerArguments); - setRoninTrustedOrgArgs(DefaultTestConfig.get().roninTrustedOrganizationArguments); - } - - function setRoninGatewayArgs(RoninGatewayV3Arguments memory arg) public { - _inputArguments.roninGatewayV3Arguments.roleSetter = arg.roleSetter; - _inputArguments.roninGatewayV3Arguments.numerator = arg.numerator; - _inputArguments.roninGatewayV3Arguments.denominator = arg.denominator; - _inputArguments.roninGatewayV3Arguments.trustedNumerator = arg.trustedNumerator; - _inputArguments.roninGatewayV3Arguments.trustedDenominator = arg.trustedDenominator; - - delete _inputArguments.roninGatewayV3Arguments.withdrawalMigrators; - for (uint256 i; i < arg.withdrawalMigrators.length; i++) { - _inputArguments.roninGatewayV3Arguments.withdrawalMigrators.push(arg.withdrawalMigrators[i]); - } - for (uint256 index; index < 2; index++) { - delete _inputArguments.roninGatewayV3Arguments.packedAddresses[index]; - for (uint256 i; i < arg.packedAddresses[index].length; i++) { - _inputArguments.roninGatewayV3Arguments.packedAddresses[index].push(arg.packedAddresses[index][i]); - } - - delete _inputArguments.roninGatewayV3Arguments.packedNumbers[index]; - for (uint256 i; i < arg.packedNumbers[index].length; i++) { - _inputArguments.roninGatewayV3Arguments.packedNumbers[index].push(arg.packedNumbers[index][i]); - } - } - - delete _inputArguments.roninGatewayV3Arguments.standards; - for (uint256 i; i < arg.standards.length; i++) { - _inputArguments.roninGatewayV3Arguments.standards.push(arg.standards[i]); - } - } - - function setMainchainGatewayArgs(MainchainGatewayV3Arguments memory arg) public { - _inputArguments.mainchainGatewayV3Arguments.roleSetter = arg.roleSetter; - _inputArguments.mainchainGatewayV3Arguments.wrappedToken = arg.wrappedToken; - _inputArguments.mainchainGatewayV3Arguments.numerator = arg.numerator; - _inputArguments.mainchainGatewayV3Arguments.highTierVWNumerator = arg.highTierVWNumerator; - _inputArguments.mainchainGatewayV3Arguments.denominator = arg.denominator; - - for (uint256 index; index < 3; index++) { - delete _inputArguments.mainchainGatewayV3Arguments.addresses[index]; - for (uint256 i; i < arg.addresses[index].length; i++) { - _inputArguments.mainchainGatewayV3Arguments.addresses[index].push(arg.addresses[index][i]); - } - } - - for (uint256 index; index < 3; index++) { - delete _inputArguments.mainchainGatewayV3Arguments.thresholds[index]; - for (uint256 i; i < arg.thresholds[index].length; i++) { - _inputArguments.mainchainGatewayV3Arguments.thresholds[index].push(arg.thresholds[index][i]); - } - } - - delete _inputArguments.mainchainGatewayV3Arguments.standards; - for (uint256 i; i < arg.standards.length; i++) { - _inputArguments.mainchainGatewayV3Arguments.standards.push(arg.standards[i]); - } - } - - function setBridgeManagerArgs(BridgeManagerArguments memory arg) public { - _inputArguments.bridgeManagerArguments.denominator = arg.denominator; - _inputArguments.bridgeManagerArguments.numerator = arg.numerator; - _inputArguments.bridgeManagerArguments.expiryDuration = arg.expiryDuration; - - delete _inputArguments.bridgeManagerArguments.members; - for (uint256 i; i < arg.members.length; i++) { - _inputArguments.bridgeManagerArguments.members.push(arg.members[i]); - } - delete _inputArguments.bridgeManagerArguments.targets; - for (uint256 i; i < arg.targets.length; i++) { - _inputArguments.bridgeManagerArguments.targets.push(arg.targets[i]); - } - } - - function setRoninTrustedOrgArgs(RoninTrustedOrganizationArguments memory arg) public { - _inputArguments.roninTrustedOrganizationArguments.denominator = arg.denominator; - _inputArguments.roninTrustedOrganizationArguments.numerator = arg.numerator; - - delete _inputArguments.roninTrustedOrganizationArguments.trustedOrganizations; - for (uint256 i; i < arg.trustedOrganizations.length; i++) { - _inputArguments.roninTrustedOrganizationArguments.trustedOrganizations.push(arg.trustedOrganizations[i]); - } - } - - function init() public returns (InitTestOutput memory output) { - _deployer = makeAddr("deployer"); - vm.deal(_deployer, _inputArguments.bridgeRewardArguments.topupAmount); - _proxyAdmin = makeAddr("proxyAdmin"); - - _prepareAddressForGeneralConfig(); - - vm.startPrank(_deployer); - output.roninGatewayV3Address = payable(_deployRoninGatewayV3Contract()); - output.mainchainGatewayV3Address = payable(_deployMainchainGatewayV3()); - output.bridgeTrackingAddress = payable(_deployBridgeTracking()); - output.bridgeSlashAddress = payable(_deployBridgeSlash()); - output.bridgeRewardAddress = payable(_deployBridgeReward()); - output.roninBridgeManagerAddress = payable(_deployRoninBridgeManager()); - output.mainchainBridgeManagerAddress = payable(_deployMainchainBridgeManager()); - vm.stopPrank(); - } - - function _prepareAddressForGeneralConfig() internal { - uint256 nonce = 1; - _inputArguments.roninGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; - nonce += 2; - _inputArguments.mainchainGeneralConfig.bridgeContract = _calculateAddress(_deployer, nonce).addr; - - nonce += 2; - _inputArguments.roninGeneralConfig.bridgeTrackingContract = _calculateAddress(_deployer, nonce); - nonce += 2; - _inputArguments.roninGeneralConfig.bridgeSlashContract = _calculateAddress(_deployer, nonce); - nonce += 2; - _inputArguments.roninGeneralConfig.bridgeRewardContract = _calculateAddress(_deployer, nonce); - - nonce += 1; - _inputArguments.roninGeneralConfig.bridgeManagerContract = _calculateAddress(_deployer, nonce); - nonce += 1; - _inputArguments.mainchainGeneralConfig.bridgeManagerContract = _calculateAddress(_deployer, nonce); - - console2.log("Deployer", _deployer); - console2.log(" > roninGateway", _inputArguments.roninGeneralConfig.bridgeContract); - console2.log(" > mainchainGateway", _inputArguments.mainchainGeneralConfig.bridgeContract); - console2.log(" > bridgeTrackingContract", _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); - console2.log(" > bridgeSlashContract", _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); - console2.log(" > bridgeRewardContract", _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); - console2.log(" > roninBridgeManagerContract", _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); - console2.log(" > mainchainBridgeManagerContract", _inputArguments.mainchainGeneralConfig.bridgeContract); - } - - function _deployRoninGatewayV3Contract() internal returns (address) { - MockRoninGatewayV3Extended logic = new MockRoninGatewayV3Extended(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( - address(logic), - _proxyAdmin, - abi.encodeCall( - RoninGatewayV3.initialize, - ( - _inputArguments.roninGatewayV3Arguments.roleSetter, - _inputArguments.roninGatewayV3Arguments.numerator, - _inputArguments.roninGatewayV3Arguments.denominator, - _inputArguments.roninGatewayV3Arguments.trustedNumerator, - _inputArguments.roninGatewayV3Arguments.trustedDenominator, - _inputArguments.roninGatewayV3Arguments.withdrawalMigrators, - _inputArguments.roninGatewayV3Arguments.packedAddresses, - _inputArguments.roninGatewayV3Arguments.packedNumbers, - _inputArguments.roninGatewayV3Arguments.standards - ) - ) - ); - address roninGatewayContract = address(proxy); - vm.label(roninGatewayContract, "RoninGatewayV3"); - assertEq(roninGatewayContract, _inputArguments.roninGeneralConfig.bridgeContract); - return roninGatewayContract; - } - - function _deployBridgeTracking() internal returns (address) { - BridgeTracking logic = new BridgeTracking(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( - address(logic), - _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, - abi.encodeCall( - BridgeTracking.initialize, - ( - _inputArguments.roninGeneralConfig.bridgeContract, - _inputArguments.roninGeneralConfig.validatorContract.addr, - _inputArguments.roninGeneralConfig.startedAtBlock - ) - ) - ); - address result = address(proxy); - vm.label(result, "BridgeTrackingProxy"); - assertEq(result, _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr); - return result; - } - - function _deployBridgeSlash() internal returns (address) { - BridgeSlash logic = new BridgeSlash(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( - address(logic), - _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, - abi.encodeCall( - BridgeSlash.initialize, - ( - _inputArguments.roninGeneralConfig.validatorContract.addr, - _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, - _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr, - _inputArguments.roninGeneralConfig.governanceAdmin.addr - ) - ) - ); - address result = address(proxy); - vm.label(result, "BridgeSlashProxy"); - assertEq(result, _inputArguments.roninGeneralConfig.bridgeSlashContract.addr); - return result; - } - - function _deployBridgeReward() internal returns (address) { - BridgeReward logic = new BridgeReward(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2{ - value: _inputArguments.bridgeRewardArguments.topupAmount - }( - address(logic), - _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, - abi.encodeCall( - BridgeReward.initialize, - ( - _inputArguments.roninGeneralConfig.bridgeManagerContract.addr, - _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr, - _inputArguments.roninGeneralConfig.bridgeSlashContract.addr, - _inputArguments.roninGeneralConfig.validatorContract.addr, - _inputArguments.roninGeneralConfig.governanceAdmin.addr, - _inputArguments.bridgeRewardArguments.rewardPerPeriod - ) - ) - ); - address result = address(proxy); - vm.label(result, "BridgeRewardProxy"); - assertEq(result, _inputArguments.roninGeneralConfig.bridgeRewardContract.addr); - return result; - } - - function _deployRoninBridgeManager() internal returns (address) { - uint256 lengthMembers = _inputArguments.bridgeManagerArguments.members.length; - address[] memory operators = new address[](lengthMembers); - address[] memory governors = new address[](lengthMembers); - uint96[] memory weights = new uint96[](lengthMembers); - - for (uint256 i; i < lengthMembers; i++) { - operators[i] = _inputArguments.bridgeManagerArguments.members[i].operator; - governors[i] = _inputArguments.bridgeManagerArguments.members[i].governor; - weights[i] = _inputArguments.bridgeManagerArguments.members[i].weight; - } - - GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](4); - address[] memory targets = new address[](4); - - options[0] = GlobalProposal.TargetOption.GatewayContract; - targets[0] = _inputArguments.roninGeneralConfig.bridgeContract; - - options[1] = GlobalProposal.TargetOption.BridgeReward; - targets[1] = _inputArguments.roninGeneralConfig.bridgeRewardContract.addr; - - options[2] = GlobalProposal.TargetOption.BridgeSlash; - targets[2] = _inputArguments.roninGeneralConfig.bridgeSlashContract.addr; - - options[3] = GlobalProposal.TargetOption.BridgeTracking; - targets[3] = _inputArguments.roninGeneralConfig.bridgeTrackingContract.addr; - - RoninBridgeManager bridgeManager = new RoninBridgeManager( - _inputArguments.bridgeManagerArguments.numerator, - _inputArguments.bridgeManagerArguments.denominator, - _inputArguments.roninGeneralConfig.roninChainId, - _inputArguments.bridgeManagerArguments.expiryDuration, - _inputArguments.roninGeneralConfig.bridgeContract, - wrapAddress(_inputArguments.roninGeneralConfig.bridgeSlashContract.addr), - operators, - governors, - weights, - options, - targets - ); - - address result = address(bridgeManager); - vm.label(result, "RoninBridgeManager"); - assertEq(result, _inputArguments.roninGeneralConfig.bridgeManagerContract.addr); - return result; - } - - function _deployMainchainBridgeManager() internal returns (address) { - uint256 lengthMembers = _inputArguments.bridgeManagerArguments.members.length; - address[] memory operators = new address[](lengthMembers); - address[] memory governors = new address[](lengthMembers); - uint96[] memory weights = new uint96[](lengthMembers); - - for (uint256 i; i < lengthMembers; i++) { - operators[i] = _inputArguments.bridgeManagerArguments.members[i].operator; - governors[i] = _inputArguments.bridgeManagerArguments.members[i].governor; - weights[i] = _inputArguments.bridgeManagerArguments.members[i].weight; - } - - GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](1); - address[] memory targets = new address[](1); - options[0] = GlobalProposal.TargetOption.GatewayContract; - targets[0] = _inputArguments.mainchainGeneralConfig.bridgeContract; - - MainchainBridgeManager bridgeManager = new MainchainBridgeManager( - _inputArguments.bridgeManagerArguments.numerator, - _inputArguments.bridgeManagerArguments.denominator, - _inputArguments.mainchainGeneralConfig.roninChainId, - _inputArguments.mainchainGeneralConfig.bridgeContract, - getEmptyAddressArray(), - operators, - governors, - weights, - options, - targets - ); - vm.label(address(bridgeManager), "MainchainBridgeManager"); - return address(bridgeManager); - } - - function _deployMainchainGatewayV3() internal returns (address) { - MainchainGatewayV3 logic = new MainchainGatewayV3(); - TransparentUpgradeableProxyV2 proxy = new TransparentUpgradeableProxyV2( - address(logic), - _proxyAdmin, - abi.encodeCall( - MainchainGatewayV3.initialize, - ( - _inputArguments.mainchainGatewayV3Arguments.roleSetter, - _inputArguments.mainchainGatewayV3Arguments.wrappedToken, - _inputArguments.mainchainGatewayV3Arguments.roninChainId, - _inputArguments.mainchainGatewayV3Arguments.numerator, - _inputArguments.mainchainGatewayV3Arguments.highTierVWNumerator, - _inputArguments.mainchainGatewayV3Arguments.denominator, - _inputArguments.mainchainGatewayV3Arguments.addresses, - _inputArguments.mainchainGatewayV3Arguments.thresholds, - _inputArguments.mainchainGatewayV3Arguments.standards - ) - ) - ); - address mainchainGatewayContract = address(proxy); - vm.label(mainchainGatewayContract, "MainchainGatewayV3"); - assertEq(mainchainGatewayContract, _inputArguments.mainchainGeneralConfig.bridgeContract); - return mainchainGatewayContract; - } - - function _calculateAddress(address deployer, uint256 nonce) internal pure returns (AddressExtended memory rs) { - rs.nonce = nonce; - rs.addr = computeCreateAddress(deployer, nonce); - } - - function _calculateSalt(uint256 nonce) internal pure returns (bytes32) { - return keccak256(abi.encode(uint256(nonce))); - } -} diff --git a/test/init-test/Structs.sol b/test/init-test/Structs.sol deleted file mode 100644 index c557d290..00000000 --- a/test/init-test/Structs.sol +++ /dev/null @@ -1,210 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import "@ronin/contracts/libraries/GlobalProposal.sol"; -import "@ronin/contracts/interfaces/IWETH.sol"; -import "@ronin/contracts/libraries/Token.sol"; - -struct MaintenanceArguments { - uint256 minMaintenanceDurationInBlock; - uint256 maxMaintenanceDurationInBlock; - uint256 minOffsetToStartSchedule; - uint256 maxOffsetToStartSchedule; - uint256 maxSchedules; - uint256 cooldownSecsToMaintain; -} - -struct StakingArguments { - uint256 minValidatorStakingAmount; - uint256 minCommissionRate; - uint256 maxCommissionRate; - uint256 cooldownSecsToUndelegate; - uint256 waitingSecsToRevoke; -} - -struct StakingVestingArguments { - uint256 blockProducerBonusPerBlock; - uint256 bridgeOperatorBonusPerBlock; - uint256 topupAmount; - uint256 fastFinalityRewardPercent; -} - -struct BridgeOperatorSlashingConfig { - uint256 missingVotesRatioTier1; - uint256 missingVotesRatioTier2; - uint256 jailDurationForMissingVotesRatioTier2; - uint256 skipBridgeOperatorSlashingThreshold; -} - -struct BridgeVotingSlashingConfig { - uint256 bridgeVotingThreshold; - uint256 bridgeVotingSlashAmount; -} - -struct DoubleSignSlashingConfig { - uint256 slashDoubleSignAmount; - uint256 doubleSigningJailUntilBlock; - uint256 doubleSigningOffsetLimitBlock; -} - -struct UnavailabilitySlashing { - uint256 unavailabilityTier1Threshold; - uint256 unavailabilityTier2Threshold; - uint256 slashAmountForUnavailabilityTier2Threshold; - uint256 jailDurationForUnavailabilityTier2Threshold; -} - -struct CreditScoreConfig { - uint256 gainCreditScore; - uint256 maxCreditScore; - uint256 bailOutCostMultiplier; - uint256 cutOffPercentageAfterBailout; -} - -struct SlashIndicatorArguments { - BridgeOperatorSlashingConfig bridgeOperatorSlashing; - BridgeVotingSlashingConfig bridgeVotingSlashing; - DoubleSignSlashingConfig doubleSignSlashing; - UnavailabilitySlashing unavailabilitySlashing; - CreditScoreConfig creditScore; -} - -struct RoninValidatorSetArguments { - uint256 maxValidatorNumber; - uint256 maxValidatorCandidate; - uint256 maxPrioritizedValidatorNumber; - uint256 numberOfBlocksInEpoch; - uint256 minEffectiveDaysOnwards; - uint256 emergencyExitLockedAmount; - uint256 emergencyExpiryDuration; -} - -struct TrustedOrganization { - address consensusAddr; - address governor; - address bridgeVoter; - uint256 weight; - uint256 addedBlock; -} - -struct RoninTrustedOrganizationArguments { - TrustedOrganization[] trustedOrganizations; - uint256 numerator; - uint256 denominator; -} - -struct RoninGovernanceAdminArguments { - uint256 proposalExpiryDuration; -} - -struct TargetOptionStruct { - GlobalProposal.TargetOption option; - address target; -} - -struct BridgeManagerMemberStruct { - address governor; - address operator; - uint96 weight; -} - -struct BridgeManagerArguments { - uint256 numerator; - uint256 denominator; - uint256 expiryDuration; - BridgeManagerMemberStruct[] members; - TargetOptionStruct[] targets; -} - -struct RoninGatewayV3Arguments { - address roleSetter; - uint256 numerator; - uint256 denominator; - uint256 trustedNumerator; - uint256 trustedDenominator; - address[] withdrawalMigrators; - address[][2] packedAddresses; - uint256[][2] packedNumbers; - Token.Standard[] standards; -} - -struct MainchainGatewayV3Arguments { - address roleSetter; - IWETH wrappedToken; - uint256 roninChainId; - uint256 numerator; - uint256 highTierVWNumerator; - uint256 denominator; - // addresses[0]: mainchainTokens - // addresses[1]: roninTokens - // addresses[2]: withdrawalUnlockers - address[][3] addresses; - // thresholds[0]: highTierThreshold - // thresholds[1]: lockedThreshold - // thresholds[2]: unlockFeePercentages - // thresholds[3]: dailyWithdrawalLimit - uint256[][4] thresholds; - Token.Standard[] standards; -} - -struct BridgeRewardArguments { - uint256 rewardPerPeriod; - uint256 topupAmount; -} - -struct AddressExtended { - address addr; - uint256 nonce; -} - -struct GeneralConfig { - uint256 roninChainId; - address bridgeContract; - uint256 startedAtBlock; - AddressExtended governanceAdmin; - AddressExtended maintenanceContract; - AddressExtended fastFinalityTrackingContract; - AddressExtended stakingVestingContract; - AddressExtended slashIndicatorContract; - AddressExtended stakingContract; - AddressExtended validatorContract; - AddressExtended roninTrustedOrganizationContract; - AddressExtended bridgeTrackingContract; - AddressExtended bridgeManagerContract; - AddressExtended bridgeSlashContract; - AddressExtended bridgeRewardContract; -} - -struct InitTestInput { - GeneralConfig roninGeneralConfig; - GeneralConfig mainchainGeneralConfig; - MaintenanceArguments maintenanceArguments; - StakingArguments stakingArguments; - StakingVestingArguments stakingVestingArguments; - SlashIndicatorArguments slashIndicatorArguments; - RoninValidatorSetArguments roninValidatorSetArguments; - RoninTrustedOrganizationArguments roninTrustedOrganizationArguments; - RoninGovernanceAdminArguments governanceAdminArguments; - BridgeManagerArguments bridgeManagerArguments; - BridgeRewardArguments bridgeRewardArguments; - RoninGatewayV3Arguments roninGatewayV3Arguments; - MainchainGatewayV3Arguments mainchainGatewayV3Arguments; -} - -struct InitTestOutput { - address payable roninGovernanceAdminAddress; - address payable maintenanceContractAddress; - address payable roninTrustedOrganizationAddress; - address payable fastFinalityTrackingAddress; - address payable slashContractAddress; - address payable stakingContractAddress; - address payable stakingVestingContractAddress; - address payable validatorContractAddress; - address payable bridgeTrackingAddress; - address payable bridgeSlashAddress; - address payable bridgeRewardAddress; - address payable roninBridgeManagerAddress; - address payable roninGatewayV3Address; - address payable mainchainBridgeManagerAddress; - address payable mainchainGatewayV3Address; -} diff --git a/test/utils/Signers.sol b/test/utils/Signers.sol deleted file mode 100644 index d3c610f3..00000000 --- a/test/utils/Signers.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { StdCheats } from "forge-std/StdCheats.sol"; - -contract SignerUtils is StdCheats { - uint256 public constant ACCOUNT_SIGNER = uint256(keccak256("@ronin-bridge-contract.signer.index")); - uint256 internal _accountNonce; - - function getSigners(uint256 num) internal returns (Account[] memory accounts) { - require(num >= 1, "Invalid number of signers"); - uint256 startIdx = _accountNonce; - uint256 endIdx = _accountNonce + num - 1; - accounts = new Account[](num); - - for (uint256 i = startIdx; i <= endIdx; i++) { - accounts[i - startIdx] = makeAccount(string(abi.encodePacked(ACCOUNT_SIGNER, i))); - } - _accountNonce += num; - } -} From 2445b523bd05d2cf9d59b0a59d48b613a5e13bca Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 12:04:31 +0700 Subject: [PATCH 31/73] chore: storage-layout --- logs/contract-code-sizes.log | 3 --- 1 file changed, 3 deletions(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 9a03a480..eb8d5f1d 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -5,12 +5,10 @@ | ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | | BaseGeneralConfig | 20.129 | 4.447 | -| BridgeManagerInterface | 0.935 | 23.641 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.032 | 18.544 | | BridgeSlash | 5.639 | 18.937 | | BridgeTracking | 6.875 | 17.701 | -| DefaultTestConfig | 4.493 | 20.083 | | ECDSA | 0.086 | 24.49 | | ERC1967Proxy | 0.177 | 24.399 | | ERC20 | 2.173 | 22.403 | @@ -53,7 +51,6 @@ | ProxyAdmin | 1.684 | 22.892 | | RoninBridgeManager | 24.601 | -0.025 | | RoninGatewayV3 | 19.765 | 4.811 | -| SignerUtils | 0.155 | 24.421 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | | Strings | 0.086 | 24.49 | From f4774e667e40606a5eda38d9be180792139b6fca Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:17:58 +0700 Subject: [PATCH 32/73] chore: storage layout --- logs/contract-code-sizes.log | 2 +- logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- .../GeneralConfig.sol:GeneralConfig.log | 20 +++++++++++++++++++ logs/storage/InitTest.sol:InitTest.log | 6 +++--- .../MockWrapToken.sol:MockWrapToken.log | 5 +++++ .../MockWrappedToken.sol:MockWrappedToken.log | 5 +++++ .../StdAssertions.sol:StdAssertions.log | 4 ++-- logs/storage/StdChains.sol:StdChains.log | 10 +++++----- logs/storage/StdCheats.sol:StdCheats.log | 4 ++-- logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- 12 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 logs/storage/GeneralConfig.sol:GeneralConfig.log create mode 100644 logs/storage/MockWrapToken.sol:MockWrapToken.log create mode 100644 logs/storage/MockWrappedToken.sol:MockWrappedToken.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index f749dd1d..f360ea8e 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -54,7 +54,7 @@ | Strings | 0.086 | 24.49 | | Token | 0.214 | 24.362 | | Transfer | 0.166 | 24.41 | -| TransparentUpgradeableProxy | 2.188 | 22.388 | +| TransparentUpgradeableProxy | 2.068 | 22.508 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 340d50a2..6370ed55 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8f188344..8c099a55 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 3fd0d5a8..8756115b 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/GeneralConfig.sol:GeneralConfig.log b/logs/storage/GeneralConfig.sol:GeneralConfig.log new file mode 100644 index 00000000..464273c8 --- /dev/null +++ b/logs/storage/GeneralConfig.sol:GeneralConfig.log @@ -0,0 +1,20 @@ +script/GeneralConfig.sol:GeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:stdstore (storage_slot: 3) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/GeneralConfig.sol:GeneralConfig:_envLabel (storage_slot: 10) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_envSender (storage_slot: 11) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfig.sol:GeneralConfig:_trezorSender (storage_slot: 12) (offset: 0) (type: address) (numberOfBytes: 20) +script/GeneralConfig.sol:GeneralConfig:_walletOption (storage_slot: 12) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_absolutePath (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 14) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractNameMap (storage_slot: 15) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAbsolutePathMap (storage_slot: 16) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAddrSet (storage_slot: 17) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractAddrMap (storage_slot: 18) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_contractTypeMap (storage_slot: 19) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 20) (offset: 0) (type: string) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_isForkModeEnabled (storage_slot: 21) (offset: 0) (type: bool) (numberOfBytes: 1) +script/GeneralConfig.sol:GeneralConfig:_networkDataMap (storage_slot: 22) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_networkMap (storage_slot: 23) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) +script/GeneralConfig.sol:GeneralConfig:_migrationConfig (storage_slot: 24) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log index 93db9889..a64374cd 100644 --- a/logs/storage/InitTest.sol:InitTest.log +++ b/logs/storage/InitTest.sol:InitTest.log @@ -1,6 +1,6 @@ test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 3328) -test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 112) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 113) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file +test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 4128) +test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 137) (offset: 0) (type: address) (numberOfBytes: 20) +test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 138) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockWrapToken.sol:MockWrapToken.log b/logs/storage/MockWrapToken.sol:MockWrapToken.log new file mode 100644 index 00000000..9aafaeef --- /dev/null +++ b/logs/storage/MockWrapToken.sol:MockWrapToken.log @@ -0,0 +1,5 @@ +src/mocks/token/MockWrapToken.sol:MockWrapToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/mocks/token/MockWrapToken.sol:MockWrapToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockWrapToken.sol:MockWrapToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockWrappedToken.sol:MockWrappedToken.log b/logs/storage/MockWrappedToken.sol:MockWrappedToken.log new file mode 100644 index 00000000..ed8fcc22 --- /dev/null +++ b/logs/storage/MockWrappedToken.sol:MockWrappedToken.log @@ -0,0 +1,5 @@ +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockWrappedToken.sol:MockWrappedToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 982df57d..842900a4 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index 624d7975..e38d8f5e 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index d02383a5..1fdff3d3 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 3e3afc09..372cbe11 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file From 40da15f0204661fc97e9e61d9b721e2ba2ba8280 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:20:54 +0700 Subject: [PATCH 33/73] build: skip test/ and script/ in CI --- .husky/pre-push | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-push b/.husky/pre-push index c50185c6..aadca39e 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -10,7 +10,7 @@ if [[ $output == *"No local changes to save"* ]]; then stashed=false fi -forge build --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log +forge build --skip test script --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log .husky/generate-layout.sh git add logs From c5677c22f7988472a918c7791d2e3f73924af1a3 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:24:02 +0700 Subject: [PATCH 34/73] build: fix skip test/ and script/ in CI --- .husky/pre-push | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-push b/.husky/pre-push index aadca39e..4cea0f2e 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -10,7 +10,7 @@ if [[ $output == *"No local changes to save"* ]]; then stashed=false fi -forge build --skip test script --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log +forge build --skip test/ script/ --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log .husky/generate-layout.sh git add logs From 01f004d41580336536053476b235b57f1ea2df96 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:28:17 +0700 Subject: [PATCH 35/73] chore: storage layout --- ...erInterface.sol:BridgeManagerInterface.log | 5 ----- .../GeneralConfig.sol:GeneralConfig.log | 20 ------------------- logs/storage/InitTest.sol:InitTest.log | 6 ------ .../MockWrapToken.sol:MockWrapToken.log | 5 ----- .../MockWrappedToken.sol:MockWrappedToken.log | 5 ----- logs/storage/Signers.sol:SignerUtils.log | 3 --- 6 files changed, 44 deletions(-) delete mode 100644 logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log delete mode 100644 logs/storage/GeneralConfig.sol:GeneralConfig.log delete mode 100644 logs/storage/InitTest.sol:InitTest.log delete mode 100644 logs/storage/MockWrapToken.sol:MockWrapToken.log delete mode 100644 logs/storage/MockWrappedToken.sol:MockWrappedToken.log delete mode 100644 logs/storage/Signers.sol:SignerUtils.log diff --git a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log deleted file mode 100644 index 65f53f69..00000000 --- a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log +++ /dev/null @@ -1,5 +0,0 @@ -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_contract (storage_slot: 9) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_signers (storage_slot: 10) (offset: 0) (type: struct StdCheatsSafe.Account[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/GeneralConfig.sol:GeneralConfig.log b/logs/storage/GeneralConfig.sol:GeneralConfig.log deleted file mode 100644 index 464273c8..00000000 --- a/logs/storage/GeneralConfig.sol:GeneralConfig.log +++ /dev/null @@ -1,20 +0,0 @@ -script/GeneralConfig.sol:GeneralConfig:_resolved (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -script/GeneralConfig.sol:GeneralConfig:_option (storage_slot: 1) (offset: 0) (type: struct IRuntimeConfig.Option) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_rawCommand (storage_slot: 2) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:stdstore (storage_slot: 3) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -script/GeneralConfig.sol:GeneralConfig:_envLabel (storage_slot: 10) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_envSender (storage_slot: 11) (offset: 0) (type: address) (numberOfBytes: 20) -script/GeneralConfig.sol:GeneralConfig:_trezorSender (storage_slot: 12) (offset: 0) (type: address) (numberOfBytes: 20) -script/GeneralConfig.sol:GeneralConfig:_walletOption (storage_slot: 12) (offset: 20) (type: enum IWalletConfig.WalletOption) (numberOfBytes: 1) -script/GeneralConfig.sol:GeneralConfig:_absolutePath (storage_slot: 13) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 14) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_contractNameMap (storage_slot: 15) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_contractAbsolutePathMap (storage_slot: 16) (offset: 0) (type: mapping(TContract => string)) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_contractAddrSet (storage_slot: 17) (offset: 0) (type: mapping(uint256 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_contractAddrMap (storage_slot: 18) (offset: 0) (type: mapping(uint256 => mapping(string => address))) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_contractTypeMap (storage_slot: 19) (offset: 0) (type: mapping(uint256 => mapping(address => TContract))) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_deploymentRoot (storage_slot: 20) (offset: 0) (type: string) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_isForkModeEnabled (storage_slot: 21) (offset: 0) (type: bool) (numberOfBytes: 1) -script/GeneralConfig.sol:GeneralConfig:_networkDataMap (storage_slot: 22) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_networkMap (storage_slot: 23) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) -script/GeneralConfig.sol:GeneralConfig:_migrationConfig (storage_slot: 24) (offset: 0) (type: bytes) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log deleted file mode 100644 index a64374cd..00000000 --- a/logs/storage/InitTest.sol:InitTest.log +++ /dev/null @@ -1,6 +0,0 @@ -test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 4128) -test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 137) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 138) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockWrapToken.sol:MockWrapToken.log b/logs/storage/MockWrapToken.sol:MockWrapToken.log deleted file mode 100644 index 9aafaeef..00000000 --- a/logs/storage/MockWrapToken.sol:MockWrapToken.log +++ /dev/null @@ -1,5 +0,0 @@ -src/mocks/token/MockWrapToken.sol:MockWrapToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/token/MockWrapToken.sol:MockWrapToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockWrappedToken.sol:MockWrappedToken.log b/logs/storage/MockWrappedToken.sol:MockWrappedToken.log deleted file mode 100644 index ed8fcc22..00000000 --- a/logs/storage/MockWrappedToken.sol:MockWrappedToken.log +++ /dev/null @@ -1,5 +0,0 @@ -src/mocks/token/MockWrappedToken.sol:MockWrappedToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrappedToken.sol:MockWrappedToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrappedToken.sol:MockWrappedToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/token/MockWrappedToken.sol:MockWrappedToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/token/MockWrappedToken.sol:MockWrappedToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Signers.sol:SignerUtils.log b/logs/storage/Signers.sol:SignerUtils.log deleted file mode 100644 index efa2af9d..00000000 --- a/logs/storage/Signers.sol:SignerUtils.log +++ /dev/null @@ -1,3 +0,0 @@ -test/utils/Signers.sol:SignerUtils:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/utils/Signers.sol:SignerUtils:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/utils/Signers.sol:SignerUtils:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file From 7da3c7a6227bbe87a686500587ef3046d50df2de Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:31:47 +0700 Subject: [PATCH 36/73] build: clean cache and recompile in CI pre-push --- .husky/pre-push | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.husky/pre-push b/.husky/pre-push index 4cea0f2e..3d9544c8 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -9,8 +9,7 @@ stashed=true if [[ $output == *"No local changes to save"* ]]; then stashed=false fi - -forge build --skip test/ script/ --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log +forge build --force --skip test/ script/ --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log .husky/generate-layout.sh git add logs From b8931374d9ab2029a1c8ec83ec3d96dbc3dbaee1 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:40:14 +0700 Subject: [PATCH 37/73] build: fix pre-push script --- .husky/pre-push | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/pre-push b/.husky/pre-push index 3d9544c8..c086a7c5 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -9,7 +9,7 @@ stashed=true if [[ $output == *"No local changes to save"* ]]; then stashed=false fi -forge build --force --skip test/ script/ --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log +forge build --force --skip test script --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log .husky/generate-layout.sh git add logs From 9c971d1b95081551d8e0028eab1027360a7d6570 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:41:07 +0700 Subject: [PATCH 38/73] chore: storage layout --- logs/contract-code-sizes.log | 2 -- logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- .../StdAssertions.sol:StdAssertions.log | 4 ++-- logs/storage/StdChains.sol:StdChains.log | 10 +++++----- logs/storage/StdCheats.sol:StdCheats.log | 4 ++-- logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- .../storage/StdInvariant.sol:StdInvariant.log | 9 --------- logs/storage/test.sol:Test.log | 19 ------------------- 10 files changed, 13 insertions(+), 43 deletions(-) delete mode 100644 logs/storage/StdInvariant.sol:StdInvariant.log delete mode 100644 logs/storage/test.sol:Test.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index f360ea8e..515c00b9 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -21,7 +21,6 @@ | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | | JSONParserLib | 0.086 | 24.49 | -| LibArrayUtils | 0.086 | 24.49 | | LibErrorHandler | 0.086 | 24.49 | | LibProxy | 0.086 | 24.49 | | LibSharedAddress | 0.086 | 24.49 | @@ -59,7 +58,6 @@ | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | | safeconsole | 0.086 | 24.49 | -| stdError | 0.591 | 23.985 | | stdJson | 0.086 | 24.49 | | stdMath | 0.086 | 24.49 | | stdStorage | 0.086 | 24.49 | diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 6370ed55..340d50a2 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8c099a55..8f188344 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 8756115b..3fd0d5a8 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 842900a4..982df57d 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index e38d8f5e..624d7975 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index 1fdff3d3..d02383a5 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 372cbe11..3e3afc09 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdInvariant.sol:StdInvariant.log b/logs/storage/StdInvariant.sol:StdInvariant.log deleted file mode 100644 index 68417b13..00000000 --- a/logs/storage/StdInvariant.sol:StdInvariant.log +++ /dev/null @@ -1,9 +0,0 @@ -lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedContracts (storage_slot: 0) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedSenders (storage_slot: 1) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedContracts (storage_slot: 2) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedSenders (storage_slot: 3) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedArtifacts (storage_slot: 4) (offset: 0) (type: string[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedArtifacts (storage_slot: 5) (offset: 0) (type: string[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedArtifactSelectors (storage_slot: 6) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedSelectors (storage_slot: 7) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) -lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedInterfaces (storage_slot: 8) (offset: 0) (type: struct StdInvariant.FuzzInterface[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/test.sol:Test.log b/logs/storage/test.sol:Test.log deleted file mode 100644 index 3f20a76f..00000000 --- a/logs/storage/test.sol:Test.log +++ /dev/null @@ -1,19 +0,0 @@ -lib/forge-std/src/Test.sol:Test:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -lib/forge-std/src/Test.sol:Test:IS_TEST (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Test.sol:Test:_failed (storage_slot: 7) (offset: 1) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Test.sol:Test:stdChainsInitialized (storage_slot: 7) (offset: 2) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Test.sol:Test:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Test.sol:Test:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/Test.sol:Test:stdstore (storage_slot: 12) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -lib/forge-std/src/Test.sol:Test:_excludedContracts (storage_slot: 19) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_excludedSenders (storage_slot: 20) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedContracts (storage_slot: 21) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedSenders (storage_slot: 22) (offset: 0) (type: address[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_excludedArtifacts (storage_slot: 23) (offset: 0) (type: string[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedArtifacts (storage_slot: 24) (offset: 0) (type: string[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedArtifactSelectors (storage_slot: 25) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedSelectors (storage_slot: 26) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) -lib/forge-std/src/Test.sol:Test:_targetedInterfaces (storage_slot: 27) (offset: 0) (type: struct StdInvariant.FuzzInterface[]) (numberOfBytes: 32) \ No newline at end of file From 30c19008a4de0f0235991c850d6c44eb183a3048 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:43:53 +0700 Subject: [PATCH 39/73] build: remove --force in pre-push ci --- .husky/pre-push | 2 +- logs/storage/Initializable.sol:Initializable 2.log | 2 ++ ...chainBridgeManager.sol:MainchainBridgeManager 2.log | 4 ++++ .../MinimumWithdrawal.sol:MinimumWithdrawal 2.log | 2 ++ logs/storage/MockBridge.sol:MockBridge 2.log | 2 ++ .../MockBridgeReward.sol:MockBridgeReward 2.log | 2 ++ logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log | 1 + .../MockBridgeTracking.sol:MockBridgeTracking 2.log | 1 + logs/storage/MockERC20.sol:MockERC20 2.log | 10 ++++++++++ logs/storage/NetworkConfig.sol:NetworkConfig 2.log | 4 ++++ logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log | 6 ++++++ logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log | 1 + logs/storage/Script.sol:Script 2.log | 8 ++++++++ logs/storage/StdChains.sol:StdChains 2.log | 5 +++++ logs/storage/StdCheats.sol:StdCheats 2.log | 2 ++ logs/storage/StdCheats.sol:StdCheatsSafe 2.log | 1 + logs/storage/test.sol:DSTest 2.log | 2 ++ 17 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 logs/storage/Initializable.sol:Initializable 2.log create mode 100644 logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log create mode 100644 logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log create mode 100644 logs/storage/MockBridge.sol:MockBridge 2.log create mode 100644 logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log create mode 100644 logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log create mode 100644 logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log create mode 100644 logs/storage/MockERC20.sol:MockERC20 2.log create mode 100644 logs/storage/NetworkConfig.sol:NetworkConfig 2.log create mode 100644 logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log create mode 100644 logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log create mode 100644 logs/storage/Script.sol:Script 2.log create mode 100644 logs/storage/StdChains.sol:StdChains 2.log create mode 100644 logs/storage/StdCheats.sol:StdCheats 2.log create mode 100644 logs/storage/StdCheats.sol:StdCheatsSafe 2.log create mode 100644 logs/storage/test.sol:DSTest 2.log diff --git a/.husky/pre-push b/.husky/pre-push index c086a7c5..e652225a 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -9,7 +9,7 @@ stashed=true if [[ $output == *"No local changes to save"* ]]; then stashed=false fi -forge build --force --skip test script --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log +forge build --skip test script --sizes 2>&1 | sed -n '/Contract/,$p' > logs/contract-code-sizes.log .husky/generate-layout.sh git add logs diff --git a/logs/storage/Initializable.sol:Initializable 2.log b/logs/storage/Initializable.sol:Initializable 2.log new file mode 100644 index 00000000..aa48e2eb --- /dev/null +++ b/logs/storage/Initializable.sol:Initializable 2.log @@ -0,0 +1,2 @@ +lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol:Initializable:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) +lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol:Initializable:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log b/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log new file mode 100644 index 00000000..0de39d59 --- /dev/null +++ b/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log @@ -0,0 +1,4 @@ +src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) +src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) +src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) +src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:_targetOptionsMap (storage_slot: 3) (offset: 0) (type: mapping(enum GlobalProposal.TargetOption => address)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log b/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log new file mode 100644 index 00000000..b385ba21 --- /dev/null +++ b/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log @@ -0,0 +1,2 @@ +src/extensions/MinimumWithdrawal.sol:MinimumWithdrawal:minimumThreshold (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/extensions/MinimumWithdrawal.sol:MinimumWithdrawal:______gap (storage_slot: 1) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/MockBridge.sol:MockBridge 2.log b/logs/storage/MockBridge.sol:MockBridge 2.log new file mode 100644 index 00000000..eef64e17 --- /dev/null +++ b/logs/storage/MockBridge.sol:MockBridge 2.log @@ -0,0 +1,2 @@ +src/mocks/MockBridge.sol:MockBridge:bridgeOperatorAddedBlock (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/MockBridge.sol:MockBridge:bridgeOperators (storage_slot: 1) (offset: 0) (type: address[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log b/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log new file mode 100644 index 00000000..0bab0743 --- /dev/null +++ b/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log @@ -0,0 +1,2 @@ +src/mocks/ronin/MockBridgeReward.sol:MockBridgeReward:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/mocks/ronin/MockBridgeReward.sol:MockBridgeReward:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log b/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log new file mode 100644 index 00000000..7cb6ad3a --- /dev/null +++ b/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log @@ -0,0 +1 @@ +test/mocks/MockBridgeSlash.sol:MockBridgeSlash:_slashMap (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log b/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log new file mode 100644 index 00000000..24c45928 --- /dev/null +++ b/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log @@ -0,0 +1 @@ +test/mocks/MockBridgeTracking.sol:MockBridgeTracking:_tracks (storage_slot: 0) (offset: 0) (type: mapping(uint256 => struct MockBridgeTracking.PeriodTracking)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockERC20.sol:MockERC20 2.log b/logs/storage/MockERC20.sol:MockERC20 2.log new file mode 100644 index 00000000..fa91f8fc --- /dev/null +++ b/logs/storage/MockERC20.sol:MockERC20 2.log @@ -0,0 +1,10 @@ +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:totalSupply (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:balanceOf (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:allowance (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_CHAIN_ID (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_DOMAIN_SEPARATOR (storage_slot: 7) (offset: 0) (type: bytes32) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:nonces (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:initialized (storage_slot: 9) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/NetworkConfig.sol:NetworkConfig 2.log b/logs/storage/NetworkConfig.sol:NetworkConfig 2.log new file mode 100644 index 00000000..17280194 --- /dev/null +++ b/logs/storage/NetworkConfig.sol:NetworkConfig 2.log @@ -0,0 +1,4 @@ +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_deploymentRoot (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_isForkModeEnabled (storage_slot: 1) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 2) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) +lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 3) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log b/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log new file mode 100644 index 00000000..137fb473 --- /dev/null +++ b/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log @@ -0,0 +1,6 @@ +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_initialized (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_initializing (storage_slot: 2) (offset: 1) (type: bool) (numberOfBytes: 1) +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:target (storage_slot: 2) (offset: 2) (type: contract IPauseTarget) (numberOfBytes: 20) +src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:emergency (storage_slot: 2) (offset: 22) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log b/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log new file mode 100644 index 00000000..83c22cc2 --- /dev/null +++ b/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log @@ -0,0 +1 @@ +lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/Script.sol:Script 2.log b/logs/storage/Script.sol:Script 2.log new file mode 100644 index 00000000..12e34d2b --- /dev/null +++ b/logs/storage/Script.sol:Script 2.log @@ -0,0 +1,8 @@ +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains 2.log b/logs/storage/StdChains.sol:StdChains 2.log new file mode 100644 index 00000000..e38d8f5e --- /dev/null +++ b/logs/storage/StdChains.sol:StdChains 2.log @@ -0,0 +1,5 @@ +lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats 2.log b/logs/storage/StdCheats.sol:StdCheats 2.log new file mode 100644 index 00000000..1fdff3d3 --- /dev/null +++ b/logs/storage/StdCheats.sol:StdCheats 2.log @@ -0,0 +1,2 @@ +lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe 2.log b/logs/storage/StdCheats.sol:StdCheatsSafe 2.log new file mode 100644 index 00000000..372cbe11 --- /dev/null +++ b/logs/storage/StdCheats.sol:StdCheatsSafe 2.log @@ -0,0 +1 @@ +lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/test.sol:DSTest 2.log b/logs/storage/test.sol:DSTest 2.log new file mode 100644 index 00000000..2f26342f --- /dev/null +++ b/logs/storage/test.sol:DSTest 2.log @@ -0,0 +1,2 @@ +lib/forge-std/lib/ds-test/src/test.sol:DSTest:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/lib/ds-test/src/test.sol:DSTest:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file From d7e9152f31cceb11bb9020ff0b4469f4e6ac6e18 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 13:46:44 +0700 Subject: [PATCH 40/73] chore: storage layout --- logs/contract-code-sizes.log | 2 ++ logs/storage/Base.sol:CommonBase.log | 2 +- logs/storage/Base.sol:ScriptBase.log | 2 +- logs/storage/Base.sol:TestBase.log | 2 +- .../Initializable.sol:Initializable 2.log | 2 -- ...geManager.sol:MainchainBridgeManager 2.log | 4 ---- ...imumWithdrawal.sol:MinimumWithdrawal 2.log | 2 -- logs/storage/MockBridge.sol:MockBridge 2.log | 2 -- ...ockBridgeReward.sol:MockBridgeReward 2.log | 2 -- .../MockBridgeSlash.sol:MockBridgeSlash 2.log | 1 - ...ridgeTracking.sol:MockBridgeTracking 2.log | 1 - logs/storage/MockERC20.sol:MockERC20 2.log | 10 ---------- .../NetworkConfig.sol:NetworkConfig 2.log | 4 ---- .../PauseEnforcer.sol:PauseEnforcer 2.log | 6 ------ logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log | 1 - logs/storage/Script.sol:Script 2.log | 8 -------- .../StdAssertions.sol:StdAssertions.log | 4 ++-- logs/storage/StdChains.sol:StdChains 2.log | 5 ----- logs/storage/StdChains.sol:StdChains.log | 10 +++++----- logs/storage/StdCheats.sol:StdCheats 2.log | 2 -- logs/storage/StdCheats.sol:StdCheats.log | 4 ++-- .../storage/StdCheats.sol:StdCheatsSafe 2.log | 1 - logs/storage/StdCheats.sol:StdCheatsSafe.log | 2 +- .../storage/StdInvariant.sol:StdInvariant.log | 9 +++++++++ logs/storage/test.sol:DSTest 2.log | 2 -- logs/storage/test.sol:Test.log | 19 +++++++++++++++++++ 26 files changed, 43 insertions(+), 66 deletions(-) delete mode 100644 logs/storage/Initializable.sol:Initializable 2.log delete mode 100644 logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log delete mode 100644 logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log delete mode 100644 logs/storage/MockBridge.sol:MockBridge 2.log delete mode 100644 logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log delete mode 100644 logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log delete mode 100644 logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log delete mode 100644 logs/storage/MockERC20.sol:MockERC20 2.log delete mode 100644 logs/storage/NetworkConfig.sol:NetworkConfig 2.log delete mode 100644 logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log delete mode 100644 logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log delete mode 100644 logs/storage/Script.sol:Script 2.log delete mode 100644 logs/storage/StdChains.sol:StdChains 2.log delete mode 100644 logs/storage/StdCheats.sol:StdCheats 2.log delete mode 100644 logs/storage/StdCheats.sol:StdCheatsSafe 2.log create mode 100644 logs/storage/StdInvariant.sol:StdInvariant.log delete mode 100644 logs/storage/test.sol:DSTest 2.log create mode 100644 logs/storage/test.sol:Test.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 515c00b9..f360ea8e 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -21,6 +21,7 @@ | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | | JSONParserLib | 0.086 | 24.49 | +| LibArrayUtils | 0.086 | 24.49 | | LibErrorHandler | 0.086 | 24.49 | | LibProxy | 0.086 | 24.49 | | LibSharedAddress | 0.086 | 24.49 | @@ -58,6 +59,7 @@ | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | | safeconsole | 0.086 | 24.49 | +| stdError | 0.591 | 23.985 | | stdJson | 0.086 | 24.49 | | stdMath | 0.086 | 24.49 | | stdStorage | 0.086 | 24.49 | diff --git a/logs/storage/Base.sol:CommonBase.log b/logs/storage/Base.sol:CommonBase.log index 340d50a2..6370ed55 100644 --- a/logs/storage/Base.sol:CommonBase.log +++ b/logs/storage/Base.sol:CommonBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:CommonBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:ScriptBase.log b/logs/storage/Base.sol:ScriptBase.log index 8f188344..8c099a55 100644 --- a/logs/storage/Base.sol:ScriptBase.log +++ b/logs/storage/Base.sol:ScriptBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:ScriptBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Base.sol:TestBase.log b/logs/storage/Base.sol:TestBase.log index 3fd0d5a8..8756115b 100644 --- a/logs/storage/Base.sol:TestBase.log +++ b/logs/storage/Base.sol:TestBase.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/Base.sol:TestBase:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/Initializable.sol:Initializable 2.log b/logs/storage/Initializable.sol:Initializable 2.log deleted file mode 100644 index aa48e2eb..00000000 --- a/logs/storage/Initializable.sol:Initializable 2.log +++ /dev/null @@ -1,2 +0,0 @@ -lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol:Initializable:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol:Initializable:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log b/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log deleted file mode 100644 index 0de39d59..00000000 --- a/logs/storage/MainchainBridgeManager.sol:MainchainBridgeManager 2.log +++ /dev/null @@ -1,4 +0,0 @@ -src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:round (storage_slot: 0) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) -src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:vote (storage_slot: 1) (offset: 0) (type: mapping(uint256 => mapping(uint256 => struct CoreGovernance.ProposalVote))) (numberOfBytes: 32) -src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:_proposalExpiryDuration (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mainchain/MainchainBridgeManager.sol:MainchainBridgeManager:_targetOptionsMap (storage_slot: 3) (offset: 0) (type: mapping(enum GlobalProposal.TargetOption => address)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log b/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log deleted file mode 100644 index b385ba21..00000000 --- a/logs/storage/MinimumWithdrawal.sol:MinimumWithdrawal 2.log +++ /dev/null @@ -1,2 +0,0 @@ -src/extensions/MinimumWithdrawal.sol:MinimumWithdrawal:minimumThreshold (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/extensions/MinimumWithdrawal.sol:MinimumWithdrawal:______gap (storage_slot: 1) (offset: 0) (type: uint256[50]) (numberOfBytes: 1600) \ No newline at end of file diff --git a/logs/storage/MockBridge.sol:MockBridge 2.log b/logs/storage/MockBridge.sol:MockBridge 2.log deleted file mode 100644 index eef64e17..00000000 --- a/logs/storage/MockBridge.sol:MockBridge 2.log +++ /dev/null @@ -1,2 +0,0 @@ -src/mocks/MockBridge.sol:MockBridge:bridgeOperatorAddedBlock (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/MockBridge.sol:MockBridge:bridgeOperators (storage_slot: 1) (offset: 0) (type: address[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log b/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log deleted file mode 100644 index 0bab0743..00000000 --- a/logs/storage/MockBridgeReward.sol:MockBridgeReward 2.log +++ /dev/null @@ -1,2 +0,0 @@ -src/mocks/ronin/MockBridgeReward.sol:MockBridgeReward:_initialized (storage_slot: 0) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/ronin/MockBridgeReward.sol:MockBridgeReward:_initializing (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log b/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log deleted file mode 100644 index 7cb6ad3a..00000000 --- a/logs/storage/MockBridgeSlash.sol:MockBridgeSlash 2.log +++ /dev/null @@ -1 +0,0 @@ -test/mocks/MockBridgeSlash.sol:MockBridgeSlash:_slashMap (storage_slot: 0) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log b/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log deleted file mode 100644 index 24c45928..00000000 --- a/logs/storage/MockBridgeTracking.sol:MockBridgeTracking 2.log +++ /dev/null @@ -1 +0,0 @@ -test/mocks/MockBridgeTracking.sol:MockBridgeTracking:_tracks (storage_slot: 0) (offset: 0) (type: mapping(uint256 => struct MockBridgeTracking.PeriodTracking)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockERC20.sol:MockERC20 2.log b/logs/storage/MockERC20.sol:MockERC20 2.log deleted file mode 100644 index fa91f8fc..00000000 --- a/logs/storage/MockERC20.sol:MockERC20 2.log +++ /dev/null @@ -1,10 +0,0 @@ -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:totalSupply (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:balanceOf (storage_slot: 4) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:allowance (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_CHAIN_ID (storage_slot: 6) (offset: 0) (type: uint256) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:INITIAL_DOMAIN_SEPARATOR (storage_slot: 7) (offset: 0) (type: bytes32) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:nonces (storage_slot: 8) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC20.sol:MockERC20:initialized (storage_slot: 9) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/NetworkConfig.sol:NetworkConfig 2.log b/logs/storage/NetworkConfig.sol:NetworkConfig 2.log deleted file mode 100644 index 17280194..00000000 --- a/logs/storage/NetworkConfig.sol:NetworkConfig 2.log +++ /dev/null @@ -1,4 +0,0 @@ -lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_deploymentRoot (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_isForkModeEnabled (storage_slot: 1) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkDataMap (storage_slot: 2) (offset: 0) (type: mapping(TNetwork => struct INetworkConfig.NetworkData)) (numberOfBytes: 32) -lib/foundry-deployment-kit/script/configs/NetworkConfig.sol:NetworkConfig:_networkMap (storage_slot: 3) (offset: 0) (type: mapping(uint256 => TNetwork)) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log b/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log deleted file mode 100644 index 137fb473..00000000 --- a/logs/storage/PauseEnforcer.sol:PauseEnforcer 2.log +++ /dev/null @@ -1,6 +0,0 @@ -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_roles (storage_slot: 0) (offset: 0) (type: mapping(bytes32 => struct AccessControl.RoleData)) (numberOfBytes: 32) -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_roleMembers (storage_slot: 1) (offset: 0) (type: mapping(bytes32 => struct EnumerableSet.AddressSet)) (numberOfBytes: 32) -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_initialized (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:_initializing (storage_slot: 2) (offset: 1) (type: bool) (numberOfBytes: 1) -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:target (storage_slot: 2) (offset: 2) (type: contract IPauseTarget) (numberOfBytes: 20) -src/ronin/gateway/PauseEnforcer.sol:PauseEnforcer:emergency (storage_slot: 2) (offset: 22) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log b/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log deleted file mode 100644 index 83c22cc2..00000000 --- a/logs/storage/ProxyAdmin.sol:ProxyAdmin 2.log +++ /dev/null @@ -1 +0,0 @@ -lib/foundry-deployment-kit/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin:_owner (storage_slot: 0) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/Script.sol:Script 2.log b/logs/storage/Script.sol:Script 2.log deleted file mode 100644 index 12e34d2b..00000000 --- a/logs/storage/Script.sol:Script 2.log +++ /dev/null @@ -1,8 +0,0 @@ -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/Script.sol:Script:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdAssertions.sol:StdAssertions.log b/logs/storage/StdAssertions.sol:StdAssertions.log index 982df57d..842900a4 100644 --- a/logs/storage/StdAssertions.sol:StdAssertions.log +++ b/logs/storage/StdAssertions.sol:StdAssertions.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdAssertions.sol:StdAssertions:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdAssertions.sol:StdAssertions:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains 2.log b/logs/storage/StdChains.sol:StdChains 2.log deleted file mode 100644 index e38d8f5e..00000000 --- a/logs/storage/StdChains.sol:StdChains 2.log +++ /dev/null @@ -1,5 +0,0 @@ -lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdChains.sol:StdChains.log b/logs/storage/StdChains.sol:StdChains.log index 624d7975..e38d8f5e 100644 --- a/logs/storage/StdChains.sol:StdChains.log +++ b/logs/storage/StdChains.sol:StdChains.log @@ -1,5 +1,5 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdChains.sol:StdChains:stdChainsInitialized (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdChains.sol:StdChains:chains (storage_slot: 1) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:defaultRpcUrls (storage_slot: 2) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:idToAlias (storage_slot: 3) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/forge-std/src/StdChains.sol:StdChains:fallbackToDefaultRpcUrls (storage_slot: 4) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats 2.log b/logs/storage/StdCheats.sol:StdCheats 2.log deleted file mode 100644 index 1fdff3d3..00000000 --- a/logs/storage/StdCheats.sol:StdCheats 2.log +++ /dev/null @@ -1,2 +0,0 @@ -lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheats.log b/logs/storage/StdCheats.sol:StdCheats.log index d02383a5..1fdff3d3 100644 --- a/logs/storage/StdCheats.sol:StdCheats.log +++ b/logs/storage/StdCheats.sol:StdCheats.log @@ -1,2 +1,2 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheats:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/StdCheats.sol:StdCheats:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe 2.log b/logs/storage/StdCheats.sol:StdCheatsSafe 2.log deleted file mode 100644 index 372cbe11..00000000 --- a/logs/storage/StdCheats.sol:StdCheatsSafe 2.log +++ /dev/null @@ -1 +0,0 @@ -lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdCheats.sol:StdCheatsSafe.log b/logs/storage/StdCheats.sol:StdCheatsSafe.log index 3e3afc09..372cbe11 100644 --- a/logs/storage/StdCheats.sol:StdCheatsSafe.log +++ b/logs/storage/StdCheats.sol:StdCheatsSafe.log @@ -1 +1 @@ -lib/foundry-deployment-kit/lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +lib/forge-std/src/StdCheats.sol:StdCheatsSafe:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/StdInvariant.sol:StdInvariant.log b/logs/storage/StdInvariant.sol:StdInvariant.log new file mode 100644 index 00000000..68417b13 --- /dev/null +++ b/logs/storage/StdInvariant.sol:StdInvariant.log @@ -0,0 +1,9 @@ +lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedContracts (storage_slot: 0) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedSenders (storage_slot: 1) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedContracts (storage_slot: 2) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedSenders (storage_slot: 3) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_excludedArtifacts (storage_slot: 4) (offset: 0) (type: string[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedArtifacts (storage_slot: 5) (offset: 0) (type: string[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedArtifactSelectors (storage_slot: 6) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedSelectors (storage_slot: 7) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) +lib/forge-std/src/StdInvariant.sol:StdInvariant:_targetedInterfaces (storage_slot: 8) (offset: 0) (type: struct StdInvariant.FuzzInterface[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/test.sol:DSTest 2.log b/logs/storage/test.sol:DSTest 2.log deleted file mode 100644 index 2f26342f..00000000 --- a/logs/storage/test.sol:DSTest 2.log +++ /dev/null @@ -1,2 +0,0 @@ -lib/forge-std/lib/ds-test/src/test.sol:DSTest:IS_TEST (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -lib/forge-std/lib/ds-test/src/test.sol:DSTest:_failed (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) \ No newline at end of file diff --git a/logs/storage/test.sol:Test.log b/logs/storage/test.sol:Test.log new file mode 100644 index 00000000..3f20a76f --- /dev/null +++ b/logs/storage/test.sol:Test.log @@ -0,0 +1,19 @@ +lib/forge-std/src/Test.sol:Test:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/forge-std/src/Test.sol:Test:IS_TEST (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/Test.sol:Test:_failed (storage_slot: 7) (offset: 1) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/Test.sol:Test:stdChainsInitialized (storage_slot: 7) (offset: 2) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/Test.sol:Test:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/Test.sol:Test:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +lib/forge-std/src/Test.sol:Test:stdstore (storage_slot: 12) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +lib/forge-std/src/Test.sol:Test:_excludedContracts (storage_slot: 19) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_excludedSenders (storage_slot: 20) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedContracts (storage_slot: 21) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedSenders (storage_slot: 22) (offset: 0) (type: address[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_excludedArtifacts (storage_slot: 23) (offset: 0) (type: string[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedArtifacts (storage_slot: 24) (offset: 0) (type: string[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedArtifactSelectors (storage_slot: 25) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedSelectors (storage_slot: 26) (offset: 0) (type: struct StdInvariant.FuzzSelector[]) (numberOfBytes: 32) +lib/forge-std/src/Test.sol:Test:_targetedInterfaces (storage_slot: 27) (offset: 0) (type: struct StdInvariant.FuzzInterface[]) (numberOfBytes: 32) \ No newline at end of file From b5fdb4c2c703c63d0d25213f769d3836b0cf6376 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 15:50:56 +0700 Subject: [PATCH 41/73] chore: storage layout --- logs/contract-code-sizes.log | 36 +++++++++---------- ...erInterface.sol:BridgeManagerInterface.log | 5 --- logs/storage/InitTest.sol:InitTest.log | 6 ---- .../MockWrapToken.sol:MockWrapToken.log | 5 --- logs/storage/Signers.sol:SignerUtils.log | 3 -- 5 files changed, 18 insertions(+), 37 deletions(-) delete mode 100644 logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log delete mode 100644 logs/storage/InitTest.sol:InitTest.log delete mode 100644 logs/storage/MockWrapToken.sol:MockWrapToken.log delete mode 100644 logs/storage/Signers.sol:SignerUtils.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 0477f4cd..9bbea1e6 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -4,7 +4,7 @@ | AddressArrayUtils | 0.086 | 24.49 | | ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | -| BaseGeneralConfig | 12.892 | 11.684 | +| BaseGeneralConfig | 20.129 | 4.447 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.032 | 18.544 | | BridgeSlash | 5.639 | 18.937 | @@ -15,7 +15,8 @@ | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | -| GeneralConfigExtended | 13.451 | 11.125 | +| GeneralConfig | 20.129 | 4.447 | +| GeneralConfigExtended | 20.351 | 4.225 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | @@ -30,26 +31,26 @@ | MainchainBridgeManager | 19.361 | 5.215 | | MainchainGatewayV3 | 18.189 | 6.387 | | Math | 0.086 | 24.49 | -| MockBridge | 1.303 | 23.273 | -| MockBridgeManager | 1.247 | 23.329 | -| MockBridgeReward | 6.77 | 17.806 | -| MockBridgeSlash | 1.447 | 23.129 | -| MockBridgeTracking | 1.969 | 22.607 | -| MockERC20 | 3.687 | 20.889 | -| MockERC721 | 3.825 | 20.751 | -| MockGatewayForTracking | 1.662 | 22.914 | -| MockRoninBridgeManager | 24.579 | -0.003 | -| MockRoninGatewayV3Extended | 20.038 | 4.538 | -| MockTUint256Slot | 2.729 | 21.847 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.15 | 23.426 | +| MockBridge | 1.293 | 23.283 | +| MockBridgeManager | 1.249 | 23.327 | +| MockBridgeReward | 6.771 | 17.805 | +| MockBridgeSlash | 1.388 | 23.188 | +| MockBridgeTracking | 1.897 | 22.679 | +| MockERC20 | 2.442 | 22.134 | +| MockERC721 | 3.827 | 20.749 | +| MockGatewayForTracking | 1.616 | 22.96 | +| MockRoninBridgeManager | 24.601 | -0.025 | +| MockRoninGatewayV3Extended | 20.048 | 4.528 | +| MockTUint256Slot | 2.73 | 21.846 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.115 | 23.461 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | | MockWrappedToken | 1.978 | 22.598 | | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | -| ProxyAdmin | 1.683 | 22.893 | -| RoninBridgeManager | 24.579 | -0.003 | -| RoninGatewayV3 | 19.755 | 4.821 | +| ProxyAdmin | 1.684 | 22.892 | +| RoninBridgeManager | 24.601 | -0.025 | +| RoninGatewayV3 | 19.765 | 4.811 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | | Strings | 0.086 | 24.49 | @@ -57,7 +58,6 @@ | Transfer | 0.166 | 24.41 | | TransparentUpgradeableProxy | 2.068 | 22.508 | | TransparentUpgradeableProxyV2 | 2.361 | 22.215 | -| Utils | 0.063 | 24.513 | | console | 0.086 | 24.49 | | console2 | 0.086 | 24.49 | | safeconsole | 0.086 | 24.49 | diff --git a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log b/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log deleted file mode 100644 index 65f53f69..00000000 --- a/logs/storage/BridgeManagerInterface.sol:BridgeManagerInterface.log +++ /dev/null @@ -1,5 +0,0 @@ -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_contract (storage_slot: 9) (offset: 0) (type: contract RoninBridgeManager) (numberOfBytes: 20) -test/bridge/integration/bridge-manager/BridgeManagerInterface.sol:BridgeManagerInterface:_signers (storage_slot: 10) (offset: 0) (type: struct StdCheatsSafe.Account[]) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/InitTest.sol:InitTest.log b/logs/storage/InitTest.sol:InitTest.log deleted file mode 100644 index a64374cd..00000000 --- a/logs/storage/InitTest.sol:InitTest.log +++ /dev/null @@ -1,6 +0,0 @@ -test/init-test/InitTest.sol:InitTest:_failed (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/init-test/InitTest.sol:InitTest:gasMeteringOff (storage_slot: 0) (offset: 1) (type: bool) (numberOfBytes: 1) -test/init-test/InitTest.sol:InitTest:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/init-test/InitTest.sol:InitTest:_inputArguments (storage_slot: 8) (offset: 0) (type: struct InitTestInput) (numberOfBytes: 4128) -test/init-test/InitTest.sol:InitTest:_deployer (storage_slot: 137) (offset: 0) (type: address) (numberOfBytes: 20) -test/init-test/InitTest.sol:InitTest:_proxyAdmin (storage_slot: 138) (offset: 0) (type: address) (numberOfBytes: 20) \ No newline at end of file diff --git a/logs/storage/MockWrapToken.sol:MockWrapToken.log b/logs/storage/MockWrapToken.sol:MockWrapToken.log deleted file mode 100644 index 9aafaeef..00000000 --- a/logs/storage/MockWrapToken.sol:MockWrapToken.log +++ /dev/null @@ -1,5 +0,0 @@ -src/mocks/token/MockWrapToken.sol:MockWrapToken:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:decimals (storage_slot: 2) (offset: 0) (type: uint8) (numberOfBytes: 1) -src/mocks/token/MockWrapToken.sol:MockWrapToken:balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -src/mocks/token/MockWrapToken.sol:MockWrapToken:allowance (storage_slot: 4) (offset: 0) (type: mapping(address => mapping(address => uint256))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/Signers.sol:SignerUtils.log b/logs/storage/Signers.sol:SignerUtils.log deleted file mode 100644 index efa2af9d..00000000 --- a/logs/storage/Signers.sol:SignerUtils.log +++ /dev/null @@ -1,3 +0,0 @@ -test/utils/Signers.sol:SignerUtils:gasMeteringOff (storage_slot: 0) (offset: 0) (type: bool) (numberOfBytes: 1) -test/utils/Signers.sol:SignerUtils:stdstore (storage_slot: 1) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) -test/utils/Signers.sol:SignerUtils:_accountNonce (storage_slot: 8) (offset: 0) (type: uint256) (numberOfBytes: 32) \ No newline at end of file From 0de12b4e21c0086742521c3ff095d37b43dd55ca Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 18 Jan 2024 16:05:37 +0700 Subject: [PATCH 42/73] script(GeneralConfig): fix mapping contract name --- script/GeneralConfig.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index 00ba0cfc..33df668d 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -48,8 +48,8 @@ contract GeneralConfig is BaseGeneralConfig, Utils { _mapContractName(Contract.MainchainGatewayV3); _mapContractName(Contract.MainchainBridgeManager); - _contractNameMap[Contract.WETH.key()] = "MockWrapToken"; - _contractNameMap[Contract.WRON.key()] = "MockWrapToken"; + _contractNameMap[Contract.WETH.key()] = "MockWrappedToken"; + _contractNameMap[Contract.WRON.key()] = "MockWrappedToken"; _contractNameMap[Contract.AXS.key()] = "MockERC20"; _contractNameMap[Contract.SLP.key()] = "MockERC20"; _contractNameMap[Contract.USDC.key()] = "MockERC20"; From 381c48f903c8c6189e8fbaad8be055ec65a77c59 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 19 Jan 2024 13:43:43 +0700 Subject: [PATCH 43/73] test(RoninBridgeManager): add test cast vote for adding bridge operators --- foundry.toml | 1 + script/Migration.s.sol | 12 +- script/interfaces/ISharedArgument.sol | 1 + script/libraries/LibArray.sol | 173 ++++++++++++++++++ script/utils/Utils.sol | 5 + test/bridge/integration/BaseIntegration.t.sol | 6 + ...oteBridgeOperator.RoninBridgeManager.t.sol | 66 +++++++ test/helpers/BridgeAdminInterface.t.sol | 135 ++++++++++++++ 8 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 script/libraries/LibArray.sol create mode 100644 test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol create mode 100644 test/helpers/BridgeAdminInterface.t.sol diff --git a/foundry.toml b/foundry.toml index afeff1aa..0d09684e 100644 --- a/foundry.toml +++ b/foundry.toml @@ -3,6 +3,7 @@ src = 'src' out = 'out' optimizer = true optimizer_runs = 200 +ffi = true libs = [ 'lib', diff --git a/script/Migration.s.sol b/script/Migration.s.sol index fed07af8..a2cd2b41 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -8,9 +8,9 @@ import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; import { Network } from "./utils/Network.sol"; import { Utils } from "./utils/Utils.sol"; import { Contract } from "./utils/Contract.sol"; - import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { LibArray } from "./libraries/LibArray.sol"; contract Migration is BaseMigration, Utils { ISharedArgument public constant config = ISharedArgument(address(CONFIG)); @@ -33,9 +33,11 @@ contract Migration is BaseMigration, Utils { uint256[] memory operatorPKs = new uint256[](num); uint256[] memory governorPKs = new uint256[](num); uint96[] memory voteWeights = new uint96[](num); + for (uint256 i; i < num; i++) { (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); + operatorAddrs[i] = addrOperator; governorAddrs[i] = addrGovernor; operatorPKs[i] = pkOperator; @@ -43,6 +45,9 @@ contract Migration is BaseMigration, Utils { voteWeights[i] = 100; } + LibArray.inlineSortByValue(operatorPKs, LibArray.toUint256s(operatorAddrs)); + LibArray.inlineSortByValue(governorPKs, LibArray.toUint256s(governorAddrs)); + address governanceAdmin = makeAddr("governance-admin"); address validatorSetContract = makeAddr("validator-set-contract"); Token.Standard[] memory standards = new Token.Standard[](1); @@ -65,6 +70,7 @@ contract Migration is BaseMigration, Utils { // test param.test.proxyAdmin = makeAddr("proxy-admin"); + param.test.roninChainId = 0; param.test.operatorPKs = operatorPKs; param.test.governorPKs = governorPKs; @@ -89,7 +95,7 @@ contract Migration is BaseMigration, Utils { // Ronin Bridge Manager param.roninBridgeManager.num = 2; param.roninBridgeManager.denom = 4; - param.roninBridgeManager.roninChainId = 0; + param.roninBridgeManager.roninChainId = param.test.roninChainId; param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days param.roninBridgeManager.bridgeContract = loadContract(Contract.RoninGatewayV3.key()); param.roninBridgeManager.callbackRegisters = wrapAddress(loadContract(Contract.BridgeSlash.key())); @@ -124,7 +130,7 @@ contract Migration is BaseMigration, Utils { param.mainchainBridgeManager.num = 2; param.mainchainBridgeManager.denom = 4; - param.mainchainBridgeManager.roninChainId = 0; + param.mainchainBridgeManager.roninChainId = param.test.roninChainId; param.mainchainBridgeManager.bridgeContract = loadContract(Contract.MainchainGatewayV3.key()); param.mainchainBridgeManager.callbackRegisters = getEmptyAddressArray(); param.mainchainBridgeManager.bridgeOperators = operatorAddrs; diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index 7bce9174..6b53bde4 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -89,6 +89,7 @@ interface ISharedArgument is IGeneralConfig { struct UnitTestParam { address proxyAdmin; + uint256 roninChainId; uint256[] operatorPKs; uint256[] governorPKs; } diff --git a/script/libraries/LibArray.sol b/script/libraries/LibArray.sol new file mode 100644 index 00000000..d9630afa --- /dev/null +++ b/script/libraries/LibArray.sol @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/** + * @title LibArray + * @dev A library for array-related utility functions in Solidity. + */ +library LibArray { + /** + * @dev Error indicating a length mismatch between two arrays. + */ + error LengthMismatch(); + + function toUint256s(uint8[] memory self) internal pure returns (uint256[] memory uint256s) { + assembly ("memory-safe") { + uint256s := self + } + } + + function toUint8sUnsafe(uint256[] memory self) internal pure returns (uint8[] memory uint8s) { + assembly ("memory-safe") { + uint8s := self + } + } + + function arange(uint256 length) internal pure returns (uint256[] memory data) { + data = new uint256[](length); + for (uint256 i; i < length; ++i) { + data[i] = i; + } + } + + /** + * @dev Converts an array of uint256 to an array of bytes32. + * @param self The array of uint256. + * @return bytes32s The resulting array of bytes32. + */ + function toBytes32s(uint256[] memory self) internal pure returns (bytes32[] memory bytes32s) { + assembly ("memory-safe") { + bytes32s := self + } + } + + function hash(uint256[] memory data) internal pure returns (bytes32 digest) { + assembly ("memory-safe") { + digest := keccak256(add(data, 0x20), mload(data)) + } + } + + /** + * @dev Calculates the sum of an array of uint256 values. + * @param data The array of uint256 values for which the sum is calculated. + * @return result The sum of the provided array of uint256 values. + */ + function sum(uint256[] memory data) internal pure returns (uint256 result) { + assembly ("memory-safe") { + // Load the length (first 32 bytes) + let len := mload(data) + let dataElementLocation := add(data, 0x20) + + // Iterate until the bound is not met. + for { let end := add(dataElementLocation, mul(len, 0x20)) } lt(dataElementLocation, end) { + dataElementLocation := add(dataElementLocation, 0x20) + } { result := add(result, mload(dataElementLocation)) } + } + } + + /** + * @dev Converts an array of bytes32 to an array of uint256. + * @param self The array of bytes32. + * @return uint256s The resulting array of uint256. + */ + function toUint256s(bytes32[] memory self) internal pure returns (uint256[] memory uint256s) { + assembly ("memory-safe") { + uint256s := self + } + } + + /** + * @dev Converts an array of uint64 to an array of uint256. + * @param self The array of bytes32. + * @return uint256s The resulting array of uint256. + */ + function toUint256s(uint64[] memory self) internal pure returns (uint256[] memory uint256s) { + assembly ("memory-safe") { + uint256s := self + } + } + + /** + * @dev Converts an array of address to an array of uint256. + * @param self The array of address. + * @return uint256s The resulting array of uint256. + */ + function toUint256s(address[] memory self) internal pure returns (uint256[] memory uint256s) { + assembly ("memory-safe") { + uint256s := self + } + } + + /** + * @dev Sorts an array of uint256 values based on a corresponding array of values using the specified sorting mode. + * @param self The array to be sorted. + * @param values The corresponding array of values used for sorting. + * @notice This function modify `self` and `values` + * @return sorted The sorted array. + */ + function inlineSortByValue(uint256[] memory self, uint256[] memory values) + internal + pure + returns (uint256[] memory sorted) + { + return inlineQuickSortByValue(self, values); + } + + /** + * @dev Sorts an array of uint256 based on a corresponding array of values. + * @param self The array to be sorted. + * @param values The corresponding array of values used for sorting. + * @notice This function modify `self` and `values` + * @return sorted The sorted array. + */ + function inlineQuickSortByValue(uint256[] memory self, uint256[] memory values) + internal + pure + returns (uint256[] memory sorted) + { + uint256 length = self.length; + if (length != values.length) revert LengthMismatch(); + unchecked { + if (length > 1) inlineQuickSortByValue(self, values, 0, int256(length - 1)); + } + + assembly ("memory-safe") { + sorted := self + } + } + + /** + * @dev Internal function to perform quicksort on an array of uint256 values based on a corresponding array of values. + * @param arr The array to be sorted. + * @param values The corresponding array of values used for sorting. + * @param left The left index of the subarray to be sorted. + * @param right The right index of the subarray to be sorted. + * @notice This function modify `arr` and `values` + */ + function inlineQuickSortByValue(uint256[] memory arr, uint256[] memory values, int256 left, int256 right) + private + pure + { + unchecked { + if (left == right) return; + int256 i = left; + int256 j = right; + uint256 pivot = values[uint256(left + right) >> 1]; + + while (i <= j) { + while (pivot > values[uint256(i)]) ++i; + while (pivot < values[uint256(j)]) --j; + + if (i <= j) { + (arr[uint256(i)], arr[uint256(j)]) = (arr[uint256(j)], arr[uint256(i)]); + (values[uint256(i)], values[uint256(j)]) = (values[uint256(j)], values[uint256(i)]); + ++i; + --j; + } + } + + if (left < j) inlineQuickSortByValue(arr, values, left, j); + if (i < right) inlineQuickSortByValue(arr, values, i, right); + } + } +} diff --git a/script/utils/Utils.sol b/script/utils/Utils.sol index 91ae0431..f0ca0dd7 100644 --- a/script/utils/Utils.sol +++ b/script/utils/Utils.sol @@ -22,6 +22,11 @@ contract Utils { arr[0] = val; } + function wrapBytes(bytes memory val) internal pure returns (bytes[] memory arr) { + arr = new bytes[](1); + arr[0] = val; + } + function wrapAddress(address val1, address val2, address val3) internal pure returns (address[] memory arr) { arr = new address[](3); arr[0] = val1; diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index dfb75295..33dd2ee8 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -27,6 +27,8 @@ import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; +import { BridgeAdminInterface } from "test/helpers/BridgeAdminInterface.t.sol"; + contract BaseIntegration_Test is Base_Test { ISharedArgument.SharedParameter _param; @@ -43,6 +45,8 @@ contract BaseIntegration_Test is Base_Test { MockERC20 _slp; MockERC20 _usdc; + BridgeAdminInterface _bridgeAdminInterface; + function setUp() public virtual { _roninGatewayV3 = new RoninGatewayV3Deploy().run(); _bridgeTracking = new BridgeTrackingDeploy().run(); @@ -59,5 +63,7 @@ contract BaseIntegration_Test is Base_Test { _usdc = new USDCDeploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); + + _bridgeAdminInterface = new BridgeAdminInterface(_param.test.roninChainId); } } diff --git a/test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol new file mode 100644 index 00000000..2ac2219c --- /dev/null +++ b/test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 as console } from "forge-std/console2.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Ballot } from "@ronin/contracts/libraries/Ballot.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; +import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; +import { LibSort } from "solady/utils/LibSort.sol"; +import "../../BaseIntegration.t.sol"; + +contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { + using LibSort for address[]; + + uint256 _nonce; + uint256 _proposalExpiryDuration; + uint256 _addingOperatorNum; + address[] _addingOperators; + address[] _addingGovernors; + uint96[] _voteWeights; + + address[] _beforeRelayedOperators; + address[] _beforeRelayedGovernors; + + Ballot.VoteType[] _supports; + + function setUp() public virtual override { + super.setUp(); + + _nonce = 1; + _proposalExpiryDuration = 60; + _addingOperatorNum = 3; + + _beforeRelayedOperators = _param.roninBridgeManager.bridgeOperators; + _beforeRelayedGovernors = _param.roninBridgeManager.governors; + + _supports = new Ballot.VoteType[](_beforeRelayedOperators.length); + for (uint256 i; i < _beforeRelayedGovernors.length; i++) { + _supports[i] = Ballot.VoteType.For; + } + + for (uint256 i; i < _addingOperatorNum; i++) { + _addingOperators.push(makeAddr(string.concat("adding-operator", vm.toString(i)))); + _addingGovernors.push(makeAddr(string.concat("adding-governor", vm.toString(i)))); + _voteWeights.push(uint96(uint256(100))); + } + } + + function test_voteBridgeOperators() public { + GlobalProposal.GlobalProposalDetail memory globalProposal = _bridgeAdminInterface.createGlobalProposal({ + expiryTimestamp: block.timestamp + _proposalExpiryDuration, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingOperators, _addingGovernors)), + gasAmount: 500_000, + nonce: _nonce + }); + + SignatureConsumer.Signature[] memory signatures = + _bridgeAdminInterface.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, _supports, signatures); + } +} diff --git a/test/helpers/BridgeAdminInterface.t.sol b/test/helpers/BridgeAdminInterface.t.sol new file mode 100644 index 00000000..993c698b --- /dev/null +++ b/test/helpers/BridgeAdminInterface.t.sol @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { Test } from "forge-std/Test.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Proposal } from "@ronin/contracts/libraries/Proposal.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { Ballot } from "@ronin/contracts/libraries/Ballot.sol"; +import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; +import { Utils } from "script/utils/Utils.sol"; + +contract BridgeAdminInterface is Utils, Test { + using ECDSA for bytes32; + using GlobalProposal for GlobalProposal.GlobalProposalDetail; + using Proposal for Proposal.ProposalDetail; + + uint256 _roninChainId; + bytes32 _domain; + + constructor(uint256 roninChainId) { + _roninChainId = roninChainId; + _domain = getBridgeManagerDomain(roninChainId); + } + + function createProposal( + uint256 expiryTimestamp, + address target, + uint256 value, + bytes memory calldata_, + uint256 gasAmount, + uint256 nonce + ) public view returns (Proposal.ProposalDetail memory proposal) { + proposal = Proposal.ProposalDetail({ + nonce: nonce, + chainId: _roninChainId, + expiryTimestamp: expiryTimestamp, + targets: wrapAddress(target), + values: wrapUint(value), + calldatas: wrapBytes(calldata_), + gasAmounts: wrapUint(gasAmount) + }); + } + + function createGlobalProposal( + uint256 expiryTimestamp, + GlobalProposal.TargetOption targetOption, + uint256 value, + bytes memory calldata_, + uint256 gasAmount, + uint256 nonce + ) public pure returns (GlobalProposal.GlobalProposalDetail memory proposal) { + GlobalProposal.TargetOption[] memory targetOptions = new GlobalProposal.TargetOption[](1); + targetOptions[0] = targetOption; + + proposal = GlobalProposal.GlobalProposalDetail({ + nonce: nonce, + expiryTimestamp: expiryTimestamp, + targetOptions: targetOptions, + values: wrapUint(value), + calldatas: wrapBytes(calldata_), + gasAmounts: wrapUint(gasAmount) + }); + } + + function generateSignatures( + Proposal.ProposalDetail memory proposal, + uint256[] memory signerPKs, + Ballot.VoteType support + ) public view returns (SignatureConsumer.Signature[] memory sigs) { + bytes32 proposalHash = proposal.hash(); + return generateSignaturesFor(proposalHash, signerPKs, support); + } + + function generateSignatures(Proposal.ProposalDetail memory proposal, uint256[] memory signerPKs) + public + view + returns (SignatureConsumer.Signature[] memory sigs) + { + return generateSignatures(proposal, signerPKs, Ballot.VoteType.For); + } + + function generateSignaturesGlobal( + GlobalProposal.GlobalProposalDetail memory proposal, + uint256[] memory signerPKs, + Ballot.VoteType support + ) public view returns (SignatureConsumer.Signature[] memory sigs) { + bytes32 proposalHash = proposal.hash(); + return generateSignaturesFor(proposalHash, signerPKs, support); + } + + function generateSignaturesGlobal(GlobalProposal.GlobalProposalDetail memory proposal, uint256[] memory signerPKs) + public + view + returns (SignatureConsumer.Signature[] memory sigs) + { + return generateSignaturesGlobal(proposal, signerPKs, Ballot.VoteType.For); + } + + function defaultExpiryTimestamp() public view returns (uint256) { } + + function functionDelegateCallGlobal() public view { } + function upgradeGlobal() public view { } + + function getBridgeManagerDomain(uint256 roninChainId) public pure returns (bytes32) { + return keccak256( + abi.encode( + keccak256("EIP712Domain(string name,string version,bytes32 salt)"), + keccak256("BridgeAdmin"), // name hash + keccak256("2"), // version hash + keccak256(abi.encode("BRIDGE_ADMIN", roninChainId)) // salt + ) + ); + } + + function generateSignaturesFor(bytes32 proposalHash, uint256[] memory signerPKs, Ballot.VoteType support) + public + view + returns (SignatureConsumer.Signature[] memory sigs) + { + sigs = new SignatureConsumer.Signature[](signerPKs.length); + + for (uint256 i; i < signerPKs.length; i++) { + bytes32 digest = _domain.toTypedDataHash(Ballot.hash(proposalHash, support)); + sigs[i] = _sign(signerPKs[i], digest); + } + } + + function _sign(uint256 pk, bytes32 digest) internal pure returns (SignatureConsumer.Signature memory sig) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); + sig.v = v; + sig.r = r; + sig.s = s; + } +} From ff1606236b5fa0babb750427719e5376bbb262f1 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 19 Jan 2024 14:41:33 +0700 Subject: [PATCH 44/73] test(MainchainGatewayV3): add test submit withdrawal --- test/bridge/integration/BaseIntegration.t.sol | 2 + ...oteBridgeOperator.RoninBridgeManager.t.sol | 0 .../submitWithdrawal.MainchainGatewayV3.t.sol | 67 +++++++++++++++++++ 3 files changed, 69 insertions(+) rename test/bridge/integration/bridge-manager/{set-voting => propose-and-cast-vote}/voteBridgeOperator.RoninBridgeManager.t.sol (100%) create mode 100644 test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 33dd2ee8..611e9058 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -65,5 +65,7 @@ contract BaseIntegration_Test is Base_Test { _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); _bridgeAdminInterface = new BridgeAdminInterface(_param.test.roninChainId); + + _mainchainGatewayV3.initializeV2(address(_mainchainBridgeManager)); } } diff --git a/test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol similarity index 100% rename from test/bridge/integration/bridge-manager/set-voting/voteBridgeOperator.RoninBridgeManager.t.sol rename to test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol diff --git a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol new file mode 100644 index 00000000..1cbf75b6 --- /dev/null +++ b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 as console } from "forge-std/console2.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; +import "../../BaseIntegration.t.sol"; + +contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { + using Transfer for Transfer.Receipt; + + Transfer.Receipt _withdrawalReceipt; + bytes32 _domainSeparator; + + function setUp() public virtual override { + super.setUp(); + _domainSeparator = _mainchainGatewayV3.DOMAIN_SEPARATOR(); + + _withdrawalReceipt.id = 0; + _withdrawalReceipt.kind = Transfer.Kind.Withdrawal; + _withdrawalReceipt.ronin.addr = makeAddr("requester"); + _withdrawalReceipt.ronin.tokenAddr = address(_weth); + _withdrawalReceipt.ronin.chainId = _param.test.roninChainId; + _withdrawalReceipt.mainchain.addr = makeAddr("recipient"); + _withdrawalReceipt.mainchain.tokenAddr = address(_weth); + _withdrawalReceipt.mainchain.chainId = block.chainid; + _withdrawalReceipt.info.erc = Token.Standard.ERC20; + _withdrawalReceipt.info.id = 0; + _withdrawalReceipt.info.quantity = 0; + + vm.deal(address(_mainchainGatewayV3), 10 ether); + vm.prank(address(_mainchainGatewayV3)); + _weth.deposit{ value: 10 ether }(); + } + + function test_submitWithdrawal() public { + _withdrawalReceipt.info.quantity = 10; + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + } + + function _generateSignaturesFor(Transfer.Receipt memory receipt, uint256[] memory signerPKs) + internal + view + returns (SignatureConsumer.Signature[] memory sigs) + { + sigs = new SignatureConsumer.Signature[](signerPKs.length); + + for (uint256 i; i < signerPKs.length; i++) { + bytes32 digest = keccak256(abi.encodePacked("\x19\x01", _domainSeparator, receipt.hash())); + + sigs[i] = _sign(signerPKs[i], digest); + } + } + + function _sign(uint256 pk, bytes32 digest) internal pure returns (SignatureConsumer.Signature memory sig) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); + sig.v = v; + sig.r = r; + sig.s = s; + } +} From bf4083dd790010e153b078e2bba5093500886a14 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 20 Jan 2024 15:30:32 +0700 Subject: [PATCH 45/73] chore: add storage-layout --- logs/contract-code-sizes.log | 2 ++ 1 file changed, 2 insertions(+) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 9bbea1e6..40298177 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -22,10 +22,12 @@ | HasValidatorDeprecated | 0.063 | 24.513 | | IsolatedGovernance | 0.086 | 24.49 | | JSONParserLib | 0.086 | 24.49 | +| LibArray | 0.086 | 24.49 | | LibArrayUtils | 0.086 | 24.49 | | LibErrorHandler | 0.086 | 24.49 | | LibProxy | 0.086 | 24.49 | | LibSharedAddress | 0.086 | 24.49 | +| LibSort | 0.086 | 24.49 | | LibString | 0.086 | 24.49 | | LibTUint256Slot | 0.086 | 24.49 | | MainchainBridgeManager | 19.361 | 5.215 | From fca468c1c582456fd7c46dd5cb30c64c5778a654 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 20 Jan 2024 15:39:38 +0700 Subject: [PATCH 46/73] chore: add contract-code-size --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 40298177..f967441b 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -16,7 +16,7 @@ | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | | GeneralConfig | 20.129 | 4.447 | -| GeneralConfigExtended | 20.351 | 4.225 | +| GeneralConfigExtended | 20.35 | 4.226 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | | HasValidatorDeprecated | 0.063 | 24.513 | From dab52395b9f6b8c9dff8ad3b4919b653846c6658 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 00:59:58 +0700 Subject: [PATCH 47/73] forge install: foundry-deployment-kit 8c728424858f8c8358f2e0f9374a6ea581f46486 --- lib/foundry-deployment-kit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit index 68b8e5a8..8c728424 160000 --- a/lib/foundry-deployment-kit +++ b/lib/foundry-deployment-kit @@ -1 +1 @@ -Subproject commit 68b8e5a83113275cae9f4332cc99924c18779887 +Subproject commit 8c728424858f8c8358f2e0f9374a6ea581f46486 From 21784ee39f11031b30da978d90afabdd52f1c456 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 01:03:27 +0700 Subject: [PATCH 48/73] test(bridge-setup): setup 2 local chains + remove pre-compute addresses before actually deploy --- foundry.toml | 4 +- logs/contract-code-sizes.log | 4 +- script/GeneralConfig.sol | 49 +-- script/Migration.s.sol | 186 +++------ script/contracts/BridgeRewardDeploy.s.sol | 18 +- script/contracts/BridgeSlashDeploy.s.sol | 11 +- script/contracts/BridgeTrackingDeploy.s.sol | 9 +- .../contracts/MainchainGatewayV3Deploy.s.sol | 21 +- script/contracts/RoninGatewayV3Deploy.s.sol | 21 +- script/interfaces/ISharedArgument.sol | 2 + script/utils/Network.sol | 17 +- src/mainchain/MainchainGatewayV3.sol | 58 +-- test/bridge/integration/BaseIntegration.t.sol | 376 +++++++++++++++++- ...oteBridgeOperator.RoninBridgeManager.t.sol | 9 +- .../setConfig.MainchainManager.t.sol | 1 + .../setConfig.RoninBridgeManager.t.sol | 1 + .../submitWithdrawal.MainchainGatewayV3.t.sol | 10 +- ...minInterface.t.sol => ProposalUtils.t.sol} | 2 +- test/utils/Utils.sol | 7 +- 19 files changed, 530 insertions(+), 276 deletions(-) rename test/helpers/{BridgeAdminInterface.t.sol => ProposalUtils.t.sol} (98%) diff --git a/foundry.toml b/foundry.toml index 0d09684e..e20e1029 100644 --- a/foundry.toml +++ b/foundry.toml @@ -52,4 +52,6 @@ ethereum = "https://eth.llamarpc.com" goerli = "https://ethereum-goerli.publicnode.com" ronin-mainnet = "https://api-partner.roninchain.com/rpc" ronin-testnet = "https://saigon-archive.roninchain.com/rpc" -localhost = "http://localhost:8545" + +ronin-local = "http://localhost:8546" +ethereum-local = "http://localhost:8547" diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index f967441b..cf8b5bcd 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -4,7 +4,7 @@ | AddressArrayUtils | 0.086 | 24.49 | | ArtifactFactory | 9.155 | 15.421 | | Ballot | 0.086 | 24.49 | -| BaseGeneralConfig | 20.129 | 4.447 | +| BaseGeneralConfig | 20.128 | 4.448 | | BridgeOperatorsBallot | 0.166 | 24.41 | | BridgeReward | 6.032 | 18.544 | | BridgeSlash | 5.639 | 18.937 | @@ -15,7 +15,7 @@ | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | -| GeneralConfig | 20.129 | 4.447 | +| GeneralConfig | 20.128 | 4.448 | | GeneralConfigExtended | 20.35 | 4.226 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index 33df668d..ccf4b9a8 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -36,6 +36,24 @@ contract GeneralConfig is BaseGeneralConfig, Utils { Network.RoninDevnet.envLabel(), Network.RoninDevnet.explorer() ); + + setNetworkInfo( + Network.RoninLocal.chainId(), + Network.RoninLocal.key(), + Network.RoninLocal.chainAlias(), + Network.RoninLocal.deploymentDir(), + Network.RoninLocal.envLabel(), + Network.RoninLocal.explorer() + ); + + setNetworkInfo( + Network.EthLocal.chainId(), + Network.EthLocal.key(), + Network.EthLocal.chainAlias(), + Network.EthLocal.deploymentDir(), + Network.EthLocal.envLabel(), + Network.EthLocal.explorer() + ); } function _setUpContracts() internal virtual override { @@ -53,32 +71,17 @@ contract GeneralConfig is BaseGeneralConfig, Utils { _contractNameMap[Contract.AXS.key()] = "MockERC20"; _contractNameMap[Contract.SLP.key()] = "MockERC20"; _contractNameMap[Contract.USDC.key()] = "MockERC20"; - - if (getCurrentNetwork() == DefaultNetwork.Local.key()) { - address deployer = getSender(); - - // ronin bridge contracts - setAddress(DefaultNetwork.Local.key(), Contract.RoninGatewayV3.key(), vm.computeCreateAddress(deployer, 4)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeTracking.key(), vm.computeCreateAddress(deployer, 6)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeSlash.key(), vm.computeCreateAddress(deployer, 8)); - setAddress(DefaultNetwork.Local.key(), Contract.BridgeReward.key(), vm.computeCreateAddress(deployer, 10)); - setAddress(DefaultNetwork.Local.key(), Contract.RoninBridgeManager.key(), vm.computeCreateAddress(deployer, 11)); - - //mainchain bridge contracts - setAddress(DefaultNetwork.Local.key(), Contract.MainchainGatewayV3.key(), vm.computeCreateAddress(deployer, 13)); - setAddress( - DefaultNetwork.Local.key(), Contract.MainchainBridgeManager.key(), vm.computeCreateAddress(deployer, 14) - ); - - // ronin tokens - setAddress(DefaultNetwork.Local.key(), Contract.WETH.key(), vm.computeCreateAddress(deployer, 15)); - setAddress(DefaultNetwork.Local.key(), Contract.AXS.key(), vm.computeCreateAddress(deployer, 16)); - setAddress(DefaultNetwork.Local.key(), Contract.SLP.key(), vm.computeCreateAddress(deployer, 17)); - setAddress(DefaultNetwork.Local.key(), Contract.USDC.key(), vm.computeCreateAddress(deployer, 18)); - } } function _mapContractName(Contract contractEnum) internal { _contractNameMap[contractEnum.key()] = contractEnum.name(); } + + function getSender() public view virtual override returns (address payable sender) { + sender = _option.trezor ? payable(_trezorSender) : payable(_envSender); + bool isLocalNetwork = getCurrentNetwork() == DefaultNetwork.Local.key() + || getCurrentNetwork() == Network.RoninLocal.key() || getCurrentNetwork() == Network.EthLocal.key(); + if (sender == address(0x0) && isLocalNetwork) sender = payable(DEFAULT_SENDER); + require(sender != address(0x0), "GeneralConfig: Sender is address(0x0)"); + } } diff --git a/script/Migration.s.sol b/script/Migration.s.sol index a2cd2b41..0a53c03f 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -21,158 +21,98 @@ contract Migration is BaseMigration, Utils { function _sharedArguments() internal virtual override returns (bytes memory rawArgs) { ISharedArgument.SharedParameter memory param; + param.test.proxyAdmin = makeAddr("proxy-admin"); + param.test.dposGA = makeAddr("governance-admin"); + param.test.mainchainChainId = Network.EthLocal.chainId(); + param.test.roninChainId = Network.RoninLocal.chainId(); + + // tokens + param.weth.name = "Wrapped WETH"; + param.weth.symbol = "WETH"; + param.wron.name = "Wrapped RON"; + param.wron.symbol = "WRON"; + param.axs.name = "Axie Infinity Shard"; + param.axs.symbol = "AXS"; + param.slp.name = "Smooth Love Potion"; + param.slp.symbol = "SLP"; + param.usdc.name = "USD Coin"; + param.usdc.symbol = "USDC"; + + uint256 num = 6; + address[] memory operatorAddrs = new address[](num); + address[] memory governorAddrs = new address[](num); + uint256[] memory operatorPKs = new uint256[](num); + uint256[] memory governorPKs = new uint256[](num); + uint96[] memory voteWeights = new uint96[](num); + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](0); + address[] memory targets = new address[](0); + + for (uint256 i; i < num; i++) { + (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); + (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); + + operatorAddrs[i] = addrOperator; + governorAddrs[i] = addrGovernor; + operatorPKs[i] = pkOperator; + governorPKs[i] = pkGovernor; + voteWeights[i] = 100; + } + + LibArray.inlineSortByValue(operatorPKs, LibArray.toUint256s(operatorAddrs)); + LibArray.inlineSortByValue(governorPKs, LibArray.toUint256s(governorAddrs)); + + param.test.operatorPKs = operatorPKs; + param.test.governorPKs = governorPKs; if (network() == Network.Goerli.key()) { // Undefined } else if (network() == DefaultNetwork.RoninTestnet.key()) { // Undefined - } else if (network() == DefaultNetwork.Local.key()) { - uint256 num = 6; - address[] memory operatorAddrs = new address[](num); - address[] memory governorAddrs = new address[](num); - uint256[] memory operatorPKs = new uint256[](num); - uint256[] memory governorPKs = new uint256[](num); - uint96[] memory voteWeights = new uint96[](num); - - for (uint256 i; i < num; i++) { - (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); - (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); - - operatorAddrs[i] = addrOperator; - governorAddrs[i] = addrGovernor; - operatorPKs[i] = pkOperator; - governorPKs[i] = pkGovernor; - voteWeights[i] = 100; - } - - LibArray.inlineSortByValue(operatorPKs, LibArray.toUint256s(operatorAddrs)); - LibArray.inlineSortByValue(governorPKs, LibArray.toUint256s(governorAddrs)); - - address governanceAdmin = makeAddr("governance-admin"); - address validatorSetContract = makeAddr("validator-set-contract"); - Token.Standard[] memory standards = new Token.Standard[](1); - standards[0] = Token.Standard.ERC20; - - GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](4); - address[] memory targets = new address[](4); - - options[0] = GlobalProposal.TargetOption.GatewayContract; - targets[0] = loadContract(Contract.RoninGatewayV3.key()); - - options[1] = GlobalProposal.TargetOption.BridgeReward; - targets[1] = loadContract(Contract.BridgeReward.key()); - - options[2] = GlobalProposal.TargetOption.BridgeSlash; - targets[2] = loadContract(Contract.BridgeSlash.key()); - - options[3] = GlobalProposal.TargetOption.BridgeTracking; - targets[3] = loadContract(Contract.BridgeTracking.key()); - - // test - param.test.proxyAdmin = makeAddr("proxy-admin"); - param.test.roninChainId = 0; - param.test.operatorPKs = operatorPKs; - param.test.governorPKs = governorPKs; - + } else if (network() == Network.RoninLocal.key() || network() == Network.EthLocal.key()) { // Bridge rewards - param.bridgeReward.bridgeManagerContract = loadContract(Contract.RoninBridgeManager.key()); - param.bridgeReward.bridgeTrackingContract = loadContract(Contract.BridgeTracking.key()); - param.bridgeReward.bridgeSlashContract = loadContract(Contract.BridgeSlash.key()); - param.bridgeReward.validatorSetContract = validatorSetContract; - param.bridgeReward.dposGA = governanceAdmin; + param.bridgeReward.dposGA = param.test.dposGA; param.bridgeReward.rewardPerPeriod = 5_000; // Bridge Slash - param.bridgeSlash.validatorContract = validatorSetContract; - param.bridgeSlash.bridgeManagerContract = loadContract(Contract.RoninBridgeManager.key()); - param.bridgeSlash.bridgeTrackingContract = loadContract(Contract.BridgeTracking.key()); - param.bridgeSlash.dposGA = governanceAdmin; + param.bridgeSlash.dposGA = param.test.dposGA; // Bridge Tracking - param.bridgeTracking.bridgeContract = loadContract(Contract.RoninGatewayV3.key()); - param.bridgeTracking.validatorContract = validatorSetContract; + + // Ronin Gateway V3 + param.roninGatewayV3.numerator = 3; + param.roninGatewayV3.denominator = 6; + param.roninGatewayV3.trustedNumerator = 2; + param.roninGatewayV3.trustedDenominator = 3; // Ronin Bridge Manager param.roninBridgeManager.num = 2; param.roninBridgeManager.denom = 4; + param.roninBridgeManager.roninChainId = 0; param.roninBridgeManager.roninChainId = param.test.roninChainId; param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days - param.roninBridgeManager.bridgeContract = loadContract(Contract.RoninGatewayV3.key()); - param.roninBridgeManager.callbackRegisters = wrapAddress(loadContract(Contract.BridgeSlash.key())); param.roninBridgeManager.bridgeOperators = operatorAddrs; param.roninBridgeManager.governors = governorAddrs; param.roninBridgeManager.voteWeights = voteWeights; param.roninBridgeManager.targetOptions = options; param.roninBridgeManager.targets = targets; - - // Ronin Gateway V3 - param.roninGatewayV3.roleSetter = address(0); - param.roninGatewayV3.numerator = 3; - param.roninGatewayV3.denominator = 6; - param.roninGatewayV3.trustedNumerator = 2; - param.roninGatewayV3.trustedDenominator = 3; - param.roninGatewayV3.withdrawalMigrators = getEmptyAddressArray(); - param.roninGatewayV3.packedAddresses[0] = wrapAddress(address(0)); - param.roninGatewayV3.packedAddresses[1] = wrapAddress(address(0)); - param.roninGatewayV3.packedNumbers[0] = wrapUint(1); - param.roninGatewayV3.packedNumbers[1] = wrapUint(0); - param.roninGatewayV3.standards = standards; + // Mainchain Gateway V3 + param.mainchainGatewayV3.roninChainId = param.test.roninChainId; + param.mainchainGatewayV3.numerator = 1; + param.mainchainGatewayV3.highTierVWNumerator = 10; + param.mainchainGatewayV3.denominator = 10; // Mainchain Bridge Manager - delete options; - delete targets; - - options = new GlobalProposal.TargetOption[](1); - targets = new address[](1); - - options[0] = GlobalProposal.TargetOption.GatewayContract; - targets[0] = loadContract(Contract.MainchainGatewayV3.key()); - param.mainchainBridgeManager.num = 2; param.mainchainBridgeManager.denom = 4; + param.mainchainBridgeManager.roninChainId = 0; param.mainchainBridgeManager.roninChainId = param.test.roninChainId; - param.mainchainBridgeManager.bridgeContract = loadContract(Contract.MainchainGatewayV3.key()); - param.mainchainBridgeManager.callbackRegisters = getEmptyAddressArray(); param.mainchainBridgeManager.bridgeOperators = operatorAddrs; param.mainchainBridgeManager.governors = governorAddrs; param.mainchainBridgeManager.voteWeights = voteWeights; param.mainchainBridgeManager.targetOptions = options; param.mainchainBridgeManager.targets = targets; - - // Mainchain Gateway V3 - delete standards; - standards = new Token.Standard[](2); - - standards[0] = Token.Standard.ERC20; - standards[1] = Token.Standard.ERC20; - - param.mainchainGatewayV3.roleSetter = address(0); - param.mainchainGatewayV3.roninChainId = 0; - param.mainchainGatewayV3.numerator = 1; - param.mainchainGatewayV3.highTierVWNumerator = 10; - param.mainchainGatewayV3.denominator = 10; - param.mainchainGatewayV3.addresses[0] = - wrapAddress(loadContract(Contract.WETH.key()), loadContract(Contract.USDC.key())); // mainchain tokens - param.mainchainGatewayV3.addresses[1] = - wrapAddress(loadContract(Contract.WETH.key()), loadContract(Contract.USDC.key())); // ronin tokens - param.mainchainGatewayV3.addresses[2] = getEmptyAddressArray(); //withdrawalUnlockers - param.mainchainGatewayV3.thresholds[0] = wrapUint(10, 0); // highTierThreshold - param.mainchainGatewayV3.thresholds[1] = wrapUint(20, 0); // lockedThreshold - param.mainchainGatewayV3.thresholds[2] = wrapUint(100_000, 0); // unlockFeePercentages - param.mainchainGatewayV3.thresholds[3] = wrapUint(12, 0); // dailyWithdrawalLimits - param.mainchainGatewayV3.standards = standards; - - // tokens - param.weth.name = "Wrapped WETH"; - param.weth.symbol = "WETH"; - param.wron.name = "Wrapped RON"; - param.wron.symbol = "WRON"; - param.axs.name = "Axie Infinity Shard"; - param.axs.symbol = "AXS"; - param.slp.name = "Smooth Love Potion"; - param.slp.symbol = "SLP"; - param.usdc.name = "USD Coin"; - param.usdc.symbol = "USDC"; + } else if (network() == DefaultNetwork.Local.key()) { + // Undefined } else { revert("Migration: Network Unknown Shared Parameters Unimplemented!"); } @@ -181,8 +121,8 @@ contract Migration is BaseMigration, Utils { } function _getProxyAdmin() internal virtual override returns (address payable) { - return network() == DefaultNetwork.Local.key() - ? payable(config.sharedArguments().test.proxyAdmin) - : super._getProxyAdmin(); + bool isLocalNetwork = network() == DefaultNetwork.Local.key() || network() == Network.RoninLocal.key() + || network() == Network.EthLocal.key(); + return isLocalNetwork ? payable(config.sharedArguments().test.proxyAdmin) : super._getProxyAdmin(); } } diff --git a/script/contracts/BridgeRewardDeploy.s.sol b/script/contracts/BridgeRewardDeploy.s.sol index 05d17af5..1413fc3d 100644 --- a/script/contracts/BridgeRewardDeploy.s.sol +++ b/script/contracts/BridgeRewardDeploy.s.sol @@ -11,23 +11,7 @@ import { RoninBridgeManagerDeploy } from "./RoninBridgeManagerDeploy.s.sol"; import { BridgeSlashDeploy } from "./BridgeSlashDeploy.s.sol"; contract BridgeRewardDeploy is Migration { - function _defaultArguments() internal virtual override returns (bytes memory args) { - ISharedArgument.BridgeRewardParam memory param = config.sharedArguments().bridgeReward; - - args = abi.encodeCall( - BridgeReward.initialize, - ( - param.bridgeManagerContract, - param.bridgeTrackingContract, - param.bridgeSlashContract, - param.validatorSetContract, - param.dposGA, - param.rewardPerPeriod - ) - ); - } - function run() public virtual returns (BridgeReward) { - return BridgeReward(_deployProxy(Contract.BridgeReward.key())); + return BridgeReward(_deployProxy(Contract.BridgeReward.key(), EMPTY_ARGS)); } } diff --git a/script/contracts/BridgeSlashDeploy.s.sol b/script/contracts/BridgeSlashDeploy.s.sol index c3a101a3..067b842f 100644 --- a/script/contracts/BridgeSlashDeploy.s.sol +++ b/script/contracts/BridgeSlashDeploy.s.sol @@ -10,16 +10,7 @@ import { BridgeTrackingDeploy } from "./BridgeTrackingDeploy.s.sol"; import { RoninBridgeManagerDeploy } from "./RoninBridgeManagerDeploy.s.sol"; contract BridgeSlashDeploy is Migration { - function _defaultArguments() internal virtual override returns (bytes memory args) { - ISharedArgument.BridgeSlashParam memory param = config.sharedArguments().bridgeSlash; - - args = abi.encodeCall( - BridgeSlash.initialize, - (param.validatorContract, param.bridgeManagerContract, param.bridgeTrackingContract, param.dposGA) - ); - } - function run() public virtual returns (BridgeSlash) { - return BridgeSlash(_deployProxy(Contract.BridgeSlash.key())); + return BridgeSlash(_deployProxy(Contract.BridgeSlash.key(), EMPTY_ARGS)); } } diff --git a/script/contracts/BridgeTrackingDeploy.s.sol b/script/contracts/BridgeTrackingDeploy.s.sol index 022cf154..fb5e6227 100644 --- a/script/contracts/BridgeTrackingDeploy.s.sol +++ b/script/contracts/BridgeTrackingDeploy.s.sol @@ -9,14 +9,7 @@ import { Migration } from "../Migration.s.sol"; import { RoninGatewayV3Deploy } from "./RoninGatewayV3Deploy.s.sol"; contract BridgeTrackingDeploy is Migration { - function _defaultArguments() internal virtual override returns (bytes memory args) { - ISharedArgument.BridgeTrackingParam memory param = config.sharedArguments().bridgeTracking; - - args = - abi.encodeCall(BridgeTracking.initialize, (param.bridgeContract, param.validatorContract, param.startedAtBlock)); - } - function run() public virtual returns (BridgeTracking) { - return BridgeTracking(_deployProxy(Contract.BridgeTracking.key())); + return BridgeTracking(_deployProxy(Contract.BridgeTracking.key(), EMPTY_ARGS)); } } diff --git a/script/contracts/MainchainGatewayV3Deploy.s.sol b/script/contracts/MainchainGatewayV3Deploy.s.sol index 61412d00..bb4c2e07 100644 --- a/script/contracts/MainchainGatewayV3Deploy.s.sol +++ b/script/contracts/MainchainGatewayV3Deploy.s.sol @@ -8,26 +8,7 @@ import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; import { Migration } from "../Migration.s.sol"; contract MainchainGatewayV3Deploy is Migration { - function _defaultArguments() internal virtual override returns (bytes memory args) { - ISharedArgument.MainchainGatewayV3Param memory param = config.sharedArguments().mainchainGatewayV3; - - args = abi.encodeCall( - MainchainGatewayV3.initialize, - ( - param.roleSetter, - IWETH(param.wrappedToken), - param.roninChainId, - param.numerator, - param.highTierVWNumerator, - param.denominator, - param.addresses, - param.thresholds, - param.standards - ) - ); - } - function run() public virtual returns (MainchainGatewayV3) { - return MainchainGatewayV3(_deployProxy(Contract.MainchainGatewayV3.key())); + return MainchainGatewayV3(_deployProxy(Contract.MainchainGatewayV3.key(), EMPTY_ARGS)); } } diff --git a/script/contracts/RoninGatewayV3Deploy.s.sol b/script/contracts/RoninGatewayV3Deploy.s.sol index c252eafb..60db9ae0 100644 --- a/script/contracts/RoninGatewayV3Deploy.s.sol +++ b/script/contracts/RoninGatewayV3Deploy.s.sol @@ -8,26 +8,7 @@ import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; import { Migration } from "../Migration.s.sol"; contract RoninGatewayV3Deploy is Migration { - function _defaultArguments() internal virtual override returns (bytes memory args) { - ISharedArgument.RoninGatewayV3Param memory param = config.sharedArguments().roninGatewayV3; - - args = abi.encodeCall( - RoninGatewayV3.initialize, - ( - param.roleSetter, - param.numerator, - param.denominator, - param.trustedNumerator, - param.trustedDenominator, - param.withdrawalMigrators, - param.packedAddresses, - param.packedNumbers, - param.standards - ) - ); - } - function run() public virtual returns (RoninGatewayV3) { - return RoninGatewayV3(_deployProxy(Contract.RoninGatewayV3.key())); + return RoninGatewayV3(_deployProxy(Contract.RoninGatewayV3.key(), EMPTY_ARGS)); } } diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index 6b53bde4..eb5508f6 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -89,6 +89,8 @@ interface ISharedArgument is IGeneralConfig { struct UnitTestParam { address proxyAdmin; + address dposGA; + uint256 mainchainChainId; uint256 roninChainId; uint256[] operatorPKs; uint256[] governorPKs; diff --git a/script/utils/Network.sol b/script/utils/Network.sol index aa817211..b98bd445 100644 --- a/script/utils/Network.sol +++ b/script/utils/Network.sol @@ -6,7 +6,9 @@ import { LibString, TNetwork } from "foundry-deployment-kit/types/Types.sol"; enum Network { Goerli, EthMainnet, - RoninDevnet + RoninDevnet, + RoninLocal, + EthLocal } using { key, name, chainId, chainAlias, envLabel, deploymentDir, explorer } for Network global; @@ -15,6 +17,9 @@ function chainId(Network network) pure returns (uint256) { if (network == Network.Goerli) return 5; if (network == Network.EthMainnet) return 1; if (network == Network.RoninDevnet) return 2022; + if (network == Network.RoninLocal) return 2024; + if (network == Network.EthLocal) return 2; + revert("Network: Unknown chain id"); } @@ -31,6 +36,9 @@ function name(Network network) pure returns (string memory) { if (network == Network.Goerli) return "Goerli"; if (network == Network.RoninDevnet) return "RoninDevnet"; if (network == Network.EthMainnet) return "EthMainnet"; + if (network == Network.RoninLocal) return "RoninLocal"; + if (network == Network.EthLocal) return "EthLocal"; + revert("Network: Unknown network name"); } @@ -38,6 +46,9 @@ function deploymentDir(Network network) pure returns (string memory) { if (network == Network.Goerli) return "goerli/"; if (network == Network.EthMainnet) return "ethereum/"; if (network == Network.RoninDevnet) return "ronin-devnet/"; + if (network == Network.RoninLocal) return ""; + if (network == Network.EthLocal) return ""; + revert("Network: Unknown network deployment directory"); } @@ -45,6 +56,8 @@ function envLabel(Network network) pure returns (string memory) { if (network == Network.Goerli) return "TESTNET_PK"; if (network == Network.RoninDevnet) return "DEVNET_PK"; if (network == Network.EthMainnet) return "MAINNET_PK"; + if (network == Network.RoninLocal) return "DEVNET_PK"; + if (network == Network.EthLocal) return "DEVNET_PK"; revert("Network: Unknown private key env label"); } @@ -52,5 +65,7 @@ function chainAlias(Network network) pure returns (string memory) { if (network == Network.Goerli) return "goerli"; if (network == Network.EthMainnet) return "ethereum"; if (network == Network.RoninDevnet) return "ronin-devnet"; + if (network == Network.RoninLocal) return "ronin-local"; + if (network == Network.EthLocal) return "ethereum-local"; revert("Network: Unknown network alias"); } diff --git a/src/mainchain/MainchainGatewayV3.sol b/src/mainchain/MainchainGatewayV3.sol index 89a408a7..68be6019 100644 --- a/src/mainchain/MainchainGatewayV3.sol +++ b/src/mainchain/MainchainGatewayV3.sol @@ -93,7 +93,7 @@ contract MainchainGatewayV3 is } // Grant role for withdrawal unlocker - for (uint256 _i; _i < _addresses[2].length; ) { + for (uint256 _i; _i < _addresses[2].length;) { _grantRole(WITHDRAWAL_UNLOCKER_ROLE, _addresses[2][_i]); unchecked { @@ -109,7 +109,7 @@ contract MainchainGatewayV3 is /** * @dev Receives ether without doing anything. Use this function to topup native token. */ - function receiveEther() external payable {} + function receiveEther() external payable { } /** * @inheritdoc IMainchainGatewayV3 @@ -135,10 +135,12 @@ contract MainchainGatewayV3 is /** * @inheritdoc IMainchainGatewayV3 */ - function submitWithdrawal( - Transfer.Receipt calldata _receipt, - Signature[] calldata _signatures - ) external virtual whenNotPaused returns (bool _locked) { + function submitWithdrawal(Transfer.Receipt calldata _receipt, Signature[] calldata _signatures) + external + virtual + whenNotPaused + returns (bool _locked) + { return _submitWithdrawal(_receipt, _signatures); } @@ -227,10 +229,11 @@ contract MainchainGatewayV3 is address[] calldata _roninTokens, Token.Standard[] calldata _standards ) internal virtual { - if (!(_mainchainTokens.length == _roninTokens.length && _mainchainTokens.length == _standards.length)) + if (!(_mainchainTokens.length == _roninTokens.length && _mainchainTokens.length == _standards.length)) { revert ErrLengthMismatch(msg.sig); + } - for (uint256 _i; _i < _mainchainTokens.length; ) { + for (uint256 _i; _i < _mainchainTokens.length;) { _roninToken[_mainchainTokens[_i]].tokenAddr = _roninTokens[_i]; _roninToken[_mainchainTokens[_i]].erc = _standards[_i]; @@ -256,10 +259,11 @@ contract MainchainGatewayV3 is * Emits the `Withdrew` once the assets are released. * */ - function _submitWithdrawal( - Transfer.Receipt calldata _receipt, - Signature[] memory _signatures - ) internal virtual returns (bool _locked) { + function _submitWithdrawal(Transfer.Receipt calldata _receipt, Signature[] memory _signatures) + internal + virtual + returns (bool _locked) + { uint256 _id = _receipt.id; uint256 _quantity = _receipt.info.quantity; address _tokenAddr = _receipt.mainchain.tokenAddr; @@ -293,7 +297,7 @@ contract MainchainGatewayV3 is address _lastSigner; Signature memory _sig; uint256 _weight; - for (uint256 _i; _i < _signatures.length; ) { + for (uint256 _i; _i < _signatures.length;) { _sig = _signatures[_i]; _signer = ecrecover(_receiptDigest, _sig.v, _sig.r, _sig.s); if (_lastSigner >= _signer) revert ErrInvalidOrder(msg.sig); @@ -339,16 +343,16 @@ contract MainchainGatewayV3 is */ function _requestDepositFor(Transfer.Request memory _request, address _requester) internal virtual { MappedToken memory _token; - address _weth = address(wrappedNativeToken); + address _roninWeth = address(wrappedNativeToken); _request.info.validate(); if (_request.tokenAddr == address(0)) { if (_request.info.quantity != msg.value) revert ErrInvalidRequest(); - _token = getRoninToken(_weth); + _token = getRoninToken(_roninWeth); if (_token.erc != _request.info.erc) revert ErrInvalidTokenStandard(); - _request.tokenAddr = _weth; + _request.tokenAddr = _roninWeth; } else { if (msg.value != 0) revert ErrInvalidRequest(); @@ -357,18 +361,14 @@ contract MainchainGatewayV3 is _request.info.transferFrom(_requester, address(this), _request.tokenAddr); // Withdraw if token is WETH - if (_weth == _request.tokenAddr) { - IWETH(_weth).withdraw(_request.info.quantity); + if (_roninWeth == _request.tokenAddr) { + IWETH(_roninWeth).withdraw(_request.info.quantity); } } uint256 _depositId = depositCount++; - Transfer.Receipt memory _receipt = _request.into_deposit_receipt( - _requester, - _depositId, - _token.tokenAddr, - roninChainId - ); + Transfer.Receipt memory _receipt = + _request.into_deposit_receipt(_requester, _depositId, _token.tokenAddr, roninChainId); emit DepositRequested(_receipt.hash(), _receipt); } @@ -376,11 +376,11 @@ contract MainchainGatewayV3 is /** * @dev Returns the minimum vote weight for the token. */ - function _computeMinVoteWeight( - Token.Standard _erc, - address _token, - uint256 _quantity - ) internal virtual returns (uint256 _weight, bool _locked) { + function _computeMinVoteWeight(Token.Standard _erc, address _token, uint256 _quantity) + internal + virtual + returns (uint256 _weight, bool _locked) + { uint256 _totalWeight = _getTotalWeight(); _weight = _minimumVoteWeight(_totalWeight); if (_erc == Token.Standard.ERC20) { diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 611e9058..665d1711 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -4,6 +4,9 @@ pragma solidity ^0.8.19; import { Base_Test } from "../../Base.t.sol"; import { LibSharedAddress } from "foundry-deployment-kit/libraries/LibSharedAddress.sol"; import { ISharedArgument } from "@ronin/script/interfaces/ISharedArgument.sol"; +import { IGeneralConfig } from "foundry-deployment-kit/interfaces/IGeneralConfig.sol"; +import { GeneralConfig } from "@ronin/script/GeneralConfig.sol"; +import { Network } from "@ronin/script/utils/Network.sol"; import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; import { RoninGatewayV3 } from "@ronin/contracts/ronin/gateway/RoninGatewayV3.sol"; @@ -14,6 +17,14 @@ import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { MockERC20 } from "@ronin/contracts/mocks/token/MockERC20.sol"; import { MockWrappedToken } from "@ronin/contracts/mocks/token/MockWrappedToken.sol"; +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { IWETH } from "@ronin/contracts/interfaces/IWETH.sol"; +import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; +import { Ballot } from "@ronin/contracts/libraries/Ballot.sol"; +import { GlobalCoreGovernance } from "@ronin/contracts/extensions/sequential-governance/GlobalCoreGovernance.sol"; +import { IHasContracts } from "@ronin/contracts/interfaces/collections/IHasContracts.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; import { RoninBridgeManagerDeploy } from "@ronin/script/contracts/RoninBridgeManagerDeploy.s.sol"; import { RoninGatewayV3Deploy } from "@ronin/script/contracts/RoninGatewayV3Deploy.s.sol"; @@ -23,13 +34,16 @@ import { BridgeRewardDeploy } from "@ronin/script/contracts/BridgeRewardDeploy.s import { MainchainGatewayV3Deploy } from "@ronin/script/contracts/MainchainGatewayV3Deploy.s.sol"; import { MainchainBridgeManagerDeploy } from "@ronin/script/contracts/MainchainBridgeManagerDeploy.s.sol"; import { WETHDeploy } from "@ronin/script/contracts/token/WETHDeploy.s.sol"; +import { WRONDeploy } from "@ronin/script/contracts/token/WRONDeploy.s.sol"; import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; -import { BridgeAdminInterface } from "test/helpers/BridgeAdminInterface.t.sol"; +import { ProposalUtils } from "test/helpers/ProposalUtils.t.sol"; +import { MockValidatorSet_ForFoundryTest } from "test/mocks/MockValidatorSet_ForFoundryTest.sol"; contract BaseIntegration_Test is Base_Test { + IGeneralConfig _config; ISharedArgument.SharedParameter _param; RoninBridgeManager _roninBridgeManager; @@ -40,32 +54,372 @@ contract BaseIntegration_Test is Base_Test { MainchainGatewayV3 _mainchainGatewayV3; MainchainBridgeManager _mainchainBridgeManager; - MockWrappedToken _weth; - MockERC20 _axs; - MockERC20 _slp; - MockERC20 _usdc; + MockWrappedToken _roninWeth; + MockWrappedToken _roninWron; + MockERC20 _roninAxs; + MockERC20 _roninSlp; + MockERC20 _roninUsdc; - BridgeAdminInterface _bridgeAdminInterface; + MockWrappedToken _mainchainWeth; + MockWrappedToken _mainchainWron; + MockERC20 _mainchainAxs; + MockERC20 _mainchainSlp; + MockERC20 _mainchainUsdc; + + MockValidatorSet_ForFoundryTest _validatorSet; + + ProposalUtils _roninProposalUtils; + ProposalUtils _mainchainProposalUtils; + + uint256 _roninNonce = 1; + uint256 _mainchainNonce = 1; function setUp() public virtual { + _deployGeneralConfig(); + + _deployContractsOnRonin(); + _deployContractsOnMainchain(); + + _initializeRonin(); + _initializeMainchain(); + } + + function _deployContractsOnRonin() internal { + _config.createFork(Network.RoninLocal.key()); + _config.switchTo(Network.RoninLocal.key()); + _roninGatewayV3 = new RoninGatewayV3Deploy().run(); _bridgeTracking = new BridgeTrackingDeploy().run(); _bridgeSlash = new BridgeSlashDeploy().run(); _bridgeReward = new BridgeRewardDeploy().run(); _roninBridgeManager = new RoninBridgeManagerDeploy().run(); + _roninWeth = new WETHDeploy().run(); + _roninWron = new WRONDeploy().run(); + _roninAxs = new AXSDeploy().run(); + _roninSlp = new SLPDeploy().run(); + _roninUsdc = new USDCDeploy().run(); + + _validatorSet = new MockValidatorSet_ForFoundryTest(); + + _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); + _roninProposalUtils = new ProposalUtils(_param.test.roninChainId); + } + + function _deployContractsOnMainchain() internal { + _config.createFork(Network.EthLocal.key()); + _config.switchTo(Network.EthLocal.key()); + _mainchainGatewayV3 = new MainchainGatewayV3Deploy().run(); _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); - _weth = new WETHDeploy().run(); - _axs = new AXSDeploy().run(); - _slp = new SLPDeploy().run(); - _usdc = new USDCDeploy().run(); + _mainchainWeth = new WETHDeploy().run(); + _mainchainWron = new WRONDeploy().run(); + _mainchainAxs = new AXSDeploy().run(); + _mainchainSlp = new SLPDeploy().run(); + _mainchainUsdc = new USDCDeploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); + _mainchainProposalUtils = new ProposalUtils(_param.test.roninChainId); + } - _bridgeAdminInterface = new BridgeAdminInterface(_param.test.roninChainId); + function _initializeRonin() internal { + _config.switchTo(Network.RoninLocal.key()); + + _bridgeRewardInitialize(); + _bridgeTrackingInitialize(); + _bridgeSlashInitialize(); + _roninGatewayV3Initialize(); + _constructForRoninBridgeManager(); + } + + function _initializeMainchain() internal { + _config.switchTo(Network.EthLocal.key()); + + _constructForMainchainBridgeManager(); + _mainchainGatewayV3Initialize(); + } + + function _getMainchainAndRoninTokens() + internal + view + returns (address[] memory mainchainTokens, address[] memory roninTokens) + { + uint256 tokenNum = 6; + mainchainTokens = new address[](tokenNum); + roninTokens = new address[](tokenNum); + + mainchainTokens[0] = address(_mainchainWeth); + mainchainTokens[1] = address(_mainchainWron); + mainchainTokens[2] = address(_mainchainAxs); + mainchainTokens[3] = address(_mainchainSlp); + mainchainTokens[4] = address(_mainchainUsdc); + + roninTokens[0] = address(_roninWeth); + roninTokens[1] = address(_roninWron); + roninTokens[2] = address(_roninAxs); + roninTokens[4] = address(_roninSlp); + roninTokens[3] = address(_roninUsdc); + } + + function _bridgeRewardInitialize() internal { + // Bridge rewards + _param.bridgeReward.validatorSetContract = address(_validatorSet); + _param.bridgeReward.bridgeManagerContract = address(_roninBridgeManager); + _param.bridgeReward.bridgeTrackingContract = address(_bridgeTracking); + _param.bridgeReward.bridgeSlashContract = address(_bridgeSlash); + + ISharedArgument.BridgeRewardParam memory param = _param.bridgeReward; + + _bridgeReward.initialize( + param.bridgeManagerContract, + param.bridgeTrackingContract, + param.bridgeSlashContract, + param.validatorSetContract, + param.dposGA, + param.rewardPerPeriod + ); + + _validatorSet.setCurrentPeriod(10); + vm.prank(_param.test.dposGA); + _bridgeReward.initializeREP2(); + } + + function _bridgeTrackingInitialize() internal { + // Bridge Tracking + _param.bridgeTracking.validatorContract = address(_validatorSet); + _param.bridgeTracking.bridgeContract = address(_roninGatewayV3); + + ISharedArgument.BridgeTrackingParam memory param = _param.bridgeTracking; + + _bridgeTracking.initialize(param.bridgeContract, param.validatorContract, param.startedAtBlock); + _bridgeTracking.initializeV2(); + _bridgeTracking.initializeV3( + address(_roninBridgeManager), address(_bridgeSlash), address(_bridgeReward), _param.test.dposGA + ); + } + + function _bridgeSlashInitialize() internal { + // Bridge Slash + _param.bridgeSlash.validatorContract = address(_validatorSet); + _param.bridgeSlash.bridgeManagerContract = address(_roninBridgeManager); + _param.bridgeSlash.bridgeTrackingContract = address(_bridgeTracking); + + ISharedArgument.BridgeSlashParam memory param = _param.bridgeSlash; + + _bridgeSlash.initialize( + param.validatorContract, param.bridgeManagerContract, param.bridgeTrackingContract, param.dposGA + ); + + vm.prank(_param.test.dposGA); + _bridgeSlash.initializeREP2(); + } + + function _roninGatewayV3Initialize() internal { + (address[] memory mainchainTokens, address[] memory roninTokens) = _getMainchainAndRoninTokens(); + uint256 tokenNum = mainchainTokens.length; + uint256[] memory minimumThreshold = new uint256[](tokenNum); + uint256[] memory chainIds = new uint256[](tokenNum); + Token.Standard[] memory standards = new Token.Standard[](tokenNum); + for (uint256 i; i < tokenNum; i++) { + minimumThreshold[i] = 0; + chainIds[i] = _param.test.mainchainChainId; + standards[i] = Token.Standard.ERC20; + } + + // Ronin Gateway V3 + _param.roninGatewayV3.packedAddresses[0] = roninTokens; + _param.roninGatewayV3.packedAddresses[1] = mainchainTokens; + _param.roninGatewayV3.packedNumbers[0] = chainIds; + _param.roninGatewayV3.packedNumbers[1] = minimumThreshold; + _param.roninGatewayV3.standards = standards; + + ISharedArgument.RoninGatewayV3Param memory param = _param.roninGatewayV3; + + _roninGatewayV3.initialize( + param.roleSetter, + param.numerator, + param.denominator, + param.trustedNumerator, + param.trustedDenominator, + param.withdrawalMigrators, + param.packedAddresses, + param.packedNumbers, + param.standards + ); + + _roninGatewayV3.initializeV2(); + _roninGatewayV3.initializeV3(address(_roninBridgeManager)); + } + + function _constructForRoninBridgeManager() internal { + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](4); + address[] memory targets = new address[](4); + + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = address(_roninGatewayV3); + + options[1] = GlobalProposal.TargetOption.BridgeReward; + targets[1] = address(_bridgeReward); + + options[2] = GlobalProposal.TargetOption.BridgeSlash; + targets[2] = address(_bridgeSlash); + + options[3] = GlobalProposal.TargetOption.BridgeTracking; + targets[3] = address(_bridgeTracking); + + // Ronin Bridge Manager + _param.roninBridgeManager.bridgeContract = address(_roninGatewayV3); + _param.roninBridgeManager.callbackRegisters = wrapAddress(address(_bridgeSlash)); + _param.roninBridgeManager.targetOptions = options; + _param.roninBridgeManager.targets = targets; + + ISharedArgument.BridgeManagerParam memory param = _param.roninBridgeManager; + uint256 length = param.governors.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + { + // set targets + GlobalProposal.GlobalProposalDetail memory globalProposal = _roninProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(GlobalCoreGovernance.updateManyTargetOption, (param.targetOptions, param.targets)), + gasAmount: 500_000, + nonce: _roninNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _roninProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, supports_, signatures); + } + { + // set bridge contract + GlobalProposal.GlobalProposalDetail memory globalProposal = _roninProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, param.bridgeContract)), + gasAmount: 500_000, + nonce: _roninNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _roninProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, supports_, signatures); + } + } + + function _constructForMainchainBridgeManager() internal { + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](1); + address[] memory targets = new address[](1); + + options[0] = GlobalProposal.TargetOption.GatewayContract; + targets[0] = address(_mainchainGatewayV3); + + // Mainchain Bridge Manager + _param.mainchainBridgeManager.bridgeContract = address(_mainchainGatewayV3); + _param.mainchainBridgeManager.callbackRegisters = getEmptyAddressArray(); + _param.mainchainBridgeManager.targetOptions = options; + _param.mainchainBridgeManager.targets = targets; + + ISharedArgument.BridgeManagerParam memory param = _param.mainchainBridgeManager; + uint256 length = param.governors.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + { + // set targets + GlobalProposal.GlobalProposalDetail memory globalProposal = _mainchainProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(GlobalCoreGovernance.updateManyTargetOption, (param.targetOptions, param.targets)), + gasAmount: 500_000, + nonce: _mainchainNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _mainchainProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(globalProposal, supports_, signatures); + } + { + // set bridge contract + GlobalProposal.GlobalProposalDetail memory globalProposal = _mainchainProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, param.bridgeContract)), + gasAmount: 500_000, + nonce: _mainchainNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _mainchainProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(globalProposal, supports_, signatures); + } + } + + function _mainchainGatewayV3Initialize() internal { + (address[] memory mainchainTokens, address[] memory roninTokens) = _getMainchainAndRoninTokens(); + uint256 tokenNum = mainchainTokens.length; + uint256[] memory highTierThreshold = new uint256[](tokenNum); + uint256[] memory lockedThreshold = new uint256[](tokenNum); + uint256[] memory unlockFeePercentages = new uint256[](tokenNum); + uint256[] memory dailyWithdrawalLimits = new uint256[](tokenNum); + + highTierThreshold[0] = 10; + lockedThreshold[0] = 20; + unlockFeePercentages[0] = 100_000; + dailyWithdrawalLimits[0] = 12; + + Token.Standard[] memory standards = new Token.Standard[](tokenNum); + for (uint256 i; i < tokenNum; i++) { + standards[i] = Token.Standard.ERC20; + } + + // Mainchain Gateway V3 + _param.mainchainGatewayV3.addresses[0] = mainchainTokens; + _param.mainchainGatewayV3.addresses[1] = roninTokens; + _param.mainchainGatewayV3.addresses[2] = getEmptyAddressArray(); + _param.mainchainGatewayV3.thresholds[0] = highTierThreshold; + _param.mainchainGatewayV3.thresholds[1] = lockedThreshold; + _param.mainchainGatewayV3.thresholds[2] = unlockFeePercentages; + _param.mainchainGatewayV3.thresholds[3] = dailyWithdrawalLimits; + _param.mainchainGatewayV3.standards = standards; + + ISharedArgument.MainchainGatewayV3Param memory param = _param.mainchainGatewayV3; + + _mainchainGatewayV3.initialize( + param.roleSetter, + IWETH(param.wrappedToken), + param.roninChainId, + param.numerator, + param.highTierVWNumerator, + param.denominator, + param.addresses, + param.thresholds, + param.standards + ); _mainchainGatewayV3.initializeV2(address(_mainchainBridgeManager)); } + + function _deployGeneralConfig() internal { + vm.makePersistent(LibSharedAddress.CONFIG); + vm.allowCheatcodes(LibSharedAddress.CONFIG); + deployCodeTo("GeneralConfig.sol", type(GeneralConfig).creationCode, LibSharedAddress.CONFIG); + _config = IGeneralConfig(LibSharedAddress.CONFIG); + } } diff --git a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol index 2ac2219c..ac06d9ed 100644 --- a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol @@ -13,7 +13,6 @@ import "../../BaseIntegration.t.sol"; contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { using LibSort for address[]; - uint256 _nonce; uint256 _proposalExpiryDuration; uint256 _addingOperatorNum; address[] _addingOperators; @@ -27,8 +26,8 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); + _config.switchTo(Network.RoninLocal.key()); - _nonce = 1; _proposalExpiryDuration = 60; _addingOperatorNum = 3; @@ -48,17 +47,17 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { } function test_voteBridgeOperators() public { - GlobalProposal.GlobalProposalDetail memory globalProposal = _bridgeAdminInterface.createGlobalProposal({ + GlobalProposal.GlobalProposalDetail memory globalProposal = _roninProposalUtils.createGlobalProposal({ expiryTimestamp: block.timestamp + _proposalExpiryDuration, targetOption: GlobalProposal.TargetOption.BridgeManager, value: 0, calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingOperators, _addingGovernors)), gasAmount: 500_000, - nonce: _nonce + nonce: _roninNonce++ }); SignatureConsumer.Signature[] memory signatures = - _bridgeAdminInterface.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + _roninProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); vm.prank(_param.roninBridgeManager.governors[0]); _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, _supports, signatures); diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol index 358c4810..311aefff 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol @@ -8,6 +8,7 @@ import "../../BaseIntegration.t.sol"; contract SetConfig_MainchainManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); + _config.switchTo(Network.EthLocal.key()); } function test_configBridgeContractCorrectly() external { diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index d27aa9d4..887ca08d 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -8,6 +8,7 @@ import "../../BaseIntegration.t.sol"; contract SetConfig_RoninBridgeManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); + _config.switchTo(Network.RoninLocal.key()); } function test_configBridgeContractCorrectly() external { diff --git a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol index 1cbf75b6..ea51c8b9 100644 --- a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol +++ b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol @@ -16,23 +16,25 @@ contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); + _config.switchTo(Network.EthLocal.key()); + _domainSeparator = _mainchainGatewayV3.DOMAIN_SEPARATOR(); _withdrawalReceipt.id = 0; _withdrawalReceipt.kind = Transfer.Kind.Withdrawal; _withdrawalReceipt.ronin.addr = makeAddr("requester"); - _withdrawalReceipt.ronin.tokenAddr = address(_weth); + _withdrawalReceipt.ronin.tokenAddr = address(_roninWeth); _withdrawalReceipt.ronin.chainId = _param.test.roninChainId; _withdrawalReceipt.mainchain.addr = makeAddr("recipient"); - _withdrawalReceipt.mainchain.tokenAddr = address(_weth); - _withdrawalReceipt.mainchain.chainId = block.chainid; + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainWeth); + _withdrawalReceipt.mainchain.chainId = _param.test.mainchainChainId; _withdrawalReceipt.info.erc = Token.Standard.ERC20; _withdrawalReceipt.info.id = 0; _withdrawalReceipt.info.quantity = 0; vm.deal(address(_mainchainGatewayV3), 10 ether); vm.prank(address(_mainchainGatewayV3)); - _weth.deposit{ value: 10 ether }(); + _mainchainWeth.deposit{ value: 10 ether }(); } function test_submitWithdrawal() public { diff --git a/test/helpers/BridgeAdminInterface.t.sol b/test/helpers/ProposalUtils.t.sol similarity index 98% rename from test/helpers/BridgeAdminInterface.t.sol rename to test/helpers/ProposalUtils.t.sol index 993c698b..8e4be079 100644 --- a/test/helpers/BridgeAdminInterface.t.sol +++ b/test/helpers/ProposalUtils.t.sol @@ -10,7 +10,7 @@ import { Ballot } from "@ronin/contracts/libraries/Ballot.sol"; import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; import { Utils } from "script/utils/Utils.sol"; -contract BridgeAdminInterface is Utils, Test { +contract ProposalUtils is Utils, Test { using ECDSA for bytes32; using GlobalProposal for GlobalProposal.GlobalProposalDetail; using Proposal for Proposal.ProposalDetail; diff --git a/test/utils/Utils.sol b/test/utils/Utils.sol index 3048d22c..4ca554e3 100644 --- a/test/utils/Utils.sol +++ b/test/utils/Utils.sol @@ -6,7 +6,12 @@ import { StdUtils } from "forge-std/StdUtils.sol"; import { PRBMathUtils } from "@prb/math/src/test/Utils.sol"; abstract contract Utils is StdUtils, PRBMathUtils { - function getEmptyAddressArray() internal pure returns (address[] memory arr) {} + function getEmptyAddressArray() internal pure returns (address[] memory arr) { } + + function wrapUint(uint256 val) internal pure returns (uint256[] memory arr) { + arr = new uint256[](1); + arr[0] = val; + } function wrapAddress(address val) internal pure returns (address[] memory arr) { arr = new address[](1); From fdc99d86485381c2864ecbc7b82221dfcf9da53b Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 01:05:35 +0700 Subject: [PATCH 49/73] chore: contract sizes --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index cf8b5bcd..81d81e1d 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -15,7 +15,7 @@ | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | -| GeneralConfig | 20.128 | 4.448 | +| GeneralConfig | 20.616 | 3.96 | | GeneralConfigExtended | 20.35 | 4.226 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | From 4db94299a043e52717c92f585e216e234442ed16 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 01:19:41 +0700 Subject: [PATCH 50/73] ci: start 2 local chains in CI --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ad49e528..0e476fd8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,5 +42,7 @@ jobs: - name: Run Forge tests run: | + anvil --chain-id 2024 --port 8546 + anvil --chain-id 2 --port 8547 forge test -vvv id: test From dadb201a9ec3e41b945ab5378064d8b577bcceba Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 01:24:47 +0700 Subject: [PATCH 51/73] fix(ci): start 2 local chain at backgrounds --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0e476fd8..1b97da34 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: - name: Run Forge tests run: | - anvil --chain-id 2024 --port 8546 - anvil --chain-id 2 --port 8547 + anvil --chain-id 2024 --port 8546 & + anvil --chain-id 2 --port 8547 & forge test -vvv id: test From 44f1f073f34c85e99deb914a3026639881cfccc5 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 21 Jan 2024 15:57:03 +0700 Subject: [PATCH 52/73] test: migrate BridgeManager hardhat tests --- test/bridge/integration/BaseIntegration.t.sol | 1 + ...oteBridgeOperator.RoninBridgeManager.t.sol | 142 ++++++++++++++++-- 2 files changed, 132 insertions(+), 11 deletions(-) diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 665d1711..0d5a47fb 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -18,6 +18,7 @@ import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBrid import { MockERC20 } from "@ronin/contracts/mocks/token/MockERC20.sol"; import { MockWrappedToken } from "@ronin/contracts/mocks/token/MockWrappedToken.sol"; import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { Proposal } from "@ronin/contracts/libraries/Proposal.sol"; import { Token } from "@ronin/contracts/libraries/Token.sol"; import { IWETH } from "@ronin/contracts/interfaces/IWETH.sol"; import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; diff --git a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol index ac06d9ed..4bc604b3 100644 --- a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol @@ -8,9 +8,14 @@ import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; import { IBridgeManager } from "@ronin/contracts/interfaces/bridge/IBridgeManager.sol"; import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; import { LibSort } from "solady/utils/LibSort.sol"; + import "../../BaseIntegration.t.sol"; contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { + event ProposalVoted(bytes32 indexed proposalHash, address indexed voter, Ballot.VoteType support, uint256 weight); + + error ErrInvalidProposalNonce(bytes4 sig); + using LibSort for address[]; uint256 _proposalExpiryDuration; @@ -22,11 +27,18 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { address[] _beforeRelayedOperators; address[] _beforeRelayedGovernors; + address[] _afterRelayedOperators; + address[] _afterRelayedGovernors; + Ballot.VoteType[] _supports; + GlobalProposal.GlobalProposalDetail _globalProposal; + SignatureConsumer.Signature[] _signatures; + + bytes32 _anyValue; + function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); _proposalExpiryDuration = 60; _addingOperatorNum = 3; @@ -39,27 +51,135 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { _supports[i] = Ballot.VoteType.For; } - for (uint256 i; i < _addingOperatorNum; i++) { - _addingOperators.push(makeAddr(string.concat("adding-operator", vm.toString(i)))); - _addingGovernors.push(makeAddr(string.concat("adding-governor", vm.toString(i)))); - _voteWeights.push(uint96(uint256(100))); - } + _generateAddingOperators(_addingOperatorNum); } - function test_voteBridgeOperators() public { - GlobalProposal.GlobalProposalDetail memory globalProposal = _roninProposalUtils.createGlobalProposal({ + function test_voteAddBridgeOperatorsProposal() public { + _config.switchTo(Network.RoninLocal.key()); + + _globalProposal = _roninProposalUtils.createGlobalProposal({ expiryTimestamp: block.timestamp + _proposalExpiryDuration, targetOption: GlobalProposal.TargetOption.BridgeManager, value: 0, - calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingOperators, _addingGovernors)), + calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingGovernors, _addingOperators)), gasAmount: 500_000, nonce: _roninNonce++ }); SignatureConsumer.Signature[] memory signatures = - _roninProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + _roninProposalUtils.generateSignaturesGlobal(_globalProposal, _param.test.governorPKs); + + for (uint256 i; i < signatures.length; i++) { + _signatures.push(signatures[i]); + } + + vm.expectEmit(false, true, true, true); + emit ProposalVoted(_anyValue, _param.roninBridgeManager.governors[0], Ballot.VoteType.For, 100); + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(_globalProposal, _supports, _signatures); + + assertEq( + _roninBridgeManager.globalProposalVoted(_globalProposal.nonce, _param.roninBridgeManager.governors[0]), true + ); + assertEq(_roninBridgeManager.getBridgeOperators(), _afterRelayedOperators); + } + + function test_relayAddBridgeOperator() public { + test_voteAddBridgeOperatorsProposal(); + + _config.switchTo(Network.EthLocal.key()); + + // before relay + assertEq(_mainchainBridgeManager.globalProposalRelayed(_globalProposal.nonce), false); + assertEq(_mainchainBridgeManager.getBridgeOperators(), _beforeRelayedOperators); + + vm.prank(_param.mainchainBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(_globalProposal, _supports, _signatures); + + // after relay + assertEq(_mainchainBridgeManager.globalProposalRelayed(_globalProposal.nonce), true); + assertEq(_mainchainBridgeManager.getBridgeOperators(), _afterRelayedOperators); + } + + function test_RevertWhen_RelayAgain() public { + test_relayAddBridgeOperator(); + + vm.expectRevert( + abi.encodeWithSelector(ErrInvalidProposalNonce.selector, MainchainBridgeManager.relayGlobalProposal.selector) + ); + + vm.prank(_param.mainchainBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(_globalProposal, _supports, _signatures); + } + + function test_voteForLargeNumberOfOperators(uint256 seed) public { + uint256 numAddingOperators = seed % 10 + 10; + _generateAddingOperators(numAddingOperators); + + _config.switchTo(Network.RoninLocal.key()); + + _globalProposal = _roninProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + _proposalExpiryDuration, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingGovernors, _addingOperators)), + gasAmount: 200_000 * numAddingOperators, + nonce: _roninNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _roninProposalUtils.generateSignaturesGlobal(_globalProposal, _param.test.governorPKs); + + for (uint256 i; i < signatures.length; i++) { + _signatures.push(signatures[i]); + } + + vm.expectEmit(false, true, true, true); + emit ProposalVoted(_anyValue, _param.roninBridgeManager.governors[0], Ballot.VoteType.For, 100); vm.prank(_param.roninBridgeManager.governors[0]); - _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, _supports, signatures); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(_globalProposal, _supports, _signatures); + + assertEq( + _roninBridgeManager.globalProposalVoted(_globalProposal.nonce, _param.roninBridgeManager.governors[0]), true + ); + assertEq(_roninBridgeManager.getBridgeOperators(), _afterRelayedOperators); + } + + function test_relayExpiredProposal() public { + test_voteAddBridgeOperatorsProposal(); + + _config.switchTo(Network.EthLocal.key()); + vm.warp(block.timestamp + _proposalExpiryDuration + 1); + + // before relay + assertEq(_mainchainBridgeManager.globalProposalRelayed(_globalProposal.nonce), false); + assertEq(_mainchainBridgeManager.getBridgeOperators(), _beforeRelayedOperators); + + vm.prank(_param.mainchainBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(_globalProposal, _supports, _signatures); + + // after relay + assertEq(_mainchainBridgeManager.globalProposalRelayed(_globalProposal.nonce), true); + assertEq(_mainchainBridgeManager.getBridgeOperators(), _afterRelayedOperators); + } + + function _generateAddingOperators(uint256 num) internal { + delete _addingOperators; + delete _addingGovernors; + delete _voteWeights; + + _afterRelayedOperators = _beforeRelayedOperators; + _afterRelayedGovernors = _beforeRelayedGovernors; + + for (uint256 i; i < num; i++) { + _addingOperators.push(makeAddr(string.concat("adding-operator", vm.toString(i)))); + _addingGovernors.push(makeAddr(string.concat("adding-governor", vm.toString(i)))); + _voteWeights.push(uint96(uint256(100))); + + _afterRelayedOperators.push(_addingOperators[i]); + _afterRelayedGovernors.push(_addingGovernors[i]); + } } } From 5a30ecbd83742f591ed50e15dec64f0a7f3be69a Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 23 Jan 2024 09:36:50 +0700 Subject: [PATCH 53/73] test(RoninGatewayV3): test deposit vote --- script/BaseMigrationV2.sol | 47 +++++++ script/Migration.s.sol | 5 +- script/interfaces/ISharedArgument.sol | 1 + ...atorContract_OnlyTiming_ForHardhatTest.sol | 6 +- src/mocks/token/MockWrappedToken.sol | 7 ++ test/bridge/integration/BaseIntegration.t.sol | 48 +++++-- .../integration/bridge-tracking/.gitkeep | 0 .../depositVote.RoninGatewayV3.t.sol | 64 ++++++++++ test/helpers/ProposalUtils.t.sol | 26 +++- test/helpers/RoninBridgeAdminUtils.t.sol | 117 ++++++++++++++++++ 10 files changed, 303 insertions(+), 18 deletions(-) create mode 100644 script/BaseMigrationV2.sol create mode 100644 test/bridge/integration/bridge-tracking/.gitkeep create mode 100644 test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol create mode 100644 test/helpers/RoninBridgeAdminUtils.t.sol diff --git a/script/BaseMigrationV2.sol b/script/BaseMigrationV2.sol new file mode 100644 index 00000000..df622324 --- /dev/null +++ b/script/BaseMigrationV2.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import "foundry-deployment-kit/BaseMigration.s.sol"; + +abstract contract BaseMigrationV2 is BaseMigration { + using StdStyle for *; + using LibString for bytes32; + using LibProxy for address payable; + + function _deployProxy(TContract contractType, bytes memory args) + internal + virtual + override + logFn(string.concat("_deployProxy ", TContract.unwrap(contractType).unpackOne())) + returns (address payable deployed) + { + string memory contractName = CONFIG.getContractName(contractType); + + address logic = _deployLogic(contractType); + string memory proxyAbsolutePath = "TransparentUpgradeableProxyV2.sol:TransparentUpgradeableProxyV2"; + uint256 proxyNonce; + address proxyAdmin = _getProxyAdmin(); + assertTrue(proxyAdmin != address(0x0), "BaseMigration: Null ProxyAdmin"); + + (deployed, proxyNonce) = _deployRaw(proxyAbsolutePath, abi.encode(logic, proxyAdmin, args)); + + // validate proxy admin + address actualProxyAdmin = deployed.getProxyAdmin(); + assertEq( + actualProxyAdmin, + proxyAdmin, + string.concat( + "BaseMigration: Invalid proxy admin\n", + "Actual: ", + vm.toString(actualProxyAdmin), + "\nExpected: ", + vm.toString(proxyAdmin) + ) + ); + + CONFIG.setAddress(network(), contractType, deployed); + ARTIFACT_FACTORY.generateArtifact( + sender(), deployed, proxyAbsolutePath, string.concat(contractName, "Proxy"), args, proxyNonce + ); + } +} diff --git a/script/Migration.s.sol b/script/Migration.s.sol index 0a53c03f..e02aba5a 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.23; -import { BaseMigration } from "foundry-deployment-kit/BaseMigration.s.sol"; +import { BaseMigrationV2 } from "./BaseMigrationV2.sol"; import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol"; import { GeneralConfig } from "./GeneralConfig.sol"; import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; @@ -12,7 +12,7 @@ import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; import { Token } from "@ronin/contracts/libraries/Token.sol"; import { LibArray } from "./libraries/LibArray.sol"; -contract Migration is BaseMigration, Utils { +contract Migration is BaseMigrationV2, Utils { ISharedArgument public constant config = ISharedArgument(address(CONFIG)); function _configByteCode() internal virtual override returns (bytes memory) { @@ -21,6 +21,7 @@ contract Migration is BaseMigration, Utils { function _sharedArguments() internal virtual override returns (bytes memory rawArgs) { ISharedArgument.SharedParameter memory param; + param.test.numberOfBlocksInEpoch = 600; param.test.proxyAdmin = makeAddr("proxy-admin"); param.test.dposGA = makeAddr("governance-admin"); param.test.mainchainChainId = Network.EthLocal.chainId(); diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index eb5508f6..a9224938 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -89,6 +89,7 @@ interface ISharedArgument is IGeneralConfig { struct UnitTestParam { address proxyAdmin; + uint256 numberOfBlocksInEpoch; address dposGA; uint256 mainchainChainId; uint256 roninChainId; diff --git a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol index c73a2ab9..8b868cbf 100644 --- a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol +++ b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol @@ -46,7 +46,7 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { } function epochEndingAt(uint256 _block) public view returns (bool) { - for (uint _i = 0; _i < _epochs.length; _i++) { + for (uint256 _i = 0; _i < _epochs.length; _i++) { if (_block == _epochs[_i]) { return true; } @@ -77,6 +77,10 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { return _lastUpdatedPeriod; } + function setCurrentPeriod(uint256 period) external { + _lastUpdatedPeriod = period; + } + function currentPeriodStartAtBlock() public view returns (uint256) { return _currentPeriodStartAtBlock; } diff --git a/src/mocks/token/MockWrappedToken.sol b/src/mocks/token/MockWrappedToken.sol index 1cacf73c..8ad66878 100644 --- a/src/mocks/token/MockWrappedToken.sol +++ b/src/mocks/token/MockWrappedToken.sol @@ -42,6 +42,13 @@ contract MockWrappedToken { emit Withdrawal(msg.sender, wad); } + function mint(address account, uint256 amount) public { + require(account != address(0), "ERC20: mint to the zero address"); + + balanceOf[account] += amount; + emit Transfer(address(0), account, amount); + } + function totalSupply() public view returns (uint256) { return address(this).balance; } diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 0d5a47fb..7213cb03 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -26,6 +26,9 @@ import { Ballot } from "@ronin/contracts/libraries/Ballot.sol"; import { GlobalCoreGovernance } from "@ronin/contracts/extensions/sequential-governance/GlobalCoreGovernance.sol"; import { IHasContracts } from "@ronin/contracts/interfaces/collections/IHasContracts.sol"; import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import { TransparentUpgradeableProxyV2 } from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; +import { MockValidatorContract_OnlyTiming_ForHardhatTest } from + "@ronin/contracts/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol"; import { RoninBridgeManagerDeploy } from "@ronin/script/contracts/RoninBridgeManagerDeploy.s.sol"; import { RoninGatewayV3Deploy } from "@ronin/script/contracts/RoninGatewayV3Deploy.s.sol"; @@ -41,7 +44,7 @@ import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; import { ProposalUtils } from "test/helpers/ProposalUtils.t.sol"; -import { MockValidatorSet_ForFoundryTest } from "test/mocks/MockValidatorSet_ForFoundryTest.sol"; +import { RoninBridgeAdminUtils } from "test/helpers/RoninBridgeAdminUtils.t.sol"; contract BaseIntegration_Test is Base_Test { IGeneralConfig _config; @@ -67,9 +70,9 @@ contract BaseIntegration_Test is Base_Test { MockERC20 _mainchainSlp; MockERC20 _mainchainUsdc; - MockValidatorSet_ForFoundryTest _validatorSet; + MockValidatorContract_OnlyTiming_ForHardhatTest _validatorSet; - ProposalUtils _roninProposalUtils; + RoninBridgeAdminUtils _roninProposalUtils; ProposalUtils _mainchainProposalUtils; uint256 _roninNonce = 1; @@ -83,6 +86,9 @@ contract BaseIntegration_Test is Base_Test { _initializeRonin(); _initializeMainchain(); + + _changeAdminOnRonin(); + _changeAdminOnMainchain(); } function _deployContractsOnRonin() internal { @@ -101,10 +107,11 @@ contract BaseIntegration_Test is Base_Test { _roninSlp = new SLPDeploy().run(); _roninUsdc = new USDCDeploy().run(); - _validatorSet = new MockValidatorSet_ForFoundryTest(); - _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); - _roninProposalUtils = new ProposalUtils(_param.test.roninChainId); + _roninProposalUtils = new RoninBridgeAdminUtils( + _param.test.roninChainId, _param.test.governorPKs, _roninBridgeManager, _param.roninBridgeManager.governors[0] + ); + _validatorSet = new MockValidatorContract_OnlyTiming_ForHardhatTest(_param.test.numberOfBlocksInEpoch); } function _deployContractsOnMainchain() internal { @@ -121,7 +128,7 @@ contract BaseIntegration_Test is Base_Test { _mainchainUsdc = new USDCDeploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); - _mainchainProposalUtils = new ProposalUtils(_param.test.roninChainId); + _mainchainProposalUtils = new ProposalUtils(_param.test.roninChainId, _param.test.governorPKs); } function _initializeRonin() internal { @@ -159,8 +166,8 @@ contract BaseIntegration_Test is Base_Test { roninTokens[0] = address(_roninWeth); roninTokens[1] = address(_roninWron); roninTokens[2] = address(_roninAxs); - roninTokens[4] = address(_roninSlp); - roninTokens[3] = address(_roninUsdc); + roninTokens[3] = address(_roninSlp); + roninTokens[4] = address(_roninUsdc); } function _bridgeRewardInitialize() internal { @@ -194,10 +201,12 @@ contract BaseIntegration_Test is Base_Test { ISharedArgument.BridgeTrackingParam memory param = _param.bridgeTracking; _bridgeTracking.initialize(param.bridgeContract, param.validatorContract, param.startedAtBlock); - _bridgeTracking.initializeV2(); + // _bridgeTracking.initializeV2(); NOT INITIALIZE V2 _bridgeTracking.initializeV3( address(_roninBridgeManager), address(_bridgeSlash), address(_bridgeReward), _param.test.dposGA ); + vm.prank(_param.test.dposGA); + _bridgeTracking.initializeREP2(); } function _bridgeSlashInitialize() internal { @@ -417,6 +426,25 @@ contract BaseIntegration_Test is Base_Test { _mainchainGatewayV3.initializeV2(address(_mainchainBridgeManager)); } + function _changeAdminOnRonin() internal { + _config.switchTo(Network.RoninLocal.key()); + + vm.startPrank(_param.test.proxyAdmin); + TransparentUpgradeableProxyV2(payable(address(_roninGatewayV3))).changeAdmin(address(_roninBridgeManager)); + TransparentUpgradeableProxyV2(payable(address(_bridgeReward))).changeAdmin(address(_roninBridgeManager)); + TransparentUpgradeableProxyV2(payable(address(_bridgeSlash))).changeAdmin(address(_roninBridgeManager)); + TransparentUpgradeableProxyV2(payable(address(_bridgeTracking))).changeAdmin(address(_roninBridgeManager)); + vm.stopPrank(); + } + + function _changeAdminOnMainchain() internal { + _config.switchTo(Network.EthLocal.key()); + + vm.startPrank(_param.test.proxyAdmin); + TransparentUpgradeableProxyV2(payable(address(_mainchainGatewayV3))).changeAdmin(address(_mainchainBridgeManager)); + vm.stopPrank(); + } + function _deployGeneralConfig() internal { vm.makePersistent(LibSharedAddress.CONFIG); vm.allowCheatcodes(LibSharedAddress.CONFIG); diff --git a/test/bridge/integration/bridge-tracking/.gitkeep b/test/bridge/integration/bridge-tracking/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol new file mode 100644 index 00000000..419e3cf9 --- /dev/null +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import { IsolatedGovernance } from "@ronin/contracts/libraries/IsolatedGovernance.sol"; +import { VoteStatusConsumer } from "@ronin/contracts/interfaces/consumers/VoteStatusConsumer.sol"; +import { MockRoninGatewayV3Extended } from "@ronin/contracts/mocks/ronin/MockRoninGatewayV3Extended.sol"; +import "../BaseIntegration.t.sol"; + +contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { + using Transfer for Transfer.Receipt; + + Transfer.Receipt[] _depositReceipts; + + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + + bytes memory calldata_ = + abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE_TRACKING, address(_bridgeTracking))); + _roninProposalUtils.functionDelegateCallGlobal( + GlobalProposal.TargetOption.GatewayContract, _roninNonce++, calldata_ + ); + + vm.etch(address(_roninGatewayV3), address(new MockRoninGatewayV3Extended()).code); + } + + function test_depositVote() public { + Transfer.Receipt memory receipt = Transfer.Receipt({ + id: 0, + kind: Transfer.Kind.Deposit, + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), + mainchain: Token.Owner({ + addr: makeAddr("requester"), + tokenAddr: address(_mainchainWeth), + chainId: _param.test.mainchainChainId + }), + info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) + }); + + _depositReceipts.push(receipt); + receipt.id = 1; + _depositReceipts.push(receipt); + + for (uint256 i; i < _param.roninBridgeManager.num - 1; i++) { + vm.prank(_param.roninBridgeManager.bridgeOperators[i]); + _roninGatewayV3.tryBulkDepositFor(_depositReceipts); + } + + for (uint256 i = 0; i < _depositReceipts.length; i++) { + (VoteStatusConsumer.VoteStatus status,,,) = + _roninGatewayV3.depositVote(_depositReceipts[i].mainchain.chainId, _depositReceipts[i].id); + + assertEq(uint256(uint8(status)), uint256(uint8(VoteStatusConsumer.VoteStatus.Pending))); + + uint256 totalWeight = MockRoninGatewayV3Extended(payable(address(_roninGatewayV3))).getDepositVoteWeight( + _depositReceipts[i].mainchain.chainId, i, Transfer.hash(_depositReceipts[i]) + ); + assertEq(totalWeight, (_param.roninBridgeManager.num - 1) * 100); + } + } +} diff --git a/test/helpers/ProposalUtils.t.sol b/test/helpers/ProposalUtils.t.sol index 8e4be079..d5667a2d 100644 --- a/test/helpers/ProposalUtils.t.sol +++ b/test/helpers/ProposalUtils.t.sol @@ -16,11 +16,16 @@ contract ProposalUtils is Utils, Test { using Proposal for Proposal.ProposalDetail; uint256 _roninChainId; + uint256[] _signerPKs; bytes32 _domain; - constructor(uint256 roninChainId) { + constructor(uint256 roninChainId, uint256[] memory signerPKs) { _roninChainId = roninChainId; _domain = getBridgeManagerDomain(roninChainId); + + for (uint256 i; i < signerPKs.length; i++) { + _signerPKs.push(signerPKs[i]); + } } function createProposal( @@ -80,6 +85,14 @@ contract ProposalUtils is Utils, Test { return generateSignatures(proposal, signerPKs, Ballot.VoteType.For); } + function generateSignatures(Proposal.ProposalDetail memory proposal) + public + view + returns (SignatureConsumer.Signature[] memory sigs) + { + return generateSignatures(proposal, _signerPKs, Ballot.VoteType.For); + } + function generateSignaturesGlobal( GlobalProposal.GlobalProposalDetail memory proposal, uint256[] memory signerPKs, @@ -97,10 +110,13 @@ contract ProposalUtils is Utils, Test { return generateSignaturesGlobal(proposal, signerPKs, Ballot.VoteType.For); } - function defaultExpiryTimestamp() public view returns (uint256) { } - - function functionDelegateCallGlobal() public view { } - function upgradeGlobal() public view { } + function generateSignaturesGlobal(GlobalProposal.GlobalProposalDetail memory proposal) + public + view + returns (SignatureConsumer.Signature[] memory sigs) + { + return generateSignaturesGlobal(proposal, _signerPKs, Ballot.VoteType.For); + } function getBridgeManagerDomain(uint256 roninChainId) public pure returns (bytes32) { return keccak256( diff --git a/test/helpers/RoninBridgeAdminUtils.t.sol b/test/helpers/RoninBridgeAdminUtils.t.sol new file mode 100644 index 00000000..742dda9b --- /dev/null +++ b/test/helpers/RoninBridgeAdminUtils.t.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { RoninBridgeManager } from "@ronin/contracts/ronin/gateway/RoninBridgeManager.sol"; +import "./ProposalUtils.t.sol"; + +contract RoninBridgeAdminUtils is ProposalUtils { + RoninBridgeManager _contract; + address _sender; + + constructor(uint256 roninChainId, uint256[] memory signerPKs, RoninBridgeManager contract_, address sender) + ProposalUtils(roninChainId, signerPKs) + { + _contract = contract_; + _sender = sender; + } + + function defaultExpiryTimestamp() public view returns (uint256) { + return block.timestamp + 10; + } + + function functionDelegateCall(address to, uint256 nonce, bytes memory data) public { + Proposal.ProposalDetail memory proposal = this.createProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + target: to, + value: 0, + calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), + gasAmount: 2_000_000, + nonce: nonce + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignatures(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.proposeProposalStructAndCastVotes(proposal, supports_, signatures); + } + + function functionDelegateCallGlobal(GlobalProposal.TargetOption target, uint256 nonce, bytes memory data) public { + GlobalProposal.GlobalProposalDetail memory proposal = this.createGlobalProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOption: target, + value: 0, + calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), + gasAmount: 2_000_000, + nonce: nonce + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.proposeGlobalProposalStructAndCastVotes(proposal, supports_, signatures); + } + + function functionDelegateCallsGlobal( + GlobalProposal.TargetOption[] memory targetOptions, + uint256 nonce, + bytes[] memory datas + ) public { + uint256 length = targetOptions.length; + if (length != datas.length || length == 0) revert("Invalid length"); + + bytes[] memory calldatas = new bytes[](length); + uint256[] memory values = new uint256[](length); + uint256[] memory gasAmounts = new uint256[](length); + for (uint256 i; i < length; i++) { + calldatas[i] = abi.encodeWithSignature("functionDelegateCall(bytes)", datas[i]); + values[i] = 0; + gasAmounts[i] = 2_000_000; + } + + GlobalProposal.GlobalProposalDetail memory proposal = GlobalProposal.GlobalProposalDetail({ + nonce: nonce, + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOptions: targetOptions, + values: values, + calldatas: calldatas, + gasAmounts: gasAmounts + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.proposeGlobalProposalStructAndCastVotes(proposal, supports_, signatures); + } + + function upgradeGlobal(GlobalProposal.TargetOption targetOption, uint256 nonce, bytes memory data) public { + GlobalProposal.GlobalProposalDetail memory proposal = this.createGlobalProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOption: targetOption, + value: 0, + calldata_: abi.encodeWithSignature("upgradeTo(bytes)", data), + gasAmount: 2_000_000, + nonce: nonce + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.proposeGlobalProposalStructAndCastVotes(proposal, supports_, signatures); + } +} From 763a1ffad7b3876acf9f3522daa50b066b5b0637 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 23 Jan 2024 09:37:09 +0700 Subject: [PATCH 54/73] chore: storage layout --- logs/contract-code-sizes.log | 4 ++-- logs/storage/BaseMigrationV2.sol:BaseMigrationV2.log | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 logs/storage/BaseMigrationV2.sol:BaseMigrationV2.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 81d81e1d..84a5dc26 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -44,9 +44,9 @@ | MockRoninBridgeManager | 24.601 | -0.025 | | MockRoninGatewayV3Extended | 20.048 | 4.528 | | MockTUint256Slot | 2.73 | 21.846 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.115 | 23.461 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.158 | 23.418 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | -| MockWrappedToken | 1.978 | 22.598 | +| MockWrappedToken | 2.225 | 22.351 | | PRBMathUtils | 0.063 | 24.513 | | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | diff --git a/logs/storage/BaseMigrationV2.sol:BaseMigrationV2.log b/logs/storage/BaseMigrationV2.sol:BaseMigrationV2.log new file mode 100644 index 00000000..3f9c1ed2 --- /dev/null +++ b/logs/storage/BaseMigrationV2.sol:BaseMigrationV2.log @@ -0,0 +1,12 @@ +script/BaseMigrationV2.sol:BaseMigrationV2:stdstore (storage_slot: 0) (offset: 0) (type: struct StdStorage) (numberOfBytes: 224) +script/BaseMigrationV2.sol:BaseMigrationV2:stdChainsInitialized (storage_slot: 7) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:chains (storage_slot: 8) (offset: 0) (type: mapping(string => struct StdChains.Chain)) (numberOfBytes: 32) +script/BaseMigrationV2.sol:BaseMigrationV2:defaultRpcUrls (storage_slot: 9) (offset: 0) (type: mapping(string => string)) (numberOfBytes: 32) +script/BaseMigrationV2.sol:BaseMigrationV2:idToAlias (storage_slot: 10) (offset: 0) (type: mapping(uint256 => string)) (numberOfBytes: 32) +script/BaseMigrationV2.sol:BaseMigrationV2:fallbackToDefaultRpcUrls (storage_slot: 11) (offset: 0) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:gasMeteringOff (storage_slot: 11) (offset: 1) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:IS_SCRIPT (storage_slot: 11) (offset: 2) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:IS_TEST (storage_slot: 11) (offset: 3) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:_failed (storage_slot: 11) (offset: 4) (type: bool) (numberOfBytes: 1) +script/BaseMigrationV2.sol:BaseMigrationV2:_overriddenArgs (storage_slot: 12) (offset: 0) (type: bytes) (numberOfBytes: 32) +script/BaseMigrationV2.sol:BaseMigrationV2:_deployScript (storage_slot: 13) (offset: 0) (type: mapping(TContract => contract IMigrationScript)) (numberOfBytes: 32) \ No newline at end of file From c7170b29a5c8ab8de03e8a7e0e8297e4402eb99e Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Tue, 23 Jan 2024 11:03:08 +0700 Subject: [PATCH 55/73] test(RoninGatewayV3): add more test --- .../depositVote.RoninGatewayV3.t.sol | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index 419e3cf9..ad14ddcb 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -13,6 +13,7 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { using Transfer for Transfer.Receipt; Transfer.Receipt[] _depositReceipts; + uint256 _numOperatorsForVoteExecuted; function setUp() public virtual override { super.setUp(); @@ -25,9 +26,7 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { ); vm.etch(address(_roninGatewayV3), address(new MockRoninGatewayV3Extended()).code); - } - function test_depositVote() public { Transfer.Receipt memory receipt = Transfer.Receipt({ id: 0, kind: Transfer.Kind.Deposit, @@ -44,7 +43,13 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { receipt.id = 1; _depositReceipts.push(receipt); - for (uint256 i; i < _param.roninBridgeManager.num - 1; i++) { + _numOperatorsForVoteExecuted = + _param.roninBridgeManager.bridgeOperators.length * _param.roninBridgeManager.num / _param.roninBridgeManager.denom; + } + + // @dev Should be able to bulk deposits using bridge operator accounts + function test_tryBulkDepositFor_NotExecuted() public { + for (uint256 i; i < _numOperatorsForVoteExecuted - 1; i++) { vm.prank(_param.roninBridgeManager.bridgeOperators[i]); _roninGatewayV3.tryBulkDepositFor(_depositReceipts); } @@ -58,7 +63,27 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { uint256 totalWeight = MockRoninGatewayV3Extended(payable(address(_roninGatewayV3))).getDepositVoteWeight( _depositReceipts[i].mainchain.chainId, i, Transfer.hash(_depositReceipts[i]) ); - assertEq(totalWeight, (_param.roninBridgeManager.num - 1) * 100); + assertEq(totalWeight, (_numOperatorsForVoteExecuted - 1) * 100); + } + } + + // Should be able to continue to vote on the votes, the later vote is not counted but is tracked + function test_tryBulkDepositFor_Executed() public { + test_tryBulkDepositFor_NotExecuted(); + + vm.prank(_param.roninBridgeManager.bridgeOperators[_numOperatorsForVoteExecuted - 1]); + _roninGatewayV3.tryBulkDepositFor(_depositReceipts); + + for (uint256 i = 0; i < _depositReceipts.length; i++) { + (VoteStatusConsumer.VoteStatus status,,,) = + _roninGatewayV3.depositVote(_depositReceipts[i].mainchain.chainId, _depositReceipts[i].id); + + assertEq(uint256(uint8(status)), uint256(uint8(VoteStatusConsumer.VoteStatus.Executed))); + + uint256 totalWeight = MockRoninGatewayV3Extended(payable(address(_roninGatewayV3))).getDepositVoteWeight( + _depositReceipts[i].mainchain.chainId, i, Transfer.hash(_depositReceipts[i]) + ); + assertEq(totalWeight, (_numOperatorsForVoteExecuted) * 100); } } } From 7e8dbaeae8f6e6e9e66fc5d66bed4f8887306e6b Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 25 Jan 2024 11:28:10 +0700 Subject: [PATCH 56/73] test: hardhat test of bridge tracking --- ...IsApprovedInLastEpoch.BridgeTracking.t.sol | 209 ++++++++++++++++++ ...otApprovedInLastEpoch.BridgeTracking.t.sol | 139 ++++++++++++ .../depositVote.RoninGatewayV3.t.sol | 4 +- test/helpers/RoninBridgeAdminUtils.t.sol | 16 +- 4 files changed, 355 insertions(+), 13 deletions(-) create mode 100644 test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol create mode 100644 test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol diff --git a/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol new file mode 100644 index 00000000..f1d03985 --- /dev/null +++ b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol @@ -0,0 +1,209 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IBridgeTracking } from "@ronin/contracts/interfaces/bridge/IBridgeTracking.sol"; +import { MockGatewayForTracking } from "@ronin/contracts/mocks/MockGatewayForTracking.sol"; +import "../BaseIntegration.t.sol"; + +// Epoch e-1 test: Vote is approved in the last epoch of period +contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegration_Test { + MockGatewayForTracking _mockRoninGatewayV3; + + uint256 _period; + uint256 _receiptId; + IBridgeTracking.VoteKind _receiptKind; + address[] _operators; + + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + vm.coinbase(makeAddr("coin-base-addr")); + + // upgrade ronin gateway v3 + _mockRoninGatewayV3 = new MockGatewayForTracking(address(_bridgeTracking)); + + bytes memory calldata_ = + abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, address(_mockRoninGatewayV3))); + _roninProposalUtils.functionDelegateCall(address(_bridgeTracking), calldata_); + + vm.deal(address(_bridgeReward), 10 ether); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + _period = _validatorSet.currentPeriod(); + _receiptId = 1; + _receiptKind = IBridgeTracking.VoteKind.Withdrawal; + + _operators.push(_param.roninBridgeManager.bridgeOperators[0]); + _operators.push(_param.roninBridgeManager.bridgeOperators[1]); + } + + // Epoch e-1: Vote & Approve & Vote > Should not record when not approved yet. Vote in last epoch (e-1). + function test_epochE1_notRecordVoteAndBallot_receiptWithoutApproval() public { + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, _operators); + + assertEq(_bridgeTracking.totalVote(_period), 0); + assertEq(_bridgeTracking.totalBallot(_period), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); + } + + // Epoch e-1: Vote & Approve & Vote > Should not record when approve. Approve in last epoch (e-1). + function test_epochE2_notRecordVoteAndBallot_approveInLastEpoch() public { + test_epochE1_notRecordVoteAndBallot_receiptWithoutApproval(); + + _mockRoninGatewayV3.sendApprovedVote(_receiptKind, _receiptId); + + assertEq(_bridgeTracking.totalVote(_period), 0); + assertEq(_bridgeTracking.totalBallot(_period), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); + } + + // Epoch e-1: Vote & Approve & Vote > Should not record even after approved. Vote in last epoch (e-1). + function test_epochE1_notRecordVoteAndBallot_voteInLastEpoch() public { + test_epochE2_notRecordVoteAndBallot_approveInLastEpoch(); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[2])); + + assertEq(_bridgeTracking.totalVote(_period), 0); + assertEq(_bridgeTracking.totalBallot(_period), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), 0); + } + + // Epoch e: vote > Should not record for current period metric when wrapping up period. Query in next epoch (e), for current period (p-1): return 0. + function test_epochE_notRecordForCurrentPeriod_WhenWrappingUpPeriod() public { + test_epochE1_notRecordVoteAndBallot_voteInLastEpoch(); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + uint256 lastPeriod = _period; + uint256 newPeriod = _validatorSet.currentPeriod(); + _period = newPeriod; + assertTrue(newPeriod != lastPeriod); + + assertEq(_bridgeTracking.totalVote(lastPeriod), 0); + assertEq(_bridgeTracking.totalBallot(lastPeriod), 0); + assertEq(_bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[1]), 0); + assertEq(_bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[2]), 0); + } + + // Epoch e: vote > Should record for the buffer metric when wrapping up period. Query in next epoch (e), for next period (p): return >0 (buffer). + function test_epochE_recordBufferMetricForNewPeriod_WhenWrappingUpPeriod() public { + test_epochE_notRecordForCurrentPeriod_WhenWrappingUpPeriod(); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 3); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + } + + // Epoch e: vote > Should record new ballot for the buffer metric + function test_epochE_recordNewBallotForBufferMetric() public { + test_epochE_recordBufferMetricForNewPeriod_WhenWrappingUpPeriod(); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[3])); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 4); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); + + _wrapUpEpochAndMine(); + + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 4); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); + } + + // Epoch 2e-1: vote > Should record new ballot for the buffer metric + function test_epoch2E_1_recordNewBallotForBufferMetric() public { + test_epochE_recordNewBallotForBufferMetric(); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[4])); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 5); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[4]), expectedTotalVotes); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 5); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[4]), expectedTotalVotes); + } + + // Epoch 3e: vote > Should not record new ballot. And the period metric is finalized as in epoch 2e-1. + function test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInEpoch2E_1() public { + test_epoch2E_1_recordNewBallotForBufferMetric(); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[5])); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 5); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[4]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[5]), 0); + } + + // Epoch 3e: vote > Should the metric of the new period get reset. + function test_epoch3E_metricOfNewPeriodGetReset() public { + test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInEpoch2E_1(); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + uint256 lastPeriod = _period; + uint256 newPeriod = _validatorSet.currentPeriod(); + _period = newPeriod; + assertTrue(newPeriod != lastPeriod); + + assertEq(_bridgeTracking.totalVote(newPeriod), 0); + assertEq(_bridgeTracking.totalBallot(newPeriod), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[1]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[2]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[3]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[4]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[5]), 0); + } + + function _wrapUpEpochAndMine() internal { + _validatorSet.endEpoch(); + vm.prank(block.coinbase); + _validatorSet.wrapUpEpoch(); + // mine a dummy block + vm.roll(block.number + 1); + } + + function _setTimestampToPeriodEnding() internal { + vm.warp(((block.timestamp / 86400) + 1) * 86400); + } +} diff --git a/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol new file mode 100644 index 00000000..431f82db --- /dev/null +++ b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IBridgeTracking } from "@ronin/contracts/interfaces/bridge/IBridgeTracking.sol"; +import { MockGatewayForTracking } from "@ronin/contracts/mocks/MockGatewayForTracking.sol"; +import "../BaseIntegration.t.sol"; + +// Epoch e-2 test: Vote is approved NOT in the last epoch +contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegration_Test { + MockGatewayForTracking _mockRoninGatewayV3; + + uint256 _period; + uint256 _receiptId; + IBridgeTracking.VoteKind _receiptKind; + address[] _operators; + + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + vm.coinbase(makeAddr("coin-base-addr")); + + // upgrade ronin gateway v3 + _mockRoninGatewayV3 = new MockGatewayForTracking(address(_bridgeTracking)); + + bytes memory calldata_ = + abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, address(_mockRoninGatewayV3))); + _roninProposalUtils.functionDelegateCall(address(_bridgeTracking), calldata_); + + vm.deal(address(_bridgeReward), 10 ether); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + _period = _validatorSet.currentPeriod(); + _receiptId = 0; + _receiptKind = IBridgeTracking.VoteKind.Deposit; + + _operators.push(_param.roninBridgeManager.bridgeOperators[0]); + _operators.push(_param.roninBridgeManager.bridgeOperators[1]); + } + + // Epoch e-2: Vote & Approve & Vote. > Should not record the receipts which is not approved yet + function test_epochE2_notRecordVoteAndBallot_receiptWithoutApproval() public { + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, _operators); + + assertEq(_bridgeTracking.totalVote(_period), 0); + assertEq(_bridgeTracking.totalBallot(_period), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); + } + + // Epoch e-2: Vote & Approve & Vote. > Should be able to approve the receipts and not record the approved receipts once the epoch is not yet wrapped up + function test_epochE2_recordVoteAndBallot_receiptIsApproved() public { + test_epochE2_notRecordVoteAndBallot_receiptWithoutApproval(); + + _mockRoninGatewayV3.sendApprovedVote(_receiptKind, _receiptId); + assertEq(_bridgeTracking.totalVote(_period), 0); + assertEq(_bridgeTracking.totalBallot(_period), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); + } + + // Epoch e-1: Continue voting for the vote of e-2 > Should be able to record the approved votes/ballots when the epoch is wrapped up + function test_epochE1_continueVotingForVoteOfE2() public { + test_epochE2_recordVoteAndBallot_receiptIsApproved(); + + _wrapUpEpochAndMine(); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 2); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + } + + // Epoch e-1: Continue voting for the vote of e-2 > Should be able to record the approved votes/ballots when the epoch is wrapped up + function test_epochE1_recordForWhoVoteLately_onceRequestIsApproved() public { + test_epochE1_continueVotingForVoteOfE2(); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[2])); + + _wrapUpEpochAndMine(); + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 3); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes); + } + + // Epoch e (first epoch of new period): Continue voting for vote in e-2 > Should not record in the next period + function test_epochE_continueVotingForVoteInE2_notRecordInNextPeriod() public { + test_epochE1_recordForWhoVoteLately_onceRequestIsApproved(); + + _setTimestampToPeriodEnding(); + _wrapUpEpochAndMine(); + + uint256 lastPeriod = _period; + uint256 newPeriod = _validatorSet.currentPeriod(); + assertTrue(newPeriod != lastPeriod); + + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[3])); + + uint256 expectedTotalVotes = 1; + assertEq(_bridgeTracking.totalVote(lastPeriod), expectedTotalVotes); + assertEq(_bridgeTracking.totalBallot(lastPeriod), expectedTotalVotes * 3); + assertEq( + _bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[0]), expectedTotalVotes + ); + assertEq( + _bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[1]), expectedTotalVotes + ); + assertEq( + _bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[2]), expectedTotalVotes + ); + assertEq(_bridgeTracking.totalBallotOf(lastPeriod, _param.roninBridgeManager.bridgeOperators[3]), 0); + + _period = newPeriod; + + assertEq(_bridgeTracking.totalVote(newPeriod), 0); + assertEq(_bridgeTracking.totalBallot(newPeriod), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[0]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[1]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[2]), 0); + assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[3]), 0); + } + + function _wrapUpEpochAndMine() internal { + _validatorSet.endEpoch(); + vm.prank(block.coinbase); + _validatorSet.wrapUpEpoch(); + // mine a dummy block + vm.roll(block.number + 1); + } + + function _setTimestampToPeriodEnding() internal { + vm.warp(((block.timestamp / 86400) + 1) * 86400); + } +} diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index ad14ddcb..782bcd3e 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -21,9 +21,7 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { bytes memory calldata_ = abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE_TRACKING, address(_bridgeTracking))); - _roninProposalUtils.functionDelegateCallGlobal( - GlobalProposal.TargetOption.GatewayContract, _roninNonce++, calldata_ - ); + _roninProposalUtils.functionDelegateCallGlobal(GlobalProposal.TargetOption.GatewayContract, calldata_); vm.etch(address(_roninGatewayV3), address(new MockRoninGatewayV3Extended()).code); diff --git a/test/helpers/RoninBridgeAdminUtils.t.sol b/test/helpers/RoninBridgeAdminUtils.t.sol index 742dda9b..180d88fe 100644 --- a/test/helpers/RoninBridgeAdminUtils.t.sol +++ b/test/helpers/RoninBridgeAdminUtils.t.sol @@ -19,14 +19,14 @@ contract RoninBridgeAdminUtils is ProposalUtils { return block.timestamp + 10; } - function functionDelegateCall(address to, uint256 nonce, bytes memory data) public { + function functionDelegateCall(address to, bytes memory data) public { Proposal.ProposalDetail memory proposal = this.createProposal({ expiryTimestamp: this.defaultExpiryTimestamp(), target: to, value: 0, calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), gasAmount: 2_000_000, - nonce: nonce + nonce: _contract.round(_roninChainId) + 1 }); SignatureConsumer.Signature[] memory signatures = this.generateSignatures(proposal); @@ -39,14 +39,14 @@ contract RoninBridgeAdminUtils is ProposalUtils { _contract.proposeProposalStructAndCastVotes(proposal, supports_, signatures); } - function functionDelegateCallGlobal(GlobalProposal.TargetOption target, uint256 nonce, bytes memory data) public { + function functionDelegateCallGlobal(GlobalProposal.TargetOption target, bytes memory data) public { GlobalProposal.GlobalProposalDetail memory proposal = this.createGlobalProposal({ expiryTimestamp: this.defaultExpiryTimestamp(), targetOption: target, value: 0, calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), gasAmount: 2_000_000, - nonce: nonce + nonce: _contract.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); @@ -59,11 +59,7 @@ contract RoninBridgeAdminUtils is ProposalUtils { _contract.proposeGlobalProposalStructAndCastVotes(proposal, supports_, signatures); } - function functionDelegateCallsGlobal( - GlobalProposal.TargetOption[] memory targetOptions, - uint256 nonce, - bytes[] memory datas - ) public { + function functionDelegateCallsGlobal(GlobalProposal.TargetOption[] memory targetOptions, bytes[] memory datas) public { uint256 length = targetOptions.length; if (length != datas.length || length == 0) revert("Invalid length"); @@ -77,7 +73,7 @@ contract RoninBridgeAdminUtils is ProposalUtils { } GlobalProposal.GlobalProposalDetail memory proposal = GlobalProposal.GlobalProposalDetail({ - nonce: nonce, + nonce: _contract.round(0) + 1, expiryTimestamp: this.defaultExpiryTimestamp(), targetOptions: targetOptions, values: values, From d34969d1d1376fcc510617f39dab0f6e5d27cfe4 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 25 Jan 2024 13:54:54 +0700 Subject: [PATCH 57/73] feat: set-up pause enforcer --- .github/workflows/test.yml | 4 +- script/GeneralConfig.sol | 3 + script/Migration.s.sol | 97 +++++++++++-------- .../contracts/MainchainGatewayV3Deploy.s.sol | 1 - .../MainchainPauseEnforcerDeploy.s.sol | 13 +++ .../contracts/RoninPauseEnforcerDeploy.s.sol | 13 +++ script/interfaces/ISharedArgument.sol | 11 +++ script/utils/Contract.sol | 5 + test/bridge/integration/BaseIntegration.t.sol | 63 ++++++++++++ 9 files changed, 164 insertions(+), 46 deletions(-) create mode 100644 script/contracts/MainchainPauseEnforcerDeploy.s.sol create mode 100644 script/contracts/RoninPauseEnforcerDeploy.s.sol diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1b97da34..307a127f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: - name: Run Forge tests run: | - anvil --chain-id 2024 --port 8546 & - anvil --chain-id 2 --port 8547 & + anvil --chain-id 2024 --port 8546 --block-time 1 & + anvil --chain-id 2 --port 8547 --block-time 1 & forge test -vvv id: test diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index ccf4b9a8..57895eb2 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -71,6 +71,9 @@ contract GeneralConfig is BaseGeneralConfig, Utils { _contractNameMap[Contract.AXS.key()] = "MockERC20"; _contractNameMap[Contract.SLP.key()] = "MockERC20"; _contractNameMap[Contract.USDC.key()] = "MockERC20"; + + _contractNameMap[Contract.RoninPauseEnforcer.key()] = "PauseEnforcer"; + _contractNameMap[Contract.MainchainPauseEnforcer.key()] = "PauseEnforcer"; } function _mapContractName(Contract contractEnum) internal { diff --git a/script/Migration.s.sol b/script/Migration.s.sol index e02aba5a..10697dbc 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -21,55 +21,57 @@ contract Migration is BaseMigrationV2, Utils { function _sharedArguments() internal virtual override returns (bytes memory rawArgs) { ISharedArgument.SharedParameter memory param; - param.test.numberOfBlocksInEpoch = 600; - param.test.proxyAdmin = makeAddr("proxy-admin"); - param.test.dposGA = makeAddr("governance-admin"); - param.test.mainchainChainId = Network.EthLocal.chainId(); - param.test.roninChainId = Network.RoninLocal.chainId(); - - // tokens - param.weth.name = "Wrapped WETH"; - param.weth.symbol = "WETH"; - param.wron.name = "Wrapped RON"; - param.wron.symbol = "WRON"; - param.axs.name = "Axie Infinity Shard"; - param.axs.symbol = "AXS"; - param.slp.name = "Smooth Love Potion"; - param.slp.symbol = "SLP"; - param.usdc.name = "USD Coin"; - param.usdc.symbol = "USDC"; - - uint256 num = 6; - address[] memory operatorAddrs = new address[](num); - address[] memory governorAddrs = new address[](num); - uint256[] memory operatorPKs = new uint256[](num); - uint256[] memory governorPKs = new uint256[](num); - uint96[] memory voteWeights = new uint96[](num); - GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](0); - address[] memory targets = new address[](0); - - for (uint256 i; i < num; i++) { - (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); - (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); - - operatorAddrs[i] = addrOperator; - governorAddrs[i] = addrGovernor; - operatorPKs[i] = pkOperator; - governorPKs[i] = pkGovernor; - voteWeights[i] = 100; - } - - LibArray.inlineSortByValue(operatorPKs, LibArray.toUint256s(operatorAddrs)); - LibArray.inlineSortByValue(governorPKs, LibArray.toUint256s(governorAddrs)); - - param.test.operatorPKs = operatorPKs; - param.test.governorPKs = governorPKs; if (network() == Network.Goerli.key()) { // Undefined } else if (network() == DefaultNetwork.RoninTestnet.key()) { // Undefined } else if (network() == Network.RoninLocal.key() || network() == Network.EthLocal.key()) { + // test + param.test.numberOfBlocksInEpoch = 600; + param.test.proxyAdmin = makeAddr("proxy-admin"); + param.test.dposGA = makeAddr("governance-admin"); + param.test.mainchainChainId = Network.EthLocal.chainId(); + param.test.roninChainId = Network.RoninLocal.chainId(); + + // tokens + param.weth.name = "Wrapped WETH"; + param.weth.symbol = "WETH"; + param.wron.name = "Wrapped RON"; + param.wron.symbol = "WRON"; + param.axs.name = "Axie Infinity Shard"; + param.axs.symbol = "AXS"; + param.slp.name = "Smooth Love Potion"; + param.slp.symbol = "SLP"; + param.usdc.name = "USD Coin"; + param.usdc.symbol = "USDC"; + + uint256 num = 6; + address[] memory operatorAddrs = new address[](num); + address[] memory governorAddrs = new address[](num); + uint256[] memory operatorPKs = new uint256[](num); + uint256[] memory governorPKs = new uint256[](num); + uint96[] memory voteWeights = new uint96[](num); + GlobalProposal.TargetOption[] memory options = new GlobalProposal.TargetOption[](0); + address[] memory targets = new address[](0); + + for (uint256 i; i < num; i++) { + (address addrOperator, uint256 pkOperator) = makeAddrAndKey(string.concat("operator-", vm.toString(i + 1))); + (address addrGovernor, uint256 pkGovernor) = makeAddrAndKey(string.concat("governor-", vm.toString(i + 1))); + + operatorAddrs[i] = addrOperator; + governorAddrs[i] = addrGovernor; + operatorPKs[i] = pkOperator; + governorPKs[i] = pkGovernor; + voteWeights[i] = 100; + } + + LibArray.inlineSortByValue(operatorPKs, LibArray.toUint256s(operatorAddrs)); + LibArray.inlineSortByValue(governorPKs, LibArray.toUint256s(governorAddrs)); + + param.test.operatorPKs = operatorPKs; + param.test.governorPKs = governorPKs; + // Bridge rewards param.bridgeReward.dposGA = param.test.dposGA; param.bridgeReward.rewardPerPeriod = 5_000; @@ -79,6 +81,10 @@ contract Migration is BaseMigrationV2, Utils { // Bridge Tracking + // Ronin Gateway Pause Enforcer + param.roninPauseEnforcer.admin = makeAddr("pause-enforcer-admin"); + param.roninPauseEnforcer.sentries = wrapAddress(makeAddr("pause-enforcer-sentry")); + // Ronin Gateway V3 param.roninGatewayV3.numerator = 3; param.roninGatewayV3.denominator = 6; @@ -96,6 +102,11 @@ contract Migration is BaseMigrationV2, Utils { param.roninBridgeManager.voteWeights = voteWeights; param.roninBridgeManager.targetOptions = options; param.roninBridgeManager.targets = targets; + + // Mainchain Gateway Pause Enforcer + param.mainchainPauseEnforcer.admin = makeAddr("pause-enforcer-admin"); + param.mainchainPauseEnforcer.sentries = wrapAddress(makeAddr("pause-enforcer-sentry")); + // Mainchain Gateway V3 param.mainchainGatewayV3.roninChainId = param.test.roninChainId; param.mainchainGatewayV3.numerator = 1; diff --git a/script/contracts/MainchainGatewayV3Deploy.s.sol b/script/contracts/MainchainGatewayV3Deploy.s.sol index bb4c2e07..d7255e4c 100644 --- a/script/contracts/MainchainGatewayV3Deploy.s.sol +++ b/script/contracts/MainchainGatewayV3Deploy.s.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.19; import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; -import { IWETH } from "src/interfaces/IWETH.sol"; import { Contract } from "../utils/Contract.sol"; import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; import { Migration } from "../Migration.s.sol"; diff --git a/script/contracts/MainchainPauseEnforcerDeploy.s.sol b/script/contracts/MainchainPauseEnforcerDeploy.s.sol new file mode 100644 index 00000000..8cb42caf --- /dev/null +++ b/script/contracts/MainchainPauseEnforcerDeploy.s.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { PauseEnforcer } from "@ronin/contracts/ronin/gateway/PauseEnforcer.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +contract MainchainPauseEnforcerDeploy is Migration { + function run() public virtual returns (PauseEnforcer) { + return PauseEnforcer(_deployProxy(Contract.MainchainPauseEnforcer.key(), EMPTY_ARGS)); + } +} diff --git a/script/contracts/RoninPauseEnforcerDeploy.s.sol b/script/contracts/RoninPauseEnforcerDeploy.s.sol new file mode 100644 index 00000000..252fc84d --- /dev/null +++ b/script/contracts/RoninPauseEnforcerDeploy.s.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { PauseEnforcer } from "@ronin/contracts/ronin/gateway/PauseEnforcer.sol"; +import { Contract } from "../utils/Contract.sol"; +import { ISharedArgument } from "../interfaces/ISharedArgument.sol"; +import { Migration } from "../Migration.s.sol"; + +contract RoninPauseEnforcerDeploy is Migration { + function run() public virtual returns (PauseEnforcer) { + return PauseEnforcer(_deployProxy(Contract.RoninPauseEnforcer.key(), EMPTY_ARGS)); + } +} diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index a9224938..ef5b215c 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -77,6 +77,12 @@ interface ISharedArgument is IGeneralConfig { uint256 rewardPerPeriod; } + struct PauseEnforcerParam { + address target; + address admin; + address[] sentries; + } + struct MockWrappedTokenParam { string name; string symbol; @@ -98,13 +104,18 @@ interface ISharedArgument is IGeneralConfig { } struct SharedParameter { + // mainchain BridgeManagerParam mainchainBridgeManager; MainchainGatewayV3Param mainchainGatewayV3; + PauseEnforcerParam mainchainPauseEnforcer; + // ronin BridgeManagerParam roninBridgeManager; RoninGatewayV3Param roninGatewayV3; + PauseEnforcerParam roninPauseEnforcer; BridgeSlashParam bridgeSlash; BridgeTrackingParam bridgeTracking; BridgeRewardParam bridgeReward; + // tokens MockWrappedTokenParam weth; MockWrappedTokenParam wron; MockERC20Param axs; diff --git a/script/utils/Contract.sol b/script/utils/Contract.sol index bd20e691..9578abc9 100644 --- a/script/utils/Contract.sol +++ b/script/utils/Contract.sol @@ -12,8 +12,10 @@ enum Contract { BridgeTracking, BridgeSlash, BridgeReward, + RoninPauseEnforcer, RoninGatewayV3, RoninBridgeManager, + MainchainPauseEnforcer, MainchainGatewayV3, MainchainBridgeManager } @@ -34,8 +36,11 @@ function name(Contract contractEnum) pure returns (string memory) { if (contractEnum == Contract.BridgeTracking) return "BridgeTracking"; if (contractEnum == Contract.BridgeSlash) return "BridgeSlash"; if (contractEnum == Contract.BridgeReward) return "BridgeReward"; + if (contractEnum == Contract.RoninPauseEnforcer) return "PauseEnforcer"; if (contractEnum == Contract.RoninGatewayV3) return "RoninGatewayV3"; if (contractEnum == Contract.RoninBridgeManager) return "RoninBridgeManager"; + + if (contractEnum == Contract.MainchainPauseEnforcer) return "PauseEnforcer"; if (contractEnum == Contract.MainchainGatewayV3) return "MainchainGatewayV3"; if (contractEnum == Contract.MainchainBridgeManager) return "MainchainBridgeManager"; diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 7213cb03..5635e9d8 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -29,14 +29,20 @@ import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; import { TransparentUpgradeableProxyV2 } from "@ronin/contracts/extensions/TransparentUpgradeableProxyV2.sol"; import { MockValidatorContract_OnlyTiming_ForHardhatTest } from "@ronin/contracts/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol"; +import { PauseEnforcer } from "@ronin/contracts/ronin/gateway/PauseEnforcer.sol"; +import { IPauseTarget } from "@ronin/contracts/interfaces/IPauseTarget.sol"; +import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; import { RoninBridgeManagerDeploy } from "@ronin/script/contracts/RoninBridgeManagerDeploy.s.sol"; import { RoninGatewayV3Deploy } from "@ronin/script/contracts/RoninGatewayV3Deploy.s.sol"; import { BridgeTrackingDeploy } from "@ronin/script/contracts/BridgeTrackingDeploy.s.sol"; import { BridgeSlashDeploy } from "@ronin/script/contracts/BridgeSlashDeploy.s.sol"; import { BridgeRewardDeploy } from "@ronin/script/contracts/BridgeRewardDeploy.s.sol"; +import { RoninPauseEnforcerDeploy } from "@ronin/script/contracts/RoninPauseEnforcerDeploy.s.sol"; + import { MainchainGatewayV3Deploy } from "@ronin/script/contracts/MainchainGatewayV3Deploy.s.sol"; import { MainchainBridgeManagerDeploy } from "@ronin/script/contracts/MainchainBridgeManagerDeploy.s.sol"; +import { MainchainPauseEnforcerDeploy } from "@ronin/script/contracts/MainchainPauseEnforcerDeploy.s.sol"; import { WETHDeploy } from "@ronin/script/contracts/token/WETHDeploy.s.sol"; import { WRONDeploy } from "@ronin/script/contracts/token/WRONDeploy.s.sol"; import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; @@ -50,11 +56,14 @@ contract BaseIntegration_Test is Base_Test { IGeneralConfig _config; ISharedArgument.SharedParameter _param; + PauseEnforcer _roninPauseEnforcer; RoninBridgeManager _roninBridgeManager; RoninGatewayV3 _roninGatewayV3; BridgeTracking _bridgeTracking; BridgeSlash _bridgeSlash; BridgeReward _bridgeReward; + + PauseEnforcer _mainchainPauseEnforcer; MainchainGatewayV3 _mainchainGatewayV3; MainchainBridgeManager _mainchainBridgeManager; @@ -89,6 +98,9 @@ contract BaseIntegration_Test is Base_Test { _changeAdminOnRonin(); _changeAdminOnMainchain(); + + _configEmergencyPauserForRoninGateway(); + _configEmergencyPauserForMainchainGateway(); } function _deployContractsOnRonin() internal { @@ -99,6 +111,7 @@ contract BaseIntegration_Test is Base_Test { _bridgeTracking = new BridgeTrackingDeploy().run(); _bridgeSlash = new BridgeSlashDeploy().run(); _bridgeReward = new BridgeRewardDeploy().run(); + _roninPauseEnforcer = new RoninPauseEnforcerDeploy().run(); _roninBridgeManager = new RoninBridgeManagerDeploy().run(); _roninWeth = new WETHDeploy().run(); @@ -118,6 +131,7 @@ contract BaseIntegration_Test is Base_Test { _config.createFork(Network.EthLocal.key()); _config.switchTo(Network.EthLocal.key()); + _mainchainPauseEnforcer = new MainchainPauseEnforcerDeploy().run(); _mainchainGatewayV3 = new MainchainGatewayV3Deploy().run(); _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); @@ -137,6 +151,7 @@ contract BaseIntegration_Test is Base_Test { _bridgeRewardInitialize(); _bridgeTrackingInitialize(); _bridgeSlashInitialize(); + _roninPauseEnforcerInitialize(); _roninGatewayV3Initialize(); _constructForRoninBridgeManager(); } @@ -144,6 +159,7 @@ contract BaseIntegration_Test is Base_Test { function _initializeMainchain() internal { _config.switchTo(Network.EthLocal.key()); + _mainchainPauseEnforcerInitialize(); _constructForMainchainBridgeManager(); _mainchainGatewayV3Initialize(); } @@ -225,6 +241,14 @@ contract BaseIntegration_Test is Base_Test { _bridgeSlash.initializeREP2(); } + function _roninPauseEnforcerInitialize() internal { + _param.roninPauseEnforcer.target = address(_roninGatewayV3); + + ISharedArgument.PauseEnforcerParam memory param = _param.roninPauseEnforcer; + + _roninPauseEnforcer.initialize(IPauseTarget(param.target), param.admin, param.sentries); + } + function _roninGatewayV3Initialize() internal { (address[] memory mainchainTokens, address[] memory roninTokens) = _getMainchainAndRoninTokens(); uint256 tokenNum = mainchainTokens.length; @@ -426,6 +450,14 @@ contract BaseIntegration_Test is Base_Test { _mainchainGatewayV3.initializeV2(address(_mainchainBridgeManager)); } + function _mainchainPauseEnforcerInitialize() internal { + _param.mainchainPauseEnforcer.target = address(_mainchainGatewayV3); + + ISharedArgument.PauseEnforcerParam memory param = _param.mainchainPauseEnforcer; + + _mainchainPauseEnforcer.initialize(IPauseTarget(param.target), param.admin, param.sentries); + } + function _changeAdminOnRonin() internal { _config.switchTo(Network.RoninLocal.key()); @@ -445,6 +477,37 @@ contract BaseIntegration_Test is Base_Test { vm.stopPrank(); } + function _configEmergencyPauserForRoninGateway() internal { + _config.switchTo(Network.RoninLocal.key()); + + bytes memory calldata_ = abi.encodeCall(GatewayV3.setEmergencyPauser, (address(_roninPauseEnforcer))); + _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); + } + + function _configEmergencyPauserForMainchainGateway() internal { + _config.switchTo(Network.EthLocal.key()); + + bytes memory calldata_ = abi.encodeCall(GatewayV3.setEmergencyPauser, (address(_mainchainPauseEnforcer))); + Proposal.ProposalDetail memory proposal = _mainchainProposalUtils.createProposal({ + expiryTimestamp: block.timestamp + 1 minutes, + target: address(_mainchainGatewayV3), + value: 0, + calldata_: calldata_, + gasAmount: 1_000_000, + nonce: _mainchainBridgeManager.round(_param.test.mainchainChainId) + 1 + }); + + SignatureConsumer.Signature[] memory signatures = _mainchainProposalUtils.generateSignatures(proposal); + + Ballot.VoteType[] memory voteTypes = new Ballot.VoteType[](signatures.length); + for (uint256 i; i < signatures.length; i++) { + voteTypes[i] = Ballot.VoteType.For; + } + + vm.prank(_param.mainchainBridgeManager.governors[0]); + _mainchainBridgeManager.relayProposal(proposal, voteTypes, signatures); + } + function _deployGeneralConfig() internal { vm.makePersistent(LibSharedAddress.CONFIG); vm.allowCheatcodes(LibSharedAddress.CONFIG); From 5817a367af89536c2d8df6d32ae2a44f1c899b24 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Thu, 25 Jan 2024 20:25:44 +0700 Subject: [PATCH 58/73] test: try deposit 100 txs --- .github/workflows/test.yml | 4 +- script/Migration.s.sol | 2 +- ...atorContract_OnlyTiming_ForHardhatTest.sol | 57 ++++++++++-------- test/bridge/integration/BaseIntegration.t.sol | 24 +++++++- ...IsApprovedInLastEpoch.BridgeTracking.t.sol | 26 +++------ ...otApprovedInLastEpoch.BridgeTracking.t.sol | 12 ---- .../depositVote.RoninGatewayV3.t.sol | 58 +++++++++++++++++++ 7 files changed, 124 insertions(+), 59 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 307a127f..5e2b4e56 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: - name: Run Forge tests run: | - anvil --chain-id 2024 --port 8546 --block-time 1 & - anvil --chain-id 2 --port 8547 --block-time 1 & + anvil --chain-id 2024 --port 8546 --block-time 3 & + anvil --chain-id 2 --port 8547 --block-time 3 & forge test -vvv id: test diff --git a/script/Migration.s.sol b/script/Migration.s.sol index 10697dbc..6fd4ff13 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -28,7 +28,7 @@ contract Migration is BaseMigrationV2, Utils { // Undefined } else if (network() == Network.RoninLocal.key() || network() == Network.EthLocal.key()) { // test - param.test.numberOfBlocksInEpoch = 600; + param.test.numberOfBlocksInEpoch = 200; param.test.proxyAdmin = makeAddr("proxy-admin"); param.test.dposGA = makeAddr("governance-admin"); param.test.mainchainChainId = Network.EthLocal.chainId(); diff --git a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol index 8b868cbf..09382fe4 100644 --- a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol +++ b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol @@ -2,6 +2,8 @@ pragma solidity ^0.8.0; contract MockValidatorContract_OnlyTiming_ForHardhatTest { + event WrappedUpEpoch(uint256 newPeriod, uint256 newEpoch, bool periodEnding); + uint256 public constant PERIOD_DURATION = 1 days; /// @dev The number of blocks in a epoch uint256 internal _numberOfBlocksInEpoch; @@ -11,14 +13,15 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { uint256 internal _lastUpdatedPeriod; /// @dev The starting block of the last updated period uint256 internal _currentPeriodStartAtBlock; - uint256[] internal _epochs; + /// @dev Mapping from epoch index => period index + mapping(uint256 => uint256) internal _periodOf; constructor(uint256 __numberOfBlocksInEpoch) { _numberOfBlocksInEpoch = __numberOfBlocksInEpoch; - _epochs.push(0); } function wrapUpEpoch() external payable { + require(epochEndingAt(block.number), "Tach"); uint256 _newPeriod = _computePeriod(block.timestamp); bool _periodEnding = _isPeriodEnding(_newPeriod); @@ -31,39 +34,45 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { _periodOf[_nextEpoch] = _newPeriod; _lastUpdatedPeriod = _newPeriod; + emit WrappedUpEpoch(_newPeriod, _nextEpoch, _periodEnding); } - function endEpoch() external { - _epochs.push(block.number); - } + // function endEpoch() external { + // // _epochs.push(block.number); + // uint nextEpoch = epochOf(block.number) + 1; + // uint startBlockOfNextEpoch = nextEpoch * _numberOfBlocksInEpoch; + // uint currPeriod = _computePeriod(block.timestamp); + // for (uint i = block.number; i < startBlockOfNextEpoch; i++) { - function epochOf(uint256 _block) public view returns (uint256 _epoch) { - for (uint256 _i = _epochs.length; _i > 0; _i--) { - if (_block > _epochs[_i - 1]) { - return _i; - } - } - } + // } + // } + + // function epochOf(uint256 _block) public view returns (uint256 _epoch) { + // for (uint256 _i = _epochs.length; _i > 0; _i--) { + // if (_block > _epochs[_i - 1]) { + // return _i; + // } + // } + // } function epochEndingAt(uint256 _block) public view returns (bool) { - for (uint256 _i = 0; _i < _epochs.length; _i++) { - if (_block == _epochs[_i]) { - return true; - } - } - return false; + // for (uint256 _i = 0; _i < _epochs.length; _i++) { + // if (_block == _epochs[_i]) { + // return true; + // } + // } + // return false; + + return (_block + 1) % _numberOfBlocksInEpoch == 0; } - /// @dev Mapping from epoch index => period index - mapping(uint256 => uint256) internal _periodOf; - function getLastUpdatedBlock() external view returns (uint256) { return _lastUpdatedBlock; } - // function epochOf(uint256 _block) public view virtual returns (uint256) { - // return _block / _numberOfBlocksInEpoch + 1; - // } + function epochOf(uint256 _block) public view virtual returns (uint256) { + return _block / _numberOfBlocksInEpoch + 1; + } function tryGetPeriodOfEpoch(uint256 _epoch) external view returns (bool _filled, uint256 _periodNumber) { return (_epoch <= epochOf(block.number) || _periodOf[_epoch] > 0, _periodOf[_epoch]); diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 5635e9d8..f9390ed5 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; +import { console2 as console } from "forge-std/console2.sol"; import { Base_Test } from "../../Base.t.sol"; import { LibSharedAddress } from "foundry-deployment-kit/libraries/LibSharedAddress.sol"; import { ISharedArgument } from "@ronin/script/interfaces/ISharedArgument.sol"; @@ -148,6 +149,8 @@ contract BaseIntegration_Test is Base_Test { function _initializeRonin() internal { _config.switchTo(Network.RoninLocal.key()); + _validatorSet.setCurrentPeriod(block.timestamp / 1 days); + _bridgeRewardInitialize(); _bridgeTrackingInitialize(); _bridgeSlashInitialize(); @@ -204,7 +207,6 @@ contract BaseIntegration_Test is Base_Test { param.rewardPerPeriod ); - _validatorSet.setCurrentPeriod(10); vm.prank(_param.test.dposGA); _bridgeReward.initializeREP2(); } @@ -514,4 +516,24 @@ contract BaseIntegration_Test is Base_Test { deployCodeTo("GeneralConfig.sol", type(GeneralConfig).creationCode, LibSharedAddress.CONFIG); _config = IGeneralConfig(LibSharedAddress.CONFIG); } + + function _wrapUpEpochAndMine() internal { + _wrapUpEpoch(); + // mine a dummy block + vm.roll(block.number + 1); + } + + function _wrapUpEpoch() internal { + uint256 multiplier = _validatorSet.numberOfBlocksInEpoch(); + console.log(block.number); + + vm.roll((block.number / multiplier + 1) * (multiplier) - 1); + + vm.prank(block.coinbase); + _validatorSet.wrapUpEpoch(); + } + + function _setTimestampToPeriodEnding() internal { + vm.warp(((block.timestamp / 1 days) + 1) * 1 days); + } } diff --git a/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol index f1d03985..3cdb172f 100644 --- a/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol +++ b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol @@ -19,6 +19,11 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio _config.switchTo(Network.RoninLocal.key()); vm.coinbase(makeAddr("coin-base-addr")); + _operators.push(_param.roninBridgeManager.bridgeOperators[0]); + _operators.push(_param.roninBridgeManager.bridgeOperators[1]); + _receiptId = 1; + _receiptKind = IBridgeTracking.VoteKind.Withdrawal; + // upgrade ronin gateway v3 _mockRoninGatewayV3 = new MockGatewayForTracking(address(_bridgeTracking)); @@ -32,11 +37,6 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio _wrapUpEpochAndMine(); _period = _validatorSet.currentPeriod(); - _receiptId = 1; - _receiptKind = IBridgeTracking.VoteKind.Withdrawal; - - _operators.push(_param.roninBridgeManager.bridgeOperators[0]); - _operators.push(_param.roninBridgeManager.bridgeOperators[1]); } // Epoch e-1: Vote & Approve & Vote > Should not record when not approved yet. Vote in last epoch (e-1). @@ -78,13 +78,13 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio function test_epochE_notRecordForCurrentPeriod_WhenWrappingUpPeriod() public { test_epochE1_notRecordVoteAndBallot_voteInLastEpoch(); + uint256 lastPeriod = _period; _setTimestampToPeriodEnding(); _wrapUpEpochAndMine(); - uint256 lastPeriod = _period; uint256 newPeriod = _validatorSet.currentPeriod(); _period = newPeriod; - assertTrue(newPeriod != lastPeriod); + assertEq(newPeriod, lastPeriod + 1); assertEq(_bridgeTracking.totalVote(lastPeriod), 0); assertEq(_bridgeTracking.totalBallot(lastPeriod), 0); @@ -194,16 +194,4 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[4]), 0); assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[5]), 0); } - - function _wrapUpEpochAndMine() internal { - _validatorSet.endEpoch(); - vm.prank(block.coinbase); - _validatorSet.wrapUpEpoch(); - // mine a dummy block - vm.roll(block.number + 1); - } - - function _setTimestampToPeriodEnding() internal { - vm.warp(((block.timestamp / 86400) + 1) * 86400); - } } diff --git a/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol index 431f82db..1f3f2c03 100644 --- a/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol +++ b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol @@ -124,16 +124,4 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[2]), 0); assertEq(_bridgeTracking.totalBallotOf(newPeriod, _param.roninBridgeManager.bridgeOperators[3]), 0); } - - function _wrapUpEpochAndMine() internal { - _validatorSet.endEpoch(); - vm.prank(block.coinbase); - _validatorSet.wrapUpEpoch(); - // mine a dummy block - vm.roll(block.number + 1); - } - - function _setTimestampToPeriodEnding() internal { - vm.warp(((block.timestamp / 86400) + 1) * 86400); - } } diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index 782bcd3e..6e121e32 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; +import { console2 as console } from "forge-std/console2.sol"; import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; import { Token } from "@ronin/contracts/libraries/Token.sol"; import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; @@ -14,6 +15,8 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { Transfer.Receipt[] _depositReceipts; uint256 _numOperatorsForVoteExecuted; + Transfer.Receipt[] first50Receipts; + Transfer.Receipt[] second50Receipts; function setUp() public virtual override { super.setUp(); @@ -84,4 +87,59 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { assertEq(totalWeight, (_numOperatorsForVoteExecuted) * 100); } } + + function test_bulkDeposit_100Txs() public { + _wrapUpEpochAndMine(); + _wrapUpEpochAndMine(); + _setTimestampToPeriodEnding(); + + vm.deal(address(_bridgeReward), 10 ether); + address newBridgeOperator = makeAddr("new-bridge-operator"); + Transfer.Receipt memory sampleReceipt = Transfer.Receipt({ + id: 0, + kind: Transfer.Kind.Deposit, + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), + mainchain: Token.Owner({ + addr: makeAddr("requester"), + tokenAddr: address(_mainchainWeth), + chainId: _param.test.mainchainChainId + }), + info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) + }); + + uint256 id = 1; + for (uint256 i; i < 50; i++) { + first50Receipts.push(sampleReceipt); + second50Receipts.push(sampleReceipt); + first50Receipts[i].id = id; + second50Receipts[i].id = id + 50; + + id++; + } + + for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { + vm.prank(_param.roninBridgeManager.bridgeOperators[i]); + _roninGatewayV3.tryBulkDepositFor(first50Receipts); + } + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.updateBridgeOperator(newBridgeOperator); + _param.roninBridgeManager.bridgeOperators[0] = newBridgeOperator; + + for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { + vm.prank(_param.roninBridgeManager.bridgeOperators[i]); + _roninGatewayV3.tryBulkDepositFor(second50Receipts); + } + + _wrapUpEpochAndMine(); + _wrapUpEpochAndMine(); + _setTimestampToPeriodEnding(); + + sampleReceipt.id = 101; + + for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { + vm.prank(_param.roninBridgeManager.bridgeOperators[i]); + _roninGatewayV3.depositFor(sampleReceipt); + } + } } From d6a6b4795170776a029d81247928420ca08e5ff1 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 26 Jan 2024 10:15:46 +0700 Subject: [PATCH 59/73] chore: storage layout --- logs/contract-code-sizes.log | 2 +- ...est.sol:MockValidatorContract_OnlyTiming_ForHardhatTest.log | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 84a5dc26..a3a076f8 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -44,7 +44,7 @@ | MockRoninBridgeManager | 24.601 | -0.025 | | MockRoninGatewayV3Extended | 20.048 | 4.528 | | MockTUint256Slot | 2.73 | 21.846 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.158 | 23.418 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.063 | 23.513 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | | MockWrappedToken | 2.225 | 22.351 | | PRBMathUtils | 0.063 | 24.513 | diff --git a/logs/storage/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest.log b/logs/storage/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest.log index 4bcfa7f5..1ae53479 100644 --- a/logs/storage/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest.log +++ b/logs/storage/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest.log @@ -2,5 +2,4 @@ src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidato src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_lastUpdatedBlock (storage_slot: 1) (offset: 0) (type: uint256) (numberOfBytes: 32) src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_lastUpdatedPeriod (storage_slot: 2) (offset: 0) (type: uint256) (numberOfBytes: 32) src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_currentPeriodStartAtBlock (storage_slot: 3) (offset: 0) (type: uint256) (numberOfBytes: 32) -src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_epochs (storage_slot: 4) (offset: 0) (type: uint256[]) (numberOfBytes: 32) -src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_periodOf (storage_slot: 5) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) \ No newline at end of file +src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol:MockValidatorContract_OnlyTiming_ForHardhatTest:_periodOf (storage_slot: 4) (offset: 0) (type: mapping(uint256 => uint256)) (numberOfBytes: 32) \ No newline at end of file From 79984fcea3a0442efa199f50725b5b5f57e6ef81 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 27 Jan 2024 18:40:54 +0700 Subject: [PATCH 60/73] test: revamp mock validator set --- ...atorContract_OnlyTiming_ForHardhatTest.sol | 10 +++++-- test/bridge/integration/BaseIntegration.t.sol | 30 +++++++++++++++++-- .../depositVote.RoninGatewayV3.t.sol | 5 ++-- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol index 09382fe4..6c3d439e 100644 --- a/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol +++ b/src/mocks/ronin/MockValidatorContract_OnlyTiming_ForHardhatTest.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.0; contract MockValidatorContract_OnlyTiming_ForHardhatTest { event WrappedUpEpoch(uint256 newPeriod, uint256 newEpoch, bool periodEnding); + event CurrentPeriodUpdated(uint256 previousPeriod, uint256 currentPeriod); uint256 public constant PERIOD_DURATION = 1 days; /// @dev The number of blocks in a epoch @@ -21,7 +22,6 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { } function wrapUpEpoch() external payable { - require(epochEndingAt(block.number), "Tach"); uint256 _newPeriod = _computePeriod(block.timestamp); bool _periodEnding = _isPeriodEnding(_newPeriod); @@ -33,7 +33,9 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { } _periodOf[_nextEpoch] = _newPeriod; - _lastUpdatedPeriod = _newPeriod; + + setCurrentPeriod(_newPeriod); + emit WrappedUpEpoch(_newPeriod, _nextEpoch, _periodEnding); } @@ -86,7 +88,9 @@ contract MockValidatorContract_OnlyTiming_ForHardhatTest { return _lastUpdatedPeriod; } - function setCurrentPeriod(uint256 period) external { + function setCurrentPeriod(uint256 period) public { + emit CurrentPeriodUpdated(_lastUpdatedPeriod, period); + _lastUpdatedPeriod = period; } diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index f9390ed5..b9ba4536 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -33,6 +33,7 @@ import { MockValidatorContract_OnlyTiming_ForHardhatTest } from import { PauseEnforcer } from "@ronin/contracts/ronin/gateway/PauseEnforcer.sol"; import { IPauseTarget } from "@ronin/contracts/interfaces/IPauseTarget.sol"; import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; +import { IBridgeManagerCallbackRegister } from "@ronin/contracts/interfaces/bridge/IBridgeManagerCallbackRegister.sol"; import { RoninBridgeManagerDeploy } from "@ronin/script/contracts/RoninBridgeManagerDeploy.s.sol"; import { RoninGatewayV3Deploy } from "@ronin/script/contracts/RoninGatewayV3Deploy.s.sol"; @@ -149,7 +150,7 @@ contract BaseIntegration_Test is Base_Test { function _initializeRonin() internal { _config.switchTo(Network.RoninLocal.key()); - _validatorSet.setCurrentPeriod(block.timestamp / 1 days); + _validatorSet.setCurrentPeriod(block.timestamp / _validatorSet.PERIOD_DURATION() - 2); _bridgeRewardInitialize(); _bridgeTrackingInitialize(); @@ -350,6 +351,26 @@ contract BaseIntegration_Test is Base_Test { vm.prank(_param.roninBridgeManager.governors[0]); _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, supports_, signatures); } + + { + // set callback register + bytes memory calldata_ = + abi.encodeCall(IBridgeManagerCallbackRegister.registerCallbacks, (param.callbackRegisters)); + GlobalProposal.GlobalProposalDetail memory globalProposal = _roninProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: calldata_, + gasAmount: 500_000, + nonce: _roninNonce++ + }); + + SignatureConsumer.Signature[] memory signatures = + _roninProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _roninBridgeManager.proposeGlobalProposalStructAndCastVotes(globalProposal, supports_, signatures); + } } function _constructForMainchainBridgeManager() internal { @@ -525,12 +546,15 @@ contract BaseIntegration_Test is Base_Test { function _wrapUpEpoch() internal { uint256 multiplier = _validatorSet.numberOfBlocksInEpoch(); - console.log(block.number); + console.log("Before roll block.number: ", block.number); - vm.roll((block.number / multiplier + 1) * (multiplier) - 1); + vm.roll((block.number / multiplier + 1) * multiplier - 1); + console.log("After roll block.number: ", block.number); vm.prank(block.coinbase); + console.log("Before wrap up", _validatorSet.currentPeriod()); _validatorSet.wrapUpEpoch(); + console.log("After wrap up", _validatorSet.currentPeriod()); } function _setTimestampToPeriodEnding() internal { diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index 6e121e32..907554ba 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -89,9 +89,9 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { } function test_bulkDeposit_100Txs() public { + _setTimestampToPeriodEnding(); _wrapUpEpochAndMine(); _wrapUpEpochAndMine(); - _setTimestampToPeriodEnding(); vm.deal(address(_bridgeReward), 10 ether); address newBridgeOperator = makeAddr("new-bridge-operator"); @@ -124,6 +124,7 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { vm.prank(_param.roninBridgeManager.governors[0]); _roninBridgeManager.updateBridgeOperator(newBridgeOperator); + _param.roninBridgeManager.bridgeOperators[0] = newBridgeOperator; for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { @@ -131,9 +132,9 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { _roninGatewayV3.tryBulkDepositFor(second50Receipts); } + _setTimestampToPeriodEnding(); _wrapUpEpochAndMine(); _wrapUpEpochAndMine(); - _setTimestampToPeriodEnding(); sampleReceipt.id = 101; From 30b4d1be17ac6c8afe2db7608935e70d750a0d65 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 27 Jan 2024 18:42:37 +0700 Subject: [PATCH 61/73] chore: contract sizes --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index a3a076f8..4c5b215a 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -44,7 +44,7 @@ | MockRoninBridgeManager | 24.601 | -0.025 | | MockRoninGatewayV3Extended | 20.048 | 4.528 | | MockTUint256Slot | 2.73 | 21.846 | -| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.063 | 23.513 | +| MockValidatorContract_OnlyTiming_ForHardhatTest | 1.06 | 23.516 | | MockValidatorSet_ForFoundryTest | 0.172 | 24.404 | | MockWrappedToken | 2.225 | 22.351 | | PRBMathUtils | 0.063 | 24.513 | From 1ad9cff1aee7d93c5c810cca8bd2642991ebec10 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 27 Jan 2024 19:06:44 +0700 Subject: [PATCH 62/73] test: fix nonce --- test/bridge/integration/BaseIntegration.t.sol | 33 ++++++++++++++----- ...oteBridgeOperator.RoninBridgeManager.t.sol | 6 ++-- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index b9ba4536..9737356e 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -86,9 +86,6 @@ contract BaseIntegration_Test is Base_Test { RoninBridgeAdminUtils _roninProposalUtils; ProposalUtils _mainchainProposalUtils; - uint256 _roninNonce = 1; - uint256 _mainchainNonce = 1; - function setUp() public virtual { _deployGeneralConfig(); @@ -325,7 +322,7 @@ contract BaseIntegration_Test is Base_Test { value: 0, calldata_: abi.encodeCall(GlobalCoreGovernance.updateManyTargetOption, (param.targetOptions, param.targets)), gasAmount: 500_000, - nonce: _roninNonce++ + nonce: _roninBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = @@ -342,7 +339,7 @@ contract BaseIntegration_Test is Base_Test { value: 0, calldata_: abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, param.bridgeContract)), gasAmount: 500_000, - nonce: _roninNonce++ + nonce: _roninBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = @@ -362,7 +359,7 @@ contract BaseIntegration_Test is Base_Test { value: 0, calldata_: calldata_, gasAmount: 500_000, - nonce: _roninNonce++ + nonce: _roninBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = @@ -400,7 +397,7 @@ contract BaseIntegration_Test is Base_Test { value: 0, calldata_: abi.encodeCall(GlobalCoreGovernance.updateManyTargetOption, (param.targetOptions, param.targets)), gasAmount: 500_000, - nonce: _mainchainNonce++ + nonce: _mainchainBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = @@ -417,7 +414,27 @@ contract BaseIntegration_Test is Base_Test { value: 0, calldata_: abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE, param.bridgeContract)), gasAmount: 500_000, - nonce: _mainchainNonce++ + nonce: _mainchainBridgeManager.round(0) + 1 + }); + + SignatureConsumer.Signature[] memory signatures = + _mainchainProposalUtils.generateSignaturesGlobal(globalProposal, _param.test.governorPKs); + + vm.prank(_param.roninBridgeManager.governors[0]); + _mainchainBridgeManager.relayGlobalProposal(globalProposal, supports_, signatures); + } + + { + // set callback register + bytes memory calldata_ = + abi.encodeCall(IBridgeManagerCallbackRegister.registerCallbacks, (param.callbackRegisters)); + GlobalProposal.GlobalProposalDetail memory globalProposal = _mainchainProposalUtils.createGlobalProposal({ + expiryTimestamp: block.timestamp + 10, + targetOption: GlobalProposal.TargetOption.BridgeManager, + value: 0, + calldata_: calldata_, + gasAmount: 500_000, + nonce: _mainchainBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = diff --git a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol index 4bc604b3..0b831b4c 100644 --- a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol @@ -62,8 +62,8 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { targetOption: GlobalProposal.TargetOption.BridgeManager, value: 0, calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingGovernors, _addingOperators)), - gasAmount: 500_000, - nonce: _roninNonce++ + gasAmount: 1_000_000, + nonce: _roninBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = @@ -125,7 +125,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { value: 0, calldata_: abi.encodeCall(IBridgeManager.addBridgeOperators, (_voteWeights, _addingGovernors, _addingOperators)), gasAmount: 200_000 * numAddingOperators, - nonce: _roninNonce++ + nonce: _roninBridgeManager.round(0) + 1 }); SignatureConsumer.Signature[] memory signatures = From 8a37936730849383ad004f8ebbe22382c091b95e Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 27 Jan 2024 19:43:18 +0700 Subject: [PATCH 63/73] test(PauseEnforcer): test configurations --- .../set-config/setConfig.PauseEnforcer.t.sol | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol diff --git a/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol new file mode 100644 index 00000000..e9bde218 --- /dev/null +++ b/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; +import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; +import "../../BaseIntegration.t.sol"; + +contract SetConfig_PauseEnforcer_Test is BaseIntegration_Test { + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + } + + function test_configPauseEnforcerContract() public { + address pauseEnforcer = _roninGatewayV3.emergencyPauser(); + assertEq(pauseEnforcer, address(_roninPauseEnforcer)); + } + + function test_configBridgeContract() public { + address bridgeContract = address(_roninPauseEnforcer.target()); + + assertEq(bridgeContract, address(_roninGatewayV3)); + } + + function test_sentryEnforcerRole() public { + bool isSentryRole = + _roninPauseEnforcer.hasRole(_roninPauseEnforcer.SENTRY_ROLE(), _param.roninPauseEnforcer.sentries[0]); + + assertEq(isSentryRole, true); + } +} From 85635da922f4ec71d033070048947c78ecc765be Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 28 Jan 2024 13:02:41 +0700 Subject: [PATCH 64/73] test(PauseEnforcer): done test --- test/bridge/integration/BaseIntegration.t.sol | 40 +++---- .../accessControl.PauseEnforcer.t.sol | 31 +++++ .../emergencyAction.PauseEnforcer.t.sol | 88 ++++++++++++++ .../set-config/normalPause.GatewayV3.t.sol | 61 ++++++++++ .../depositVote.RoninGatewayV3.t.sol | 4 - test/helpers/MainchainBridgeAdminUtils.t.sol | 113 ++++++++++++++++++ test/helpers/ProposalUtils.t.sol | 2 +- 7 files changed, 314 insertions(+), 25 deletions(-) create mode 100644 test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol create mode 100644 test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol create mode 100644 test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol create mode 100644 test/helpers/MainchainBridgeAdminUtils.t.sol diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 9737356e..47b1495d 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -51,8 +51,8 @@ import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; -import { ProposalUtils } from "test/helpers/ProposalUtils.t.sol"; import { RoninBridgeAdminUtils } from "test/helpers/RoninBridgeAdminUtils.t.sol"; +import { MainchainBridgeAdminUtils } from "test/helpers/MainchainBridgeAdminUtils.t.sol"; contract BaseIntegration_Test is Base_Test { IGeneralConfig _config; @@ -84,7 +84,7 @@ contract BaseIntegration_Test is Base_Test { MockValidatorContract_OnlyTiming_ForHardhatTest _validatorSet; RoninBridgeAdminUtils _roninProposalUtils; - ProposalUtils _mainchainProposalUtils; + MainchainBridgeAdminUtils _mainchainProposalUtils; function setUp() public virtual { _deployGeneralConfig(); @@ -100,6 +100,8 @@ contract BaseIntegration_Test is Base_Test { _configEmergencyPauserForRoninGateway(); _configEmergencyPauserForMainchainGateway(); + + _configBridgeTrackingForRoninGateway(); } function _deployContractsOnRonin() internal { @@ -141,7 +143,12 @@ contract BaseIntegration_Test is Base_Test { _mainchainUsdc = new USDCDeploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); - _mainchainProposalUtils = new ProposalUtils(_param.test.roninChainId, _param.test.governorPKs); + _mainchainProposalUtils = new MainchainBridgeAdminUtils( + _param.test.roninChainId, + _param.test.governorPKs, + _mainchainBridgeManager, + _param.mainchainBridgeManager.governors[0] + ); } function _initializeRonin() internal { @@ -528,24 +535,17 @@ contract BaseIntegration_Test is Base_Test { _config.switchTo(Network.EthLocal.key()); bytes memory calldata_ = abi.encodeCall(GatewayV3.setEmergencyPauser, (address(_mainchainPauseEnforcer))); - Proposal.ProposalDetail memory proposal = _mainchainProposalUtils.createProposal({ - expiryTimestamp: block.timestamp + 1 minutes, - target: address(_mainchainGatewayV3), - value: 0, - calldata_: calldata_, - gasAmount: 1_000_000, - nonce: _mainchainBridgeManager.round(_param.test.mainchainChainId) + 1 - }); - - SignatureConsumer.Signature[] memory signatures = _mainchainProposalUtils.generateSignatures(proposal); - - Ballot.VoteType[] memory voteTypes = new Ballot.VoteType[](signatures.length); - for (uint256 i; i < signatures.length; i++) { - voteTypes[i] = Ballot.VoteType.For; - } + _mainchainProposalUtils.functionDelegateCall(address(_mainchainGatewayV3), calldata_); + } - vm.prank(_param.mainchainBridgeManager.governors[0]); - _mainchainBridgeManager.relayProposal(proposal, voteTypes, signatures); + function _configBridgeTrackingForRoninGateway() internal { + _config.switchTo(Network.RoninLocal.key()); + + bytes memory calldata_ = + abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE_TRACKING, address(_bridgeTracking))); + _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); + + _config.switchTo(Network.EthLocal.key()); } function _deployGeneralConfig() internal { diff --git a/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol new file mode 100644 index 00000000..250529ba --- /dev/null +++ b/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "../../BaseIntegration.t.sol"; + +contract AccessControl_PauseEnforcer_Test is BaseIntegration_Test { + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + } + + function test_changeAdmin_OfPauseEnforcer() public { + address newEnforcerAdmin = makeAddr("new-enforcer-admin"); + + vm.prank(_param.roninPauseEnforcer.admin); + _roninPauseEnforcer.grantRole(0x0, newEnforcerAdmin); + + assertEq(_roninPauseEnforcer.hasRole(0x0, newEnforcerAdmin), true); + } + + function test_renounceAdminRole_PreviousAdmin() public { + test_changeAdmin_OfPauseEnforcer(); + + assertEq(_roninPauseEnforcer.hasRole(0x0, _param.roninPauseEnforcer.admin), true); + + vm.prank(_param.roninPauseEnforcer.admin); + _roninPauseEnforcer.renounceRole(0x0, _param.roninPauseEnforcer.admin); + + assertEq(_roninPauseEnforcer.hasRole(0x0, _param.roninPauseEnforcer.admin), false); + } +} diff --git a/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol new file mode 100644 index 00000000..04126e76 --- /dev/null +++ b/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; +import "../../BaseIntegration.t.sol"; + +contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { + error ErrTargetIsNotOnPaused(); + + function setUp() public virtual override { + super.setUp(); + } + + // Should be able to emergency pause + function test_EmergencyPause_RoninGatewayV3() public { + _config.switchTo(Network.RoninLocal.key()); + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerPause(); + + assertEq(_roninPauseEnforcer.emergency(), true); + assertEq(_roninGatewayV3.paused(), true); + } + + // Should the gateway cannot interacted when on pause + function test_RevertWhen_InteractWithGateway_AfterPause() public { + test_EmergencyPause_RoninGatewayV3(); + Transfer.Receipt memory receipt = Transfer.Receipt({ + id: 0, + kind: Transfer.Kind.Deposit, + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), + mainchain: Token.Owner({ + addr: makeAddr("requester"), + tokenAddr: address(_mainchainWeth), + chainId: _param.test.mainchainChainId + }), + info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) + }); + + vm.expectRevert("Pausable: paused"); + + _roninGatewayV3.depositFor(receipt); + } + + // Should not be able to emergency pause for a second time + function test_RevertWhen_PauseAgain() public { + test_EmergencyPause_RoninGatewayV3(); + + vm.expectRevert(ErrTargetIsNotOnPaused.selector); + + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerPause(); + } + + // Should be able to emergency unpause + function test_EmergencyUnpause_RoninGatewayV3() public { + test_EmergencyPause_RoninGatewayV3(); + + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerUnpause(); + + assertEq(_roninPauseEnforcer.emergency(), false); + assertEq(_roninGatewayV3.paused(), false); + } + + // Should the gateway can be interacted after unpause + function test_InteractWithGateway_AfterUnpause() public { + test_EmergencyUnpause_RoninGatewayV3(); + Transfer.Receipt memory receipt = Transfer.Receipt({ + id: 0, + kind: Transfer.Kind.Deposit, + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), + mainchain: Token.Owner({ + addr: makeAddr("requester"), + tokenAddr: address(_mainchainWeth), + chainId: _param.test.mainchainChainId + }), + info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) + }); + + uint256 numOperatorsForVoteExecuted = + _param.roninBridgeManager.bridgeOperators.length * _param.roninBridgeManager.num / _param.roninBridgeManager.denom; + for (uint256 i; i < numOperatorsForVoteExecuted; i++) { + vm.prank(_param.roninBridgeManager.bridgeOperators[i]); + _roninGatewayV3.depositFor(receipt); + } + } +} diff --git a/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol b/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol new file mode 100644 index 00000000..77a3cb9a --- /dev/null +++ b/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; +import "../../BaseIntegration.t.sol"; + +contract NormalPause_GatewayV3_Test is BaseIntegration_Test { + error ErrNotOnEmergencyPause(); + error ErrTargetIsNotOnPaused(); + + function setUp() public virtual override { + super.setUp(); + _config.switchTo(Network.RoninLocal.key()); + } + + // Should gateway admin can pause the gateway through voting + function test_GovernanceAdmin_PauseGateway_ThroughoutVoting() public { + bytes memory calldata_ = abi.encodeCall(GatewayV3.pause, ()); + _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); + + assertEq(_roninPauseEnforcer.emergency(), false); + assertEq(_roninGatewayV3.paused(), true); + } + + // Should not be able to emergency unpause + function test_RevertWhen_EmergencyUnpause() public { + test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); + + vm.expectRevert(ErrNotOnEmergencyPause.selector); + + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerUnpause(); + } + + // Should not be able to override by emergency pause and emergency unpause + function test_RevertWhen_OverrideByEmergencyPauseOrUnPause() public { + test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); + + vm.expectRevert(ErrTargetIsNotOnPaused.selector); + + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerPause(); + + vm.expectRevert(ErrNotOnEmergencyPause.selector); + + vm.prank(_param.roninPauseEnforcer.sentries[0]); + _roninPauseEnforcer.triggerUnpause(); + } + + // Should gateway admin can unpause the gateway through voting + function test_GovernanceAdmin_UnPauseGateway_ThroughoutVoting() public { + test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); + + bytes memory calldata_ = abi.encodeCall(GatewayV3.unpause, ()); + _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); + + assertEq(_roninPauseEnforcer.emergency(), false); + assertEq(_roninGatewayV3.paused(), false); + } +} diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index 907554ba..b6da50d5 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -22,10 +22,6 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { super.setUp(); _config.switchTo(Network.RoninLocal.key()); - bytes memory calldata_ = - abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE_TRACKING, address(_bridgeTracking))); - _roninProposalUtils.functionDelegateCallGlobal(GlobalProposal.TargetOption.GatewayContract, calldata_); - vm.etch(address(_roninGatewayV3), address(new MockRoninGatewayV3Extended()).code); Transfer.Receipt memory receipt = Transfer.Receipt({ diff --git a/test/helpers/MainchainBridgeAdminUtils.t.sol b/test/helpers/MainchainBridgeAdminUtils.t.sol new file mode 100644 index 00000000..1d02105a --- /dev/null +++ b/test/helpers/MainchainBridgeAdminUtils.t.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; +import "./ProposalUtils.t.sol"; + +contract MainchainBridgeAdminUtils is ProposalUtils { + MainchainBridgeManager _contract; + address _sender; + + constructor(uint256 roninChainId, uint256[] memory signerPKs, MainchainBridgeManager contract_, address sender) + ProposalUtils(roninChainId, signerPKs) + { + _contract = contract_; + _sender = sender; + } + + function defaultExpiryTimestamp() public view returns (uint256) { + return block.timestamp + 10; + } + + function functionDelegateCall(address to, bytes memory data) public { + Proposal.ProposalDetail memory proposal = this.createProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + target: to, + value: 0, + calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), + gasAmount: 2_000_000, + nonce: _contract.round(_roninChainId) + 1 + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignatures(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.relayProposal(proposal, supports_, signatures); + } + + function functionDelegateCallGlobal(GlobalProposal.TargetOption target, bytes memory data) public { + GlobalProposal.GlobalProposalDetail memory proposal = this.createGlobalProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOption: target, + value: 0, + calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), + gasAmount: 2_000_000, + nonce: _contract.round(0) + 1 + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.relayGlobalProposal(proposal, supports_, signatures); + } + + function functionDelegateCallsGlobal(GlobalProposal.TargetOption[] memory targetOptions, bytes[] memory datas) public { + uint256 length = targetOptions.length; + if (length != datas.length || length == 0) revert("Invalid length"); + + bytes[] memory calldatas = new bytes[](length); + uint256[] memory values = new uint256[](length); + uint256[] memory gasAmounts = new uint256[](length); + for (uint256 i; i < length; i++) { + calldatas[i] = abi.encodeWithSignature("functionDelegateCall(bytes)", datas[i]); + values[i] = 0; + gasAmounts[i] = 2_000_000; + } + + GlobalProposal.GlobalProposalDetail memory proposal = GlobalProposal.GlobalProposalDetail({ + nonce: _contract.round(0) + 1, + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOptions: targetOptions, + values: values, + calldatas: calldatas, + gasAmounts: gasAmounts + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.relayGlobalProposal(proposal, supports_, signatures); + } + + function upgradeGlobal(GlobalProposal.TargetOption targetOption, uint256 nonce, bytes memory data) public { + GlobalProposal.GlobalProposalDetail memory proposal = this.createGlobalProposal({ + expiryTimestamp: this.defaultExpiryTimestamp(), + targetOption: targetOption, + value: 0, + calldata_: abi.encodeWithSignature("upgradeTo(bytes)", data), + gasAmount: 2_000_000, + nonce: nonce + }); + + SignatureConsumer.Signature[] memory signatures = this.generateSignaturesGlobal(proposal); + uint256 length = signatures.length; + Ballot.VoteType[] memory supports_ = new Ballot.VoteType[](length); + for (uint256 i; i < length; i++) { + supports_[i] = Ballot.VoteType.For; + } + vm.prank(_sender); + _contract.relayGlobalProposal(proposal, supports_, signatures); + } +} diff --git a/test/helpers/ProposalUtils.t.sol b/test/helpers/ProposalUtils.t.sol index d5667a2d..ef504c8b 100644 --- a/test/helpers/ProposalUtils.t.sol +++ b/test/helpers/ProposalUtils.t.sol @@ -38,7 +38,7 @@ contract ProposalUtils is Utils, Test { ) public view returns (Proposal.ProposalDetail memory proposal) { proposal = Proposal.ProposalDetail({ nonce: nonce, - chainId: _roninChainId, + chainId: block.chainid, expiryTimestamp: expiryTimestamp, targets: wrapAddress(target), values: wrapUint(value), From f86178223a61b54ae707a8f369f761e585245628 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Mon, 29 Jan 2024 10:01:05 +0700 Subject: [PATCH 65/73] chore: contract-code-sizes --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 4c5b215a..ced47400 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -51,7 +51,7 @@ | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | | ProxyAdmin | 1.684 | 22.892 | -| RoninBridgeManager | 24.601 | -0.025 | +| RoninBridgeManager | 24.72 | -0.144 | | RoninGatewayV3 | 19.765 | 4.811 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | From 94e848234f83a90fa74162450ee218da9b2e7ac4 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 2 Feb 2024 11:37:52 +0700 Subject: [PATCH 66/73] chore: remove update operator test --- test/bridge/integration/BaseIntegration.t.sol | 5 -- .../integration/bridge-tracking/.gitkeep | 0 .../depositVote.RoninGatewayV3.t.sol | 58 ------------------- 3 files changed, 63 deletions(-) delete mode 100644 test/bridge/integration/bridge-tracking/.gitkeep diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 47b1495d..0e6f875e 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -563,15 +563,10 @@ contract BaseIntegration_Test is Base_Test { function _wrapUpEpoch() internal { uint256 multiplier = _validatorSet.numberOfBlocksInEpoch(); - console.log("Before roll block.number: ", block.number); - vm.roll((block.number / multiplier + 1) * multiplier - 1); - console.log("After roll block.number: ", block.number); vm.prank(block.coinbase); - console.log("Before wrap up", _validatorSet.currentPeriod()); _validatorSet.wrapUpEpoch(); - console.log("After wrap up", _validatorSet.currentPeriod()); } function _setTimestampToPeriodEnding() internal { diff --git a/test/bridge/integration/bridge-tracking/.gitkeep b/test/bridge/integration/bridge-tracking/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index b6da50d5..f0e13164 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -15,8 +15,6 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { Transfer.Receipt[] _depositReceipts; uint256 _numOperatorsForVoteExecuted; - Transfer.Receipt[] first50Receipts; - Transfer.Receipt[] second50Receipts; function setUp() public virtual override { super.setUp(); @@ -83,60 +81,4 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { assertEq(totalWeight, (_numOperatorsForVoteExecuted) * 100); } } - - function test_bulkDeposit_100Txs() public { - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); - _wrapUpEpochAndMine(); - - vm.deal(address(_bridgeReward), 10 ether); - address newBridgeOperator = makeAddr("new-bridge-operator"); - Transfer.Receipt memory sampleReceipt = Transfer.Receipt({ - id: 0, - kind: Transfer.Kind.Deposit, - ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), - mainchain: Token.Owner({ - addr: makeAddr("requester"), - tokenAddr: address(_mainchainWeth), - chainId: _param.test.mainchainChainId - }), - info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) - }); - - uint256 id = 1; - for (uint256 i; i < 50; i++) { - first50Receipts.push(sampleReceipt); - second50Receipts.push(sampleReceipt); - first50Receipts[i].id = id; - second50Receipts[i].id = id + 50; - - id++; - } - - for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { - vm.prank(_param.roninBridgeManager.bridgeOperators[i]); - _roninGatewayV3.tryBulkDepositFor(first50Receipts); - } - - vm.prank(_param.roninBridgeManager.governors[0]); - _roninBridgeManager.updateBridgeOperator(newBridgeOperator); - - _param.roninBridgeManager.bridgeOperators[0] = newBridgeOperator; - - for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { - vm.prank(_param.roninBridgeManager.bridgeOperators[i]); - _roninGatewayV3.tryBulkDepositFor(second50Receipts); - } - - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); - _wrapUpEpochAndMine(); - - sampleReceipt.id = 101; - - for (uint256 i; i < _numOperatorsForVoteExecuted; i++) { - vm.prank(_param.roninBridgeManager.bridgeOperators[i]); - _roninGatewayV3.depositFor(sampleReceipt); - } - } } From a6f390ab7ea9284ab0a258371810c599d9ed9c08 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 2 Feb 2024 11:41:49 +0700 Subject: [PATCH 67/73] fix: add contract-code-sizes --- logs/contract-code-sizes.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index ced47400..4c5b215a 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -51,7 +51,7 @@ | PauseEnforcer | 4.548 | 20.028 | | Proposal | 0.166 | 24.41 | | ProxyAdmin | 1.684 | 22.892 | -| RoninBridgeManager | 24.72 | -0.144 | +| RoninBridgeManager | 24.601 | -0.025 | | RoninGatewayV3 | 19.765 | 4.811 | | StdStyle | 0.086 | 24.49 | | StorageSlot | 0.086 | 24.49 | From 5877a8644e3e7b9ba09e63efd77e860de20b0a43 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Fri, 2 Feb 2024 17:18:06 +0700 Subject: [PATCH 68/73] test: remove 2 local chains --- .github/workflows/test.yml | 2 - foundry.toml | 3 - script/GeneralConfig.sol | 22 +------ script/Migration.s.sol | 15 ++--- script/interfaces/ISharedArgument.sol | 2 - script/utils/Network.sol | 16 +---- test/bridge/integration/BaseIntegration.t.sol | 65 ++++++++----------- ...oteBridgeOperator.RoninBridgeManager.t.sol | 7 -- .../setConfig.MainchainManager.t.sol | 1 - .../setConfig.RoninBridgeManager.t.sol | 1 - ...IsApprovedInLastEpoch.BridgeTracking.t.sol | 42 ++++++------ ...otApprovedInLastEpoch.BridgeTracking.t.sol | 12 ++-- .../submitWithdrawal.MainchainGatewayV3.t.sol | 5 +- .../accessControl.PauseEnforcer.t.sol | 1 - .../emergencyAction.PauseEnforcer.t.sol | 17 ++--- .../set-config/normalPause.GatewayV3.t.sol | 1 - .../set-config/setConfig.PauseEnforcer.t.sol | 1 - .../depositVote.RoninGatewayV3.t.sol | 9 +-- test/helpers/MainchainBridgeAdminUtils.t.sol | 6 +- test/helpers/ProposalUtils.t.sol | 10 ++- test/helpers/RoninBridgeAdminUtils.t.sol | 6 +- 21 files changed, 79 insertions(+), 165 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e2b4e56..ad49e528 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,5 @@ jobs: - name: Run Forge tests run: | - anvil --chain-id 2024 --port 8546 --block-time 3 & - anvil --chain-id 2 --port 8547 --block-time 3 & forge test -vvv id: test diff --git a/foundry.toml b/foundry.toml index e20e1029..f72d3fc2 100644 --- a/foundry.toml +++ b/foundry.toml @@ -52,6 +52,3 @@ ethereum = "https://eth.llamarpc.com" goerli = "https://ethereum-goerli.publicnode.com" ronin-mainnet = "https://api-partner.roninchain.com/rpc" ronin-testnet = "https://saigon-archive.roninchain.com/rpc" - -ronin-local = "http://localhost:8546" -ethereum-local = "http://localhost:8547" diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index 57895eb2..0d85a792 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -36,24 +36,6 @@ contract GeneralConfig is BaseGeneralConfig, Utils { Network.RoninDevnet.envLabel(), Network.RoninDevnet.explorer() ); - - setNetworkInfo( - Network.RoninLocal.chainId(), - Network.RoninLocal.key(), - Network.RoninLocal.chainAlias(), - Network.RoninLocal.deploymentDir(), - Network.RoninLocal.envLabel(), - Network.RoninLocal.explorer() - ); - - setNetworkInfo( - Network.EthLocal.chainId(), - Network.EthLocal.key(), - Network.EthLocal.chainAlias(), - Network.EthLocal.deploymentDir(), - Network.EthLocal.envLabel(), - Network.EthLocal.explorer() - ); } function _setUpContracts() internal virtual override { @@ -82,8 +64,8 @@ contract GeneralConfig is BaseGeneralConfig, Utils { function getSender() public view virtual override returns (address payable sender) { sender = _option.trezor ? payable(_trezorSender) : payable(_envSender); - bool isLocalNetwork = getCurrentNetwork() == DefaultNetwork.Local.key() - || getCurrentNetwork() == Network.RoninLocal.key() || getCurrentNetwork() == Network.EthLocal.key(); + bool isLocalNetwork = getCurrentNetwork() == DefaultNetwork.Local.key(); + if (sender == address(0x0) && isLocalNetwork) sender = payable(DEFAULT_SENDER); require(sender != address(0x0), "GeneralConfig: Sender is address(0x0)"); } diff --git a/script/Migration.s.sol b/script/Migration.s.sol index 6fd4ff13..c77df0a1 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -26,13 +26,11 @@ contract Migration is BaseMigrationV2, Utils { // Undefined } else if (network() == DefaultNetwork.RoninTestnet.key()) { // Undefined - } else if (network() == Network.RoninLocal.key() || network() == Network.EthLocal.key()) { + } else if (network() == DefaultNetwork.Local.key()) { // test param.test.numberOfBlocksInEpoch = 200; param.test.proxyAdmin = makeAddr("proxy-admin"); param.test.dposGA = makeAddr("governance-admin"); - param.test.mainchainChainId = Network.EthLocal.chainId(); - param.test.roninChainId = Network.RoninLocal.chainId(); // tokens param.weth.name = "Wrapped WETH"; @@ -95,7 +93,7 @@ contract Migration is BaseMigrationV2, Utils { param.roninBridgeManager.num = 2; param.roninBridgeManager.denom = 4; param.roninBridgeManager.roninChainId = 0; - param.roninBridgeManager.roninChainId = param.test.roninChainId; + param.roninBridgeManager.roninChainId = block.chainid; param.roninBridgeManager.expiryDuration = 60 * 60 * 24 * 14; // 14 days param.roninBridgeManager.bridgeOperators = operatorAddrs; param.roninBridgeManager.governors = governorAddrs; @@ -108,7 +106,7 @@ contract Migration is BaseMigrationV2, Utils { param.mainchainPauseEnforcer.sentries = wrapAddress(makeAddr("pause-enforcer-sentry")); // Mainchain Gateway V3 - param.mainchainGatewayV3.roninChainId = param.test.roninChainId; + param.mainchainGatewayV3.roninChainId = block.chainid; param.mainchainGatewayV3.numerator = 1; param.mainchainGatewayV3.highTierVWNumerator = 10; param.mainchainGatewayV3.denominator = 10; @@ -117,14 +115,12 @@ contract Migration is BaseMigrationV2, Utils { param.mainchainBridgeManager.num = 2; param.mainchainBridgeManager.denom = 4; param.mainchainBridgeManager.roninChainId = 0; - param.mainchainBridgeManager.roninChainId = param.test.roninChainId; + param.mainchainBridgeManager.roninChainId = block.chainid; param.mainchainBridgeManager.bridgeOperators = operatorAddrs; param.mainchainBridgeManager.governors = governorAddrs; param.mainchainBridgeManager.voteWeights = voteWeights; param.mainchainBridgeManager.targetOptions = options; param.mainchainBridgeManager.targets = targets; - } else if (network() == DefaultNetwork.Local.key()) { - // Undefined } else { revert("Migration: Network Unknown Shared Parameters Unimplemented!"); } @@ -133,8 +129,7 @@ contract Migration is BaseMigrationV2, Utils { } function _getProxyAdmin() internal virtual override returns (address payable) { - bool isLocalNetwork = network() == DefaultNetwork.Local.key() || network() == Network.RoninLocal.key() - || network() == Network.EthLocal.key(); + bool isLocalNetwork = network() == DefaultNetwork.Local.key(); return isLocalNetwork ? payable(config.sharedArguments().test.proxyAdmin) : super._getProxyAdmin(); } } diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index ef5b215c..6ae10e68 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -97,8 +97,6 @@ interface ISharedArgument is IGeneralConfig { address proxyAdmin; uint256 numberOfBlocksInEpoch; address dposGA; - uint256 mainchainChainId; - uint256 roninChainId; uint256[] operatorPKs; uint256[] governorPKs; } diff --git a/script/utils/Network.sol b/script/utils/Network.sol index b98bd445..9eda031a 100644 --- a/script/utils/Network.sol +++ b/script/utils/Network.sol @@ -6,9 +6,7 @@ import { LibString, TNetwork } from "foundry-deployment-kit/types/Types.sol"; enum Network { Goerli, EthMainnet, - RoninDevnet, - RoninLocal, - EthLocal + RoninDevnet } using { key, name, chainId, chainAlias, envLabel, deploymentDir, explorer } for Network global; @@ -17,8 +15,6 @@ function chainId(Network network) pure returns (uint256) { if (network == Network.Goerli) return 5; if (network == Network.EthMainnet) return 1; if (network == Network.RoninDevnet) return 2022; - if (network == Network.RoninLocal) return 2024; - if (network == Network.EthLocal) return 2; revert("Network: Unknown chain id"); } @@ -36,8 +32,6 @@ function name(Network network) pure returns (string memory) { if (network == Network.Goerli) return "Goerli"; if (network == Network.RoninDevnet) return "RoninDevnet"; if (network == Network.EthMainnet) return "EthMainnet"; - if (network == Network.RoninLocal) return "RoninLocal"; - if (network == Network.EthLocal) return "EthLocal"; revert("Network: Unknown network name"); } @@ -46,8 +40,6 @@ function deploymentDir(Network network) pure returns (string memory) { if (network == Network.Goerli) return "goerli/"; if (network == Network.EthMainnet) return "ethereum/"; if (network == Network.RoninDevnet) return "ronin-devnet/"; - if (network == Network.RoninLocal) return ""; - if (network == Network.EthLocal) return ""; revert("Network: Unknown network deployment directory"); } @@ -56,8 +48,7 @@ function envLabel(Network network) pure returns (string memory) { if (network == Network.Goerli) return "TESTNET_PK"; if (network == Network.RoninDevnet) return "DEVNET_PK"; if (network == Network.EthMainnet) return "MAINNET_PK"; - if (network == Network.RoninLocal) return "DEVNET_PK"; - if (network == Network.EthLocal) return "DEVNET_PK"; + revert("Network: Unknown private key env label"); } @@ -65,7 +56,6 @@ function chainAlias(Network network) pure returns (string memory) { if (network == Network.Goerli) return "goerli"; if (network == Network.EthMainnet) return "ethereum"; if (network == Network.RoninDevnet) return "ronin-devnet"; - if (network == Network.RoninLocal) return "ronin-local"; - if (network == Network.EthLocal) return "ethereum-local"; + revert("Network: Unknown network alias"); } diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 0e6f875e..535bf093 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -105,9 +105,6 @@ contract BaseIntegration_Test is Base_Test { } function _deployContractsOnRonin() internal { - _config.createFork(Network.RoninLocal.key()); - _config.switchTo(Network.RoninLocal.key()); - _roninGatewayV3 = new RoninGatewayV3Deploy().run(); _bridgeTracking = new BridgeTrackingDeploy().run(); _bridgeSlash = new BridgeSlashDeploy().run(); @@ -122,16 +119,12 @@ contract BaseIntegration_Test is Base_Test { _roninUsdc = new USDCDeploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); - _roninProposalUtils = new RoninBridgeAdminUtils( - _param.test.roninChainId, _param.test.governorPKs, _roninBridgeManager, _param.roninBridgeManager.governors[0] - ); + _roninProposalUtils = + new RoninBridgeAdminUtils(_param.test.governorPKs, _roninBridgeManager, _param.roninBridgeManager.governors[0]); _validatorSet = new MockValidatorContract_OnlyTiming_ForHardhatTest(_param.test.numberOfBlocksInEpoch); } function _deployContractsOnMainchain() internal { - _config.createFork(Network.EthLocal.key()); - _config.switchTo(Network.EthLocal.key()); - _mainchainPauseEnforcer = new MainchainPauseEnforcerDeploy().run(); _mainchainGatewayV3 = new MainchainGatewayV3Deploy().run(); _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); @@ -144,29 +137,24 @@ contract BaseIntegration_Test is Base_Test { _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); _mainchainProposalUtils = new MainchainBridgeAdminUtils( - _param.test.roninChainId, - _param.test.governorPKs, - _mainchainBridgeManager, - _param.mainchainBridgeManager.governors[0] + _param.test.governorPKs, _mainchainBridgeManager, _param.mainchainBridgeManager.governors[0] ); } function _initializeRonin() internal { - _config.switchTo(Network.RoninLocal.key()); - - _validatorSet.setCurrentPeriod(block.timestamp / _validatorSet.PERIOD_DURATION() - 2); - + _moveToEndPeriodAndWrapUpEpoch(); + _moveToEndPeriodAndWrapUpEpoch(); _bridgeRewardInitialize(); + _bridgeTrackingInitialize(); _bridgeSlashInitialize(); + _roninPauseEnforcerInitialize(); _roninGatewayV3Initialize(); _constructForRoninBridgeManager(); } function _initializeMainchain() internal { - _config.switchTo(Network.EthLocal.key()); - _mainchainPauseEnforcerInitialize(); _constructForMainchainBridgeManager(); _mainchainGatewayV3Initialize(); @@ -264,7 +252,7 @@ contract BaseIntegration_Test is Base_Test { Token.Standard[] memory standards = new Token.Standard[](tokenNum); for (uint256 i; i < tokenNum; i++) { minimumThreshold[i] = 0; - chainIds[i] = _param.test.mainchainChainId; + chainIds[i] = block.chainid; standards[i] = Token.Standard.ERC20; } @@ -485,7 +473,7 @@ contract BaseIntegration_Test is Base_Test { _mainchainGatewayV3.initialize( param.roleSetter, IWETH(param.wrappedToken), - param.roninChainId, + block.chainid, param.numerator, param.highTierVWNumerator, param.denominator, @@ -506,8 +494,6 @@ contract BaseIntegration_Test is Base_Test { } function _changeAdminOnRonin() internal { - _config.switchTo(Network.RoninLocal.key()); - vm.startPrank(_param.test.proxyAdmin); TransparentUpgradeableProxyV2(payable(address(_roninGatewayV3))).changeAdmin(address(_roninBridgeManager)); TransparentUpgradeableProxyV2(payable(address(_bridgeReward))).changeAdmin(address(_roninBridgeManager)); @@ -517,35 +503,25 @@ contract BaseIntegration_Test is Base_Test { } function _changeAdminOnMainchain() internal { - _config.switchTo(Network.EthLocal.key()); - vm.startPrank(_param.test.proxyAdmin); TransparentUpgradeableProxyV2(payable(address(_mainchainGatewayV3))).changeAdmin(address(_mainchainBridgeManager)); vm.stopPrank(); } function _configEmergencyPauserForRoninGateway() internal { - _config.switchTo(Network.RoninLocal.key()); - bytes memory calldata_ = abi.encodeCall(GatewayV3.setEmergencyPauser, (address(_roninPauseEnforcer))); _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); } function _configEmergencyPauserForMainchainGateway() internal { - _config.switchTo(Network.EthLocal.key()); - bytes memory calldata_ = abi.encodeCall(GatewayV3.setEmergencyPauser, (address(_mainchainPauseEnforcer))); _mainchainProposalUtils.functionDelegateCall(address(_mainchainGatewayV3), calldata_); } function _configBridgeTrackingForRoninGateway() internal { - _config.switchTo(Network.RoninLocal.key()); - bytes memory calldata_ = abi.encodeCall(IHasContracts.setContract, (ContractType.BRIDGE_TRACKING, address(_bridgeTracking))); _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); - - _config.switchTo(Network.EthLocal.key()); } function _deployGeneralConfig() internal { @@ -561,15 +537,26 @@ contract BaseIntegration_Test is Base_Test { vm.roll(block.number + 1); } - function _wrapUpEpoch() internal { - uint256 multiplier = _validatorSet.numberOfBlocksInEpoch(); - vm.roll((block.number / multiplier + 1) * multiplier - 1); + function _moveToEndPeriodAndWrapUpEpoch() internal { + _fastForwardToNextDay(); + _wrapUpEpoch(); + } - vm.prank(block.coinbase); + function _wrapUpEpoch() internal { _validatorSet.wrapUpEpoch(); + vm.roll(block.number + _validatorSet.numberOfBlocksInEpoch()); } - function _setTimestampToPeriodEnding() internal { - vm.warp(((block.timestamp / 1 days) + 1) * 1 days); + function _fastForwardToNextDay() internal { + uint256 numberOfBlocksInEpoch = _validatorSet.numberOfBlocksInEpoch(); + + uint256 epochEndingBlockNumber = block.number + (numberOfBlocksInEpoch - 1) - (block.number % numberOfBlocksInEpoch); + uint256 nextDayTimestamp = block.timestamp + 1 days; + + // fast forward to next day + vm.warp(nextDayTimestamp); + vm.roll(epochEndingBlockNumber); } + + function test_setUpIntegration() public { } } diff --git a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol index 0b831b4c..63d56e58 100644 --- a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol @@ -55,8 +55,6 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { } function test_voteAddBridgeOperatorsProposal() public { - _config.switchTo(Network.RoninLocal.key()); - _globalProposal = _roninProposalUtils.createGlobalProposal({ expiryTimestamp: block.timestamp + _proposalExpiryDuration, targetOption: GlobalProposal.TargetOption.BridgeManager, @@ -88,8 +86,6 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { function test_relayAddBridgeOperator() public { test_voteAddBridgeOperatorsProposal(); - _config.switchTo(Network.EthLocal.key()); - // before relay assertEq(_mainchainBridgeManager.globalProposalRelayed(_globalProposal.nonce), false); assertEq(_mainchainBridgeManager.getBridgeOperators(), _beforeRelayedOperators); @@ -117,8 +113,6 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { uint256 numAddingOperators = seed % 10 + 10; _generateAddingOperators(numAddingOperators); - _config.switchTo(Network.RoninLocal.key()); - _globalProposal = _roninProposalUtils.createGlobalProposal({ expiryTimestamp: block.timestamp + _proposalExpiryDuration, targetOption: GlobalProposal.TargetOption.BridgeManager, @@ -150,7 +144,6 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { function test_relayExpiredProposal() public { test_voteAddBridgeOperatorsProposal(); - _config.switchTo(Network.EthLocal.key()); vm.warp(block.timestamp + _proposalExpiryDuration + 1); // before relay diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol index 311aefff..358c4810 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.MainchainManager.t.sol @@ -8,7 +8,6 @@ import "../../BaseIntegration.t.sol"; contract SetConfig_MainchainManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.EthLocal.key()); } function test_configBridgeContractCorrectly() external { diff --git a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol index 887ca08d..d27aa9d4 100644 --- a/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/set-config/setConfig.RoninBridgeManager.t.sol @@ -8,7 +8,6 @@ import "../../BaseIntegration.t.sol"; contract SetConfig_RoninBridgeManager_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); } function test_configBridgeContractCorrectly() external { diff --git a/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol index 3cdb172f..c4997634 100644 --- a/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol +++ b/test/bridge/integration/bridge-tracking/EpochE1_VoteIsApprovedInLastEpoch.BridgeTracking.t.sol @@ -5,6 +5,9 @@ import { IBridgeTracking } from "@ronin/contracts/interfaces/bridge/IBridgeTrack import { MockGatewayForTracking } from "@ronin/contracts/mocks/MockGatewayForTracking.sol"; import "../BaseIntegration.t.sol"; +import { EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test } from + "./EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol"; + // Epoch e-1 test: Vote is approved in the last epoch of period contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegration_Test { MockGatewayForTracking _mockRoninGatewayV3; @@ -16,7 +19,7 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); + vm.coinbase(makeAddr("coin-base-addr")); _operators.push(_param.roninBridgeManager.bridgeOperators[0]); @@ -33,14 +36,16 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio vm.deal(address(_bridgeReward), 10 ether); - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); - + _moveToEndPeriodAndWrapUpEpoch(); _period = _validatorSet.currentPeriod(); } // Epoch e-1: Vote & Approve & Vote > Should not record when not approved yet. Vote in last epoch (e-1). - function test_epochE1_notRecordVoteAndBallot_receiptWithoutApproval() public { + function test_epochEMinus1_notRecordVoteAndBallot_receiptWithoutApproval() public { + _wrapUpEpoch(); + _wrapUpEpoch(); + _wrapUpEpoch(); + _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, _operators); assertEq(_bridgeTracking.totalVote(_period), 0); @@ -50,8 +55,8 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio } // Epoch e-1: Vote & Approve & Vote > Should not record when approve. Approve in last epoch (e-1). - function test_epochE2_notRecordVoteAndBallot_approveInLastEpoch() public { - test_epochE1_notRecordVoteAndBallot_receiptWithoutApproval(); + function test_epochEMinus1_notRecordVoteAndBallot_approveInLastEpoch() public { + test_epochEMinus1_notRecordVoteAndBallot_receiptWithoutApproval(); _mockRoninGatewayV3.sendApprovedVote(_receiptKind, _receiptId); @@ -62,8 +67,8 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio } // Epoch e-1: Vote & Approve & Vote > Should not record even after approved. Vote in last epoch (e-1). - function test_epochE1_notRecordVoteAndBallot_voteInLastEpoch() public { - test_epochE2_notRecordVoteAndBallot_approveInLastEpoch(); + function test_epochEMinus1_notRecordVoteAndBallot_voteInLastEpoch() public { + test_epochEMinus1_notRecordVoteAndBallot_approveInLastEpoch(); _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[2])); @@ -76,11 +81,10 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio // Epoch e: vote > Should not record for current period metric when wrapping up period. Query in next epoch (e), for current period (p-1): return 0. function test_epochE_notRecordForCurrentPeriod_WhenWrappingUpPeriod() public { - test_epochE1_notRecordVoteAndBallot_voteInLastEpoch(); + test_epochEMinus1_notRecordVoteAndBallot_voteInLastEpoch(); uint256 lastPeriod = _period; - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); + _moveToEndPeriodAndWrapUpEpoch(); uint256 newPeriod = _validatorSet.currentPeriod(); _period = newPeriod; @@ -130,7 +134,7 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio } // Epoch 2e-1: vote > Should record new ballot for the buffer metric - function test_epoch2E_1_recordNewBallotForBufferMetric() public { + function test_epoch2EMinus1_recordNewBallotForBufferMetric() public { test_epochE_recordNewBallotForBufferMetric(); _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[4])); @@ -144,8 +148,7 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[3]), expectedTotalVotes); assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[4]), expectedTotalVotes); - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); + _moveToEndPeriodAndWrapUpEpoch(); assertEq(_bridgeTracking.totalVote(_period), expectedTotalVotes); assertEq(_bridgeTracking.totalBallot(_period), expectedTotalVotes * 5); @@ -157,8 +160,8 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio } // Epoch 3e: vote > Should not record new ballot. And the period metric is finalized as in epoch 2e-1. - function test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInEpoch2E_1() public { - test_epoch2E_1_recordNewBallotForBufferMetric(); + function test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInepoch2EMinus1() public { + test_epoch2EMinus1_recordNewBallotForBufferMetric(); _mockRoninGatewayV3.sendBallot(_receiptKind, _receiptId, wrapAddress(_param.roninBridgeManager.bridgeOperators[5])); @@ -175,10 +178,9 @@ contract EpochE1_VoteIsApprovedInLastEpoch_BridgeTracking_Test is BaseIntegratio // Epoch 3e: vote > Should the metric of the new period get reset. function test_epoch3E_metricOfNewPeriodGetReset() public { - test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInEpoch2E_1(); + test_epoch3E_notRecordNewBallot_periodMetricIsFinalizedAsInepoch2EMinus1(); - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); + _moveToEndPeriodAndWrapUpEpoch(); uint256 lastPeriod = _period; uint256 newPeriod = _validatorSet.currentPeriod(); diff --git a/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol index 1f3f2c03..5f487d0d 100644 --- a/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol +++ b/test/bridge/integration/bridge-tracking/EpochE2_VoteIsNotApprovedInLastEpoch.BridgeTracking.t.sol @@ -16,7 +16,7 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); + vm.coinbase(makeAddr("coin-base-addr")); // upgrade ronin gateway v3 @@ -28,8 +28,7 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra vm.deal(address(_bridgeReward), 10 ether); - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); + // _moveToEndPeriodAndWrapUpEpoch(); _period = _validatorSet.currentPeriod(); _receiptId = 0; @@ -49,7 +48,7 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); } - // Epoch e-2: Vote & Approve & Vote. > Should be able to approve the receipts and not record the approved receipts once the epoch is not yet wrapped up + // Epoch e-2: Vote & Approve & Vote. > Should be able to approve the receipts and Should not record the approved receipts once the epoch is not yet wrapped up function test_epochE2_recordVoteAndBallot_receiptIsApproved() public { test_epochE2_notRecordVoteAndBallot_receiptWithoutApproval(); @@ -60,7 +59,7 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra assertEq(_bridgeTracking.totalBallotOf(_period, _param.roninBridgeManager.bridgeOperators[1]), 0); } - // Epoch e-1: Continue voting for the vote of e-2 > Should be able to record the approved votes/ballots when the epoch is wrapped up + // Epoch e-1: Continue voting for the vote of e-2 > Should be able to record the approved votes/ballots when the epoch is wrapped up (value from buffer metric) function test_epochE1_continueVotingForVoteOfE2() public { test_epochE2_recordVoteAndBallot_receiptIsApproved(); @@ -92,8 +91,7 @@ contract EpochE2_VoteIsNotApprovedInLastEpoch_BridgeTracking_Test is BaseIntegra function test_epochE_continueVotingForVoteInE2_notRecordInNextPeriod() public { test_epochE1_recordForWhoVoteLately_onceRequestIsApproved(); - _setTimestampToPeriodEnding(); - _wrapUpEpochAndMine(); + _moveToEndPeriodAndWrapUpEpoch(); uint256 lastPeriod = _period; uint256 newPeriod = _validatorSet.currentPeriod(); diff --git a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol index ea51c8b9..eb60743e 100644 --- a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol +++ b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol @@ -16,7 +16,6 @@ contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.EthLocal.key()); _domainSeparator = _mainchainGatewayV3.DOMAIN_SEPARATOR(); @@ -24,10 +23,10 @@ contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { _withdrawalReceipt.kind = Transfer.Kind.Withdrawal; _withdrawalReceipt.ronin.addr = makeAddr("requester"); _withdrawalReceipt.ronin.tokenAddr = address(_roninWeth); - _withdrawalReceipt.ronin.chainId = _param.test.roninChainId; + _withdrawalReceipt.ronin.chainId = block.chainid; _withdrawalReceipt.mainchain.addr = makeAddr("recipient"); _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainWeth); - _withdrawalReceipt.mainchain.chainId = _param.test.mainchainChainId; + _withdrawalReceipt.mainchain.chainId = block.chainid; _withdrawalReceipt.info.erc = Token.Standard.ERC20; _withdrawalReceipt.info.id = 0; _withdrawalReceipt.info.quantity = 0; diff --git a/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol index 250529ba..a4b950cd 100644 --- a/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol @@ -6,7 +6,6 @@ import "../../BaseIntegration.t.sol"; contract AccessControl_PauseEnforcer_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); } function test_changeAdmin_OfPauseEnforcer() public { diff --git a/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol index 04126e76..d078ce95 100644 --- a/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol @@ -14,7 +14,6 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { // Should be able to emergency pause function test_EmergencyPause_RoninGatewayV3() public { - _config.switchTo(Network.RoninLocal.key()); vm.prank(_param.roninPauseEnforcer.sentries[0]); _roninPauseEnforcer.triggerPause(); @@ -28,12 +27,8 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { Transfer.Receipt memory receipt = Transfer.Receipt({ id: 0, kind: Transfer.Kind.Deposit, - ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), - mainchain: Token.Owner({ - addr: makeAddr("requester"), - tokenAddr: address(_mainchainWeth), - chainId: _param.test.mainchainChainId - }), + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: block.chainid }), + mainchain: Token.Owner({ addr: makeAddr("requester"), tokenAddr: address(_mainchainWeth), chainId: block.chainid }), info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) }); @@ -69,12 +64,8 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { Transfer.Receipt memory receipt = Transfer.Receipt({ id: 0, kind: Transfer.Kind.Deposit, - ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), - mainchain: Token.Owner({ - addr: makeAddr("requester"), - tokenAddr: address(_mainchainWeth), - chainId: _param.test.mainchainChainId - }), + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: block.chainid }), + mainchain: Token.Owner({ addr: makeAddr("requester"), tokenAddr: address(_mainchainWeth), chainId: block.chainid }), info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) }); diff --git a/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol b/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol index 77a3cb9a..cd9c1b1b 100644 --- a/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol +++ b/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol @@ -11,7 +11,6 @@ contract NormalPause_GatewayV3_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); } // Should gateway admin can pause the gateway through voting diff --git a/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol index e9bde218..60e7dd9c 100644 --- a/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/set-config/setConfig.PauseEnforcer.t.sol @@ -8,7 +8,6 @@ import "../../BaseIntegration.t.sol"; contract SetConfig_PauseEnforcer_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); } function test_configPauseEnforcerContract() public { diff --git a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol index f0e13164..055a1050 100644 --- a/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol +++ b/test/bridge/integration/ronin-gateway/depositVote.RoninGatewayV3.t.sol @@ -18,19 +18,14 @@ contract DepositVote_RoninGatewayV3_Test is BaseIntegration_Test { function setUp() public virtual override { super.setUp(); - _config.switchTo(Network.RoninLocal.key()); vm.etch(address(_roninGatewayV3), address(new MockRoninGatewayV3Extended()).code); Transfer.Receipt memory receipt = Transfer.Receipt({ id: 0, kind: Transfer.Kind.Deposit, - ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: _param.test.roninChainId }), - mainchain: Token.Owner({ - addr: makeAddr("requester"), - tokenAddr: address(_mainchainWeth), - chainId: _param.test.mainchainChainId - }), + ronin: Token.Owner({ addr: makeAddr("recipient"), tokenAddr: address(_roninWeth), chainId: block.chainid }), + mainchain: Token.Owner({ addr: makeAddr("requester"), tokenAddr: address(_mainchainWeth), chainId: block.chainid }), info: Token.Info({ erc: Token.Standard.ERC20, id: 0, quantity: 100 }) }); diff --git a/test/helpers/MainchainBridgeAdminUtils.t.sol b/test/helpers/MainchainBridgeAdminUtils.t.sol index 1d02105a..55c534d0 100644 --- a/test/helpers/MainchainBridgeAdminUtils.t.sol +++ b/test/helpers/MainchainBridgeAdminUtils.t.sol @@ -8,9 +8,7 @@ contract MainchainBridgeAdminUtils is ProposalUtils { MainchainBridgeManager _contract; address _sender; - constructor(uint256 roninChainId, uint256[] memory signerPKs, MainchainBridgeManager contract_, address sender) - ProposalUtils(roninChainId, signerPKs) - { + constructor(uint256[] memory signerPKs, MainchainBridgeManager contract_, address sender) ProposalUtils(signerPKs) { _contract = contract_; _sender = sender; } @@ -26,7 +24,7 @@ contract MainchainBridgeAdminUtils is ProposalUtils { value: 0, calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), gasAmount: 2_000_000, - nonce: _contract.round(_roninChainId) + 1 + nonce: _contract.round(block.chainid) + 1 }); SignatureConsumer.Signature[] memory signatures = this.generateSignatures(proposal); diff --git a/test/helpers/ProposalUtils.t.sol b/test/helpers/ProposalUtils.t.sol index ef504c8b..4e06b0b5 100644 --- a/test/helpers/ProposalUtils.t.sol +++ b/test/helpers/ProposalUtils.t.sol @@ -15,13 +15,11 @@ contract ProposalUtils is Utils, Test { using GlobalProposal for GlobalProposal.GlobalProposalDetail; using Proposal for Proposal.ProposalDetail; - uint256 _roninChainId; uint256[] _signerPKs; bytes32 _domain; - constructor(uint256 roninChainId, uint256[] memory signerPKs) { - _roninChainId = roninChainId; - _domain = getBridgeManagerDomain(roninChainId); + constructor(uint256[] memory signerPKs) { + _domain = getBridgeManagerDomain(); for (uint256 i; i < signerPKs.length; i++) { _signerPKs.push(signerPKs[i]); @@ -118,13 +116,13 @@ contract ProposalUtils is Utils, Test { return generateSignaturesGlobal(proposal, _signerPKs, Ballot.VoteType.For); } - function getBridgeManagerDomain(uint256 roninChainId) public pure returns (bytes32) { + function getBridgeManagerDomain() public view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,bytes32 salt)"), keccak256("BridgeAdmin"), // name hash keccak256("2"), // version hash - keccak256(abi.encode("BRIDGE_ADMIN", roninChainId)) // salt + keccak256(abi.encode("BRIDGE_ADMIN", block.chainid)) // salt ) ); } diff --git a/test/helpers/RoninBridgeAdminUtils.t.sol b/test/helpers/RoninBridgeAdminUtils.t.sol index 180d88fe..1b65257d 100644 --- a/test/helpers/RoninBridgeAdminUtils.t.sol +++ b/test/helpers/RoninBridgeAdminUtils.t.sol @@ -8,9 +8,7 @@ contract RoninBridgeAdminUtils is ProposalUtils { RoninBridgeManager _contract; address _sender; - constructor(uint256 roninChainId, uint256[] memory signerPKs, RoninBridgeManager contract_, address sender) - ProposalUtils(roninChainId, signerPKs) - { + constructor(uint256[] memory signerPKs, RoninBridgeManager contract_, address sender) ProposalUtils(signerPKs) { _contract = contract_; _sender = sender; } @@ -26,7 +24,7 @@ contract RoninBridgeAdminUtils is ProposalUtils { value: 0, calldata_: abi.encodeWithSignature("functionDelegateCall(bytes)", data), gasAmount: 2_000_000, - nonce: _contract.round(_roninChainId) + 1 + nonce: _contract.round(block.chainid) + 1 }); SignatureConsumer.Signature[] memory signatures = this.generateSignatures(proposal); From 1350f80601438e82785ee5e44a4743cd6f54be75 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sat, 3 Feb 2024 01:07:08 +0700 Subject: [PATCH 69/73] chore: refactor pause enforcer test --- logs/contract-code-sizes.log | 2 +- .../{set-config => }/accessControl.PauseEnforcer.t.sol | 2 +- .../{set-config => }/emergencyAction.PauseEnforcer.t.sol | 2 +- .../pause-enforcer/{set-config => }/normalPause.GatewayV3.t.sol | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename test/bridge/integration/pause-enforcer/{set-config => }/accessControl.PauseEnforcer.t.sol (95%) rename test/bridge/integration/pause-enforcer/{set-config => }/emergencyAction.PauseEnforcer.t.sol (98%) rename test/bridge/integration/pause-enforcer/{set-config => }/normalPause.GatewayV3.t.sol (98%) diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index 4c5b215a..d4d56b11 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -15,7 +15,7 @@ | ERC20PresetMinterPauser | 6.368 | 18.208 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | -| GeneralConfig | 20.616 | 3.96 | +| GeneralConfig | 20.136 | 4.44 | | GeneralConfigExtended | 20.35 | 4.226 | | GlobalProposal | 0.166 | 24.41 | | HasBridgeDeprecated | 0.063 | 24.513 | diff --git a/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol similarity index 95% rename from test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol rename to test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol index a4b950cd..ec307524 100644 --- a/test/bridge/integration/pause-enforcer/set-config/accessControl.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "../../BaseIntegration.t.sol"; +import "../BaseIntegration.t.sol"; contract AccessControl_PauseEnforcer_Test is BaseIntegration_Test { function setUp() public virtual override { diff --git a/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol similarity index 98% rename from test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol rename to test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol index d078ce95..d161dc78 100644 --- a/test/bridge/integration/pause-enforcer/set-config/emergencyAction.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.19; import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; -import "../../BaseIntegration.t.sol"; +import "../BaseIntegration.t.sol"; contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { error ErrTargetIsNotOnPaused(); diff --git a/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol b/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol similarity index 98% rename from test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol rename to test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol index cd9c1b1b..2f4d7192 100644 --- a/test/bridge/integration/pause-enforcer/set-config/normalPause.GatewayV3.t.sol +++ b/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.19; import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; import { GatewayV3 } from "@ronin/contracts/extensions/GatewayV3.sol"; -import "../../BaseIntegration.t.sol"; +import "../BaseIntegration.t.sol"; contract NormalPause_GatewayV3_Test is BaseIntegration_Test { error ErrNotOnEmergencyPause(); From 62fe2c2f2640f054443190a51b0f1737c39b2422 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 4 Feb 2024 16:46:22 +0700 Subject: [PATCH 70/73] test(MainchainGatewayV3): add test submitWithdrawal --- script/GeneralConfig.sol | 1 + script/Migration.s.sol | 2 + script/contracts/token/MockERC721Deploy.s.sol | 19 ++ script/interfaces/ISharedArgument.sol | 6 + script/utils/Contract.sol | 2 + src/mocks/token/MockERC721.sol | 12 + test/bridge/integration/BaseIntegration.t.sol | 83 +++--- ...oteBridgeOperator.RoninBridgeManager.t.sol | 5 + .../submitWithdrawal.MainchainGatewayV3.t.sol | 68 ----- .../submitWithdrawal.MainchainGatewayV3.t.sol | 255 ++++++++++++++++++ .../accessControl.PauseEnforcer.t.sol | 2 + .../emergencyAction.PauseEnforcer.t.sol | 10 +- .../normalPause.GatewayV3.t.sol | 8 +- 13 files changed, 358 insertions(+), 115 deletions(-) create mode 100644 script/contracts/token/MockERC721Deploy.s.sol create mode 100644 src/mocks/token/MockERC721.sol delete mode 100644 test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol create mode 100644 test/bridge/integration/mainchain-gateway/submitWithdrawal.MainchainGatewayV3.t.sol diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol index 0d85a792..2651f1f0 100644 --- a/script/GeneralConfig.sol +++ b/script/GeneralConfig.sol @@ -47,6 +47,7 @@ contract GeneralConfig is BaseGeneralConfig, Utils { _mapContractName(Contract.RoninBridgeManager); _mapContractName(Contract.MainchainGatewayV3); _mapContractName(Contract.MainchainBridgeManager); + _mapContractName(Contract.MockERC721); _contractNameMap[Contract.WETH.key()] = "MockWrappedToken"; _contractNameMap[Contract.WRON.key()] = "MockWrappedToken"; diff --git a/script/Migration.s.sol b/script/Migration.s.sol index c77df0a1..ecec4fa8 100644 --- a/script/Migration.s.sol +++ b/script/Migration.s.sol @@ -43,6 +43,8 @@ contract Migration is BaseMigrationV2, Utils { param.slp.symbol = "SLP"; param.usdc.name = "USD Coin"; param.usdc.symbol = "USDC"; + param.mockErc721.name = "Mock ERC721"; + param.mockErc721.symbol = "M_ERC721"; uint256 num = 6; address[] memory operatorAddrs = new address[](num); diff --git a/script/contracts/token/MockERC721Deploy.s.sol b/script/contracts/token/MockERC721Deploy.s.sol new file mode 100644 index 00000000..f310a1b9 --- /dev/null +++ b/script/contracts/token/MockERC721Deploy.s.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { MockERC721 } from "@ronin/contracts/mocks/token/MockERC721.sol"; +import { Contract } from "../../utils/Contract.sol"; +import { ISharedArgument } from "../../interfaces/ISharedArgument.sol"; +import { Migration } from "../../Migration.s.sol"; + +contract MockERC721Deploy is Migration { + function _defaultArguments() internal virtual override returns (bytes memory args) { + ISharedArgument.MockERC721Param memory param = config.sharedArguments().mockErc721; + + args = abi.encode(param.name, param.symbol); + } + + function run() public virtual returns (MockERC721) { + return MockERC721(_deployImmutable(Contract.MockERC721.key())); + } +} diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol index 6ae10e68..37971d4d 100644 --- a/script/interfaces/ISharedArgument.sol +++ b/script/interfaces/ISharedArgument.sol @@ -93,6 +93,11 @@ interface ISharedArgument is IGeneralConfig { string symbol; } + struct MockERC721Param { + string name; + string symbol; + } + struct UnitTestParam { address proxyAdmin; uint256 numberOfBlocksInEpoch; @@ -119,6 +124,7 @@ interface ISharedArgument is IGeneralConfig { MockERC20Param axs; MockERC20Param slp; MockERC20Param usdc; + MockERC721Param mockErc721; UnitTestParam test; } diff --git a/script/utils/Contract.sol b/script/utils/Contract.sol index 9578abc9..e94823f6 100644 --- a/script/utils/Contract.sol +++ b/script/utils/Contract.sol @@ -9,6 +9,7 @@ enum Contract { AXS, SLP, USDC, + MockERC721, BridgeTracking, BridgeSlash, BridgeReward, @@ -32,6 +33,7 @@ function name(Contract contractEnum) pure returns (string memory) { if (contractEnum == Contract.AXS) return "AXS"; if (contractEnum == Contract.SLP) return "SLP"; if (contractEnum == Contract.USDC) return "USDC"; + if (contractEnum == Contract.MockERC721) return "MockERC721"; if (contractEnum == Contract.BridgeTracking) return "BridgeTracking"; if (contractEnum == Contract.BridgeSlash) return "BridgeSlash"; diff --git a/src/mocks/token/MockERC721.sol b/src/mocks/token/MockERC721.sol new file mode 100644 index 00000000..4ce9bf29 --- /dev/null +++ b/src/mocks/token/MockERC721.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract MockERC721 is ERC721 { + constructor(string memory name, string memory symbol) ERC721(name, symbol) { } + + function mint(address to, uint256 id) external { + _mint(to, id); + } +} diff --git a/test/bridge/integration/BaseIntegration.t.sol b/test/bridge/integration/BaseIntegration.t.sol index 535bf093..3d34ca72 100644 --- a/test/bridge/integration/BaseIntegration.t.sol +++ b/test/bridge/integration/BaseIntegration.t.sol @@ -17,6 +17,8 @@ import { BridgeReward } from "@ronin/contracts/ronin/gateway/BridgeReward.sol"; import { MainchainGatewayV3 } from "@ronin/contracts/mainchain/MainchainGatewayV3.sol"; import { MainchainBridgeManager } from "@ronin/contracts/mainchain/MainchainBridgeManager.sol"; import { MockERC20 } from "@ronin/contracts/mocks/token/MockERC20.sol"; +import { MockERC721 } from "@ronin/contracts/mocks/token/MockERC721.sol"; + import { MockWrappedToken } from "@ronin/contracts/mocks/token/MockWrappedToken.sol"; import { GlobalProposal } from "@ronin/contracts/libraries/GlobalProposal.sol"; import { Proposal } from "@ronin/contracts/libraries/Proposal.sol"; @@ -50,6 +52,7 @@ import { WRONDeploy } from "@ronin/script/contracts/token/WRONDeploy.s.sol"; import { AXSDeploy } from "@ronin/script/contracts/token/AXSDeploy.s.sol"; import { SLPDeploy } from "@ronin/script/contracts/token/SLPDeploy.s.sol"; import { USDCDeploy } from "@ronin/script/contracts/token/USDCDeploy.s.sol"; +import { MockERC721Deploy } from "@ronin/script/contracts/token/MockERC721Deploy.s.sol"; import { RoninBridgeAdminUtils } from "test/helpers/RoninBridgeAdminUtils.t.sol"; import { MainchainBridgeAdminUtils } from "test/helpers/MainchainBridgeAdminUtils.t.sol"; @@ -74,12 +77,13 @@ contract BaseIntegration_Test is Base_Test { MockERC20 _roninAxs; MockERC20 _roninSlp; MockERC20 _roninUsdc; + MockERC721 _roninMockERC721; MockWrappedToken _mainchainWeth; - MockWrappedToken _mainchainWron; MockERC20 _mainchainAxs; MockERC20 _mainchainSlp; MockERC20 _mainchainUsdc; + MockERC721 _mainchainMockERC721; MockValidatorContract_OnlyTiming_ForHardhatTest _validatorSet; @@ -117,6 +121,7 @@ contract BaseIntegration_Test is Base_Test { _roninAxs = new AXSDeploy().run(); _roninSlp = new SLPDeploy().run(); _roninUsdc = new USDCDeploy().run(); + _roninMockERC721 = new MockERC721Deploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); _roninProposalUtils = @@ -130,10 +135,10 @@ contract BaseIntegration_Test is Base_Test { _mainchainBridgeManager = new MainchainBridgeManagerDeploy().run(); _mainchainWeth = new WETHDeploy().run(); - _mainchainWron = new WRONDeploy().run(); _mainchainAxs = new AXSDeploy().run(); _mainchainSlp = new SLPDeploy().run(); _mainchainUsdc = new USDCDeploy().run(); + _mainchainMockERC721 = new MockERC721Deploy().run(); _param = ISharedArgument(LibSharedAddress.CONFIG).sharedArguments(); _mainchainProposalUtils = new MainchainBridgeAdminUtils( @@ -160,28 +165,6 @@ contract BaseIntegration_Test is Base_Test { _mainchainGatewayV3Initialize(); } - function _getMainchainAndRoninTokens() - internal - view - returns (address[] memory mainchainTokens, address[] memory roninTokens) - { - uint256 tokenNum = 6; - mainchainTokens = new address[](tokenNum); - roninTokens = new address[](tokenNum); - - mainchainTokens[0] = address(_mainchainWeth); - mainchainTokens[1] = address(_mainchainWron); - mainchainTokens[2] = address(_mainchainAxs); - mainchainTokens[3] = address(_mainchainSlp); - mainchainTokens[4] = address(_mainchainUsdc); - - roninTokens[0] = address(_roninWeth); - roninTokens[1] = address(_roninWron); - roninTokens[2] = address(_roninAxs); - roninTokens[3] = address(_roninSlp); - roninTokens[4] = address(_roninUsdc); - } - function _bridgeRewardInitialize() internal { // Bridge rewards _param.bridgeReward.validatorSetContract = address(_validatorSet); @@ -246,14 +229,16 @@ contract BaseIntegration_Test is Base_Test { function _roninGatewayV3Initialize() internal { (address[] memory mainchainTokens, address[] memory roninTokens) = _getMainchainAndRoninTokens(); - uint256 tokenNum = mainchainTokens.length; + uint256 tokenNum = mainchainTokens.length; // reserve slot for ERC721Tokens uint256[] memory minimumThreshold = new uint256[](tokenNum); uint256[] memory chainIds = new uint256[](tokenNum); Token.Standard[] memory standards = new Token.Standard[](tokenNum); for (uint256 i; i < tokenNum; i++) { - minimumThreshold[i] = 0; + bool isERC721 = i == mainchainTokens.length - 1; // last item is ERC721 + + minimumThreshold[i] = 20; chainIds[i] = block.chainid; - standards[i] = Token.Standard.ERC20; + standards[i] = isERC721 ? Token.Standard.ERC721 : Token.Standard.ERC20; } // Ronin Gateway V3 @@ -447,20 +432,22 @@ contract BaseIntegration_Test is Base_Test { uint256[] memory lockedThreshold = new uint256[](tokenNum); uint256[] memory unlockFeePercentages = new uint256[](tokenNum); uint256[] memory dailyWithdrawalLimits = new uint256[](tokenNum); - - highTierThreshold[0] = 10; - lockedThreshold[0] = 20; - unlockFeePercentages[0] = 100_000; - dailyWithdrawalLimits[0] = 12; - Token.Standard[] memory standards = new Token.Standard[](tokenNum); + for (uint256 i; i < tokenNum; i++) { - standards[i] = Token.Standard.ERC20; + bool isERC721 = i == mainchainTokens.length - 1; // last item is ERC721 + + highTierThreshold[i] = 10; + lockedThreshold[i] = 20; + unlockFeePercentages[i] = 100_000; + dailyWithdrawalLimits[i] = 12; + standards[i] = isERC721 ? Token.Standard.ERC721 : Token.Standard.ERC20; } // Mainchain Gateway V3 - _param.mainchainGatewayV3.addresses[0] = mainchainTokens; - _param.mainchainGatewayV3.addresses[1] = roninTokens; + _param.mainchainGatewayV3.wrappedToken = address(_mainchainWeth); + _param.mainchainGatewayV3.addresses[0] = mainchainTokens; // (ERC20 + ERC721) + _param.mainchainGatewayV3.addresses[1] = roninTokens; // (ERC20 + ERC721) _param.mainchainGatewayV3.addresses[2] = getEmptyAddressArray(); _param.mainchainGatewayV3.thresholds[0] = highTierThreshold; _param.mainchainGatewayV3.thresholds[1] = lockedThreshold; @@ -493,6 +480,28 @@ contract BaseIntegration_Test is Base_Test { _mainchainPauseEnforcer.initialize(IPauseTarget(param.target), param.admin, param.sentries); } + function _getMainchainAndRoninTokens() + internal + view + returns (address[] memory mainchainTokens, address[] memory roninTokens) + { + uint256 tokenNum = 5; + mainchainTokens = new address[](tokenNum); + roninTokens = new address[](tokenNum); + + mainchainTokens[0] = address(_mainchainWeth); + mainchainTokens[1] = address(_mainchainAxs); + mainchainTokens[2] = address(_mainchainSlp); + mainchainTokens[3] = address(_mainchainUsdc); + mainchainTokens[4] = address(_mainchainMockERC721); + + roninTokens[0] = address(_roninWeth); + roninTokens[1] = address(_roninAxs); + roninTokens[2] = address(_roninSlp); + roninTokens[3] = address(_roninUsdc); + roninTokens[4] = address(_roninMockERC721); + } + function _changeAdminOnRonin() internal { vm.startPrank(_param.test.proxyAdmin); TransparentUpgradeableProxyV2(payable(address(_roninGatewayV3))).changeAdmin(address(_roninBridgeManager)); @@ -557,6 +566,4 @@ contract BaseIntegration_Test is Base_Test { vm.warp(nextDayTimestamp); vm.roll(epochEndingBlockNumber); } - - function test_setUpIntegration() public { } } diff --git a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol index 63d56e58..5d45e546 100644 --- a/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol +++ b/test/bridge/integration/bridge-manager/propose-and-cast-vote/voteBridgeOperator.RoninBridgeManager.t.sol @@ -54,6 +54,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { _generateAddingOperators(_addingOperatorNum); } + // Should be able to vote bridge operators function test_voteAddBridgeOperatorsProposal() public { _globalProposal = _roninProposalUtils.createGlobalProposal({ expiryTimestamp: block.timestamp + _proposalExpiryDuration, @@ -83,6 +84,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { assertEq(_roninBridgeManager.getBridgeOperators(), _afterRelayedOperators); } + // Should be able relay the vote of bridge operators function test_relayAddBridgeOperator() public { test_voteAddBridgeOperatorsProposal(); @@ -98,6 +100,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { assertEq(_mainchainBridgeManager.getBridgeOperators(), _afterRelayedOperators); } + // Should not able to relay again function test_RevertWhen_RelayAgain() public { test_relayAddBridgeOperator(); @@ -109,6 +112,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { _mainchainBridgeManager.relayGlobalProposal(_globalProposal, _supports, _signatures); } + // Should be able to vote for a larger number of bridge operators function test_voteForLargeNumberOfOperators(uint256 seed) public { uint256 numAddingOperators = seed % 10 + 10; _generateAddingOperators(numAddingOperators); @@ -141,6 +145,7 @@ contract VoteBridgeOperator_RoninBridgeManager_Test is BaseIntegration_Test { assertEq(_roninBridgeManager.getBridgeOperators(), _afterRelayedOperators); } + // Should the approved proposal can be relayed on mainchain (even when the time of expiry is passed) function test_relayExpiredProposal() public { test_voteAddBridgeOperatorsProposal(); diff --git a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol deleted file mode 100644 index eb60743e..00000000 --- a/test/bridge/integration/mainchain-gateway/submit-withdrawal/submitWithdrawal.MainchainGatewayV3.t.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { console2 as console } from "forge-std/console2.sol"; -import { ContractType } from "@ronin/contracts/utils/ContractType.sol"; -import { Transfer } from "@ronin/contracts/libraries/Transfer.sol"; -import { Token } from "@ronin/contracts/libraries/Token.sol"; -import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; -import "../../BaseIntegration.t.sol"; - -contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { - using Transfer for Transfer.Receipt; - - Transfer.Receipt _withdrawalReceipt; - bytes32 _domainSeparator; - - function setUp() public virtual override { - super.setUp(); - - _domainSeparator = _mainchainGatewayV3.DOMAIN_SEPARATOR(); - - _withdrawalReceipt.id = 0; - _withdrawalReceipt.kind = Transfer.Kind.Withdrawal; - _withdrawalReceipt.ronin.addr = makeAddr("requester"); - _withdrawalReceipt.ronin.tokenAddr = address(_roninWeth); - _withdrawalReceipt.ronin.chainId = block.chainid; - _withdrawalReceipt.mainchain.addr = makeAddr("recipient"); - _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainWeth); - _withdrawalReceipt.mainchain.chainId = block.chainid; - _withdrawalReceipt.info.erc = Token.Standard.ERC20; - _withdrawalReceipt.info.id = 0; - _withdrawalReceipt.info.quantity = 0; - - vm.deal(address(_mainchainGatewayV3), 10 ether); - vm.prank(address(_mainchainGatewayV3)); - _mainchainWeth.deposit{ value: 10 ether }(); - } - - function test_submitWithdrawal() public { - _withdrawalReceipt.info.quantity = 10; - - SignatureConsumer.Signature[] memory signatures = - _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); - - _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); - } - - function _generateSignaturesFor(Transfer.Receipt memory receipt, uint256[] memory signerPKs) - internal - view - returns (SignatureConsumer.Signature[] memory sigs) - { - sigs = new SignatureConsumer.Signature[](signerPKs.length); - - for (uint256 i; i < signerPKs.length; i++) { - bytes32 digest = keccak256(abi.encodePacked("\x19\x01", _domainSeparator, receipt.hash())); - - sigs[i] = _sign(signerPKs[i], digest); - } - } - - function _sign(uint256 pk, bytes32 digest) internal pure returns (SignatureConsumer.Signature memory sig) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); - sig.v = v; - sig.r = r; - sig.s = s; - } -} diff --git a/test/bridge/integration/mainchain-gateway/submitWithdrawal.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/submitWithdrawal.MainchainGatewayV3.t.sol new file mode 100644 index 00000000..fd18b7db --- /dev/null +++ b/test/bridge/integration/mainchain-gateway/submitWithdrawal.MainchainGatewayV3.t.sol @@ -0,0 +1,255 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 as console } from "forge-std/console2.sol"; +import { Transfer as LibTransfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; +import { SignatureConsumer } from "@ronin/contracts/interfaces/consumers/SignatureConsumer.sol"; +import { IMainchainGatewayV3 } from "@ronin/contracts/interfaces/IMainchainGatewayV3.sol"; +import "../BaseIntegration.t.sol"; + +interface IERC721 { + event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); +} + +interface IERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract SubmitWithdrawal_MainchainGatewayV3_Test is BaseIntegration_Test { + event Withdrew(bytes32 receiptHash, LibTransfer.Receipt receipt); + + error ErrInvalidOrder(bytes4); + error ErrQueryForApprovedWithdrawal(); + error ErrReachedDailyWithdrawalLimit(); + error ErrQueryForProcessedWithdrawal(); + error ErrQueryForInsufficientVoteWeight(); + + using LibTransfer for LibTransfer.Receipt; + + LibTransfer.Receipt _withdrawalReceipt; + bytes32 _domainSeparator; + + function setUp() public virtual override { + super.setUp(); + + _domainSeparator = _mainchainGatewayV3.DOMAIN_SEPARATOR(); + + _withdrawalReceipt.id = 0; + _withdrawalReceipt.kind = LibTransfer.Kind.Withdrawal; + _withdrawalReceipt.ronin.addr = makeAddr("requester"); + _withdrawalReceipt.ronin.tokenAddr = address(_roninWeth); + _withdrawalReceipt.ronin.chainId = block.chainid; + _withdrawalReceipt.mainchain.addr = makeAddr("recipient"); + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainWeth); + _withdrawalReceipt.mainchain.chainId = block.chainid; + _withdrawalReceipt.info.erc = Token.Standard.ERC20; + _withdrawalReceipt.info.id = 0; + _withdrawalReceipt.info.quantity = 10; + + vm.deal(address(_mainchainGatewayV3), 10 ether); + } + + // test withdrawal > should not be able to withdraw without enough signature + function test_RevertWhen_NotEnoughSignatures() public { + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, wrapUint(_param.test.operatorPKs[0])); + + vm.expectRevert(ErrQueryForInsufficientVoteWeight.selector); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + } + + // test withdrawal > should not be able to withdraw eth with wrong order of signatures + function test_RevertWhen_InvalidOrderSignatures() public { + require(_param.test.operatorPKs.length > 1, "Amounts of operators too small"); + + // swap order of signatures (operator 0 <-> operator 1) + uint256 tempPK = _param.test.operatorPKs[0]; + _param.test.operatorPKs[0] = _param.test.operatorPKs[1]; + _param.test.operatorPKs[1] = tempPK; + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectRevert(abi.encodeWithSelector(ErrInvalidOrder.selector, IMainchainGatewayV3.submitWithdrawal.selector)); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + } + + // test withdrawal > should be able to withdraw eth + function test_WithdrawNative_OnMainchain() public { + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + uint256 balanceBefore = _withdrawalReceipt.mainchain.addr.balance; + + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + uint256 balanceAfter = _withdrawalReceipt.mainchain.addr.balance; + assertEq(balanceAfter, balanceBefore + _withdrawalReceipt.info.quantity); + } + + // test withdrawal > should not able to withdraw with same withdrawalId + function test_RevertWhen_WithdrawWithSameId() public { + test_WithdrawNative_OnMainchain(); + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectRevert(ErrQueryForProcessedWithdrawal.selector); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + } + + // test withdrawal > should be able to withdraw for self + function test_WithdrawForSelf() public { + address sender = makeAddr("sender"); + _withdrawalReceipt.mainchain.addr = sender; + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + vm.prank(sender); + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + assertEq(sender.balance, _withdrawalReceipt.info.quantity); + } + + // test withdrawal > should be able to withdraw locked erc20 + function test_WithdrawLockedERC20() public { + address recipient = _withdrawalReceipt.mainchain.addr; + uint256 quantity = _withdrawalReceipt.info.quantity; + + _mainchainAxs.mint(address(_mainchainGatewayV3), quantity); + + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainAxs); + _withdrawalReceipt.ronin.tokenAddr = address(_roninAxs); + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectEmit(address(_mainchainAxs)); + emit IERC20.Transfer(address(_mainchainGatewayV3), recipient, quantity); + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + uint256 balanceBefore = _mainchainAxs.balanceOf(recipient); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + uint256 balanceAfter = _mainchainAxs.balanceOf(recipient); + + assertEq(balanceAfter, balanceBefore + quantity); + } + + // test withdraw > should be able to mint new erc20 token when withdrawing + function test_MintTokenWhileWithdrawing() public { + address recipient = _withdrawalReceipt.mainchain.addr; + uint256 quantity = _withdrawalReceipt.info.quantity; + + uint256 balanceBefore = _mainchainSlp.balanceOf(recipient); + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainSlp); + _withdrawalReceipt.ronin.tokenAddr = address(_roninSlp); + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectEmit(address(_mainchainSlp)); + emit IERC20.Transfer(address(0), address(_mainchainGatewayV3), quantity); + + vm.expectEmit(address(_mainchainSlp)); + emit IERC20.Transfer(address(_mainchainGatewayV3), recipient, quantity); + + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + uint256 balanceAfter = _mainchainSlp.balanceOf(recipient); + + assertEq(balanceAfter, balanceBefore + quantity); + } + + // test withdraw > should be able to withdraw locked erc721 + function test_WithdrawERC721Token() public { + address recipient = _withdrawalReceipt.mainchain.addr; + + uint256 tokenId = 22; + _mainchainMockERC721.mint(address(_mainchainGatewayV3), tokenId); + + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainMockERC721); + _withdrawalReceipt.ronin.tokenAddr = address(_roninMockERC721); + _withdrawalReceipt.info.id = tokenId; + _withdrawalReceipt.info.erc = Token.Standard.ERC721; + _withdrawalReceipt.info.quantity = 0; + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectEmit(address(_mainchainMockERC721)); + emit IERC721.Transfer(address(_mainchainGatewayV3), recipient, tokenId); + + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + assertEq(_mainchainMockERC721.ownerOf(tokenId), address(_mainchainGatewayV3)); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + assertEq(_mainchainMockERC721.ownerOf(tokenId), recipient); + } + + // test withdraw > should be able to mint new erc721 when withdrawing + function test_MintERC721TokenWhileWithdrawing() public { + address recipient = _withdrawalReceipt.mainchain.addr; + + uint256 tokenId = 22; + + _withdrawalReceipt.mainchain.tokenAddr = address(_mainchainMockERC721); + _withdrawalReceipt.ronin.tokenAddr = address(_roninMockERC721); + _withdrawalReceipt.info.id = tokenId; + _withdrawalReceipt.info.erc = Token.Standard.ERC721; + _withdrawalReceipt.info.quantity = 0; + + SignatureConsumer.Signature[] memory signatures = + _generateSignaturesFor(_withdrawalReceipt, _param.test.operatorPKs); + + vm.expectEmit(address(_mainchainMockERC721)); + emit IERC721.Transfer(address(0), recipient, tokenId); + + vm.expectEmit(address(_mainchainGatewayV3)); + emit Withdrew(_withdrawalReceipt.hash(), _withdrawalReceipt); + + _mainchainGatewayV3.submitWithdrawal(_withdrawalReceipt, signatures); + + assertEq(_mainchainMockERC721.ownerOf(tokenId), recipient); + } + + function _generateSignaturesFor(LibTransfer.Receipt memory receipt, uint256[] memory signerPKs) + internal + view + returns (SignatureConsumer.Signature[] memory sigs) + { + sigs = new SignatureConsumer.Signature[](signerPKs.length); + + for (uint256 i; i < signerPKs.length; i++) { + bytes32 digest = keccak256(abi.encodePacked("\x19\x01", _domainSeparator, receipt.hash())); + + sigs[i] = _sign(signerPKs[i], digest); + } + } + + function _sign(uint256 pk, bytes32 digest) internal pure returns (SignatureConsumer.Signature memory sig) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); + sig.v = v; + sig.r = r; + sig.s = s; + } +} diff --git a/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol index ec307524..d4d6dbd9 100644 --- a/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/accessControl.PauseEnforcer.t.sol @@ -8,6 +8,7 @@ contract AccessControl_PauseEnforcer_Test is BaseIntegration_Test { super.setUp(); } + // Access control > Should admin of pause enforcer can be change function test_changeAdmin_OfPauseEnforcer() public { address newEnforcerAdmin = makeAddr("new-enforcer-admin"); @@ -17,6 +18,7 @@ contract AccessControl_PauseEnforcer_Test is BaseIntegration_Test { assertEq(_roninPauseEnforcer.hasRole(0x0, newEnforcerAdmin), true); } + // Access control > Should previous admin of pause enforcer can be revoked function test_renounceAdminRole_PreviousAdmin() public { test_changeAdmin_OfPauseEnforcer(); diff --git a/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol b/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol index d161dc78..fec87e77 100644 --- a/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol +++ b/test/bridge/integration/pause-enforcer/emergencyAction.PauseEnforcer.t.sol @@ -12,7 +12,7 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { super.setUp(); } - // Should be able to emergency pause + // Emergency pause & emergency unpause > Should be able to emergency pause function test_EmergencyPause_RoninGatewayV3() public { vm.prank(_param.roninPauseEnforcer.sentries[0]); _roninPauseEnforcer.triggerPause(); @@ -21,7 +21,7 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { assertEq(_roninGatewayV3.paused(), true); } - // Should the gateway cannot interacted when on pause + // Emergency pause & emergency unpause > Should the gateway cannot interacted when on pause function test_RevertWhen_InteractWithGateway_AfterPause() public { test_EmergencyPause_RoninGatewayV3(); Transfer.Receipt memory receipt = Transfer.Receipt({ @@ -37,7 +37,7 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { _roninGatewayV3.depositFor(receipt); } - // Should not be able to emergency pause for a second time + // Emergency pause & emergency unpause > Should not be able to emergency pause for a second time function test_RevertWhen_PauseAgain() public { test_EmergencyPause_RoninGatewayV3(); @@ -47,7 +47,7 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { _roninPauseEnforcer.triggerPause(); } - // Should be able to emergency unpause + // Emergency pause & emergency unpause > Should be able to emergency unpause function test_EmergencyUnpause_RoninGatewayV3() public { test_EmergencyPause_RoninGatewayV3(); @@ -58,7 +58,7 @@ contract EmergencyAction_PauseEnforcer_Test is BaseIntegration_Test { assertEq(_roninGatewayV3.paused(), false); } - // Should the gateway can be interacted after unpause + // Emergency pause & emergency unpause > Should the gateway can be interacted after unpause function test_InteractWithGateway_AfterUnpause() public { test_EmergencyUnpause_RoninGatewayV3(); Transfer.Receipt memory receipt = Transfer.Receipt({ diff --git a/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol b/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol index 2f4d7192..c3ce75a1 100644 --- a/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol +++ b/test/bridge/integration/pause-enforcer/normalPause.GatewayV3.t.sol @@ -13,7 +13,7 @@ contract NormalPause_GatewayV3_Test is BaseIntegration_Test { super.setUp(); } - // Should gateway admin can pause the gateway through voting + // Normal pause & emergency unpause > Should gateway admin can pause the gateway through voting function test_GovernanceAdmin_PauseGateway_ThroughoutVoting() public { bytes memory calldata_ = abi.encodeCall(GatewayV3.pause, ()); _roninProposalUtils.functionDelegateCall(address(_roninGatewayV3), calldata_); @@ -22,7 +22,7 @@ contract NormalPause_GatewayV3_Test is BaseIntegration_Test { assertEq(_roninGatewayV3.paused(), true); } - // Should not be able to emergency unpause + // Normal pause & emergency unpause > Should not be able to emergency unpause function test_RevertWhen_EmergencyUnpause() public { test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); @@ -32,7 +32,7 @@ contract NormalPause_GatewayV3_Test is BaseIntegration_Test { _roninPauseEnforcer.triggerUnpause(); } - // Should not be able to override by emergency pause and emergency unpause + // Normal pause & emergency unpause > Should not be able to override by emergency pause and emergency unpause function test_RevertWhen_OverrideByEmergencyPauseOrUnPause() public { test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); @@ -47,7 +47,7 @@ contract NormalPause_GatewayV3_Test is BaseIntegration_Test { _roninPauseEnforcer.triggerUnpause(); } - // Should gateway admin can unpause the gateway through voting + // Normal pause & emergency unpause > Should gateway admin can unpause the gateway through voting function test_GovernanceAdmin_UnPauseGateway_ThroughoutVoting() public { test_GovernanceAdmin_PauseGateway_ThroughoutVoting(); From 9f37c75bbb64b19f9555b757d5f701c1289e6d68 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 4 Feb 2024 16:47:49 +0700 Subject: [PATCH 71/73] chore: storage layout --- logs/contract-code-sizes.log | 3 ++- logs/storage/ERC721.sol:ERC721.log | 6 ++++++ logs/storage/MockERC721.sol:MockERC721.log | 13 ++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 logs/storage/ERC721.sol:ERC721.log diff --git a/logs/contract-code-sizes.log b/logs/contract-code-sizes.log index d4d56b11..940034ef 100644 --- a/logs/contract-code-sizes.log +++ b/logs/contract-code-sizes.log @@ -13,6 +13,7 @@ | ERC1967Proxy | 0.177 | 24.399 | | ERC20 | 2.173 | 22.403 | | ERC20PresetMinterPauser | 6.368 | 18.208 | +| ERC721 | 4.363 | 20.213 | | EnumerableSet | 0.086 | 24.49 | | ErrorHandler | 0.086 | 24.49 | | GeneralConfig | 20.136 | 4.44 | @@ -39,7 +40,7 @@ | MockBridgeSlash | 1.388 | 23.188 | | MockBridgeTracking | 1.897 | 22.679 | | MockERC20 | 2.442 | 22.134 | -| MockERC721 | 3.827 | 20.749 | +| MockERC721 | 4.741 | 19.835 | | MockGatewayForTracking | 1.616 | 22.96 | | MockRoninBridgeManager | 24.601 | -0.025 | | MockRoninGatewayV3Extended | 20.048 | 4.528 | diff --git a/logs/storage/ERC721.sol:ERC721.log b/logs/storage/ERC721.sol:ERC721.log new file mode 100644 index 00000000..bda99eff --- /dev/null +++ b/logs/storage/ERC721.sol:ERC721.log @@ -0,0 +1,6 @@ +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_owners (storage_slot: 2) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_balances (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_tokenApprovals (storage_slot: 4) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol:ERC721:_operatorApprovals (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => bool))) (numberOfBytes: 32) \ No newline at end of file diff --git a/logs/storage/MockERC721.sol:MockERC721.log b/logs/storage/MockERC721.sol:MockERC721.log index b189dbef..2b9833e8 100644 --- a/logs/storage/MockERC721.sol:MockERC721.log +++ b/logs/storage/MockERC721.sol:MockERC721.log @@ -1,7 +1,6 @@ -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_ownerOf (storage_slot: 2) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:_balanceOf (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:getApproved (storage_slot: 4) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:isApprovedForAll (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => bool))) (numberOfBytes: 32) -lib/foundry-deployment-kit/lib/forge-std/src/mocks/MockERC721.sol:MockERC721:initialized (storage_slot: 6) (offset: 0) (type: bool) (numberOfBytes: 1) \ No newline at end of file +src/mocks/token/MockERC721.sol:MockERC721:_name (storage_slot: 0) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockERC721.sol:MockERC721:_symbol (storage_slot: 1) (offset: 0) (type: string) (numberOfBytes: 32) +src/mocks/token/MockERC721.sol:MockERC721:_owners (storage_slot: 2) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +src/mocks/token/MockERC721.sol:MockERC721:_balances (storage_slot: 3) (offset: 0) (type: mapping(address => uint256)) (numberOfBytes: 32) +src/mocks/token/MockERC721.sol:MockERC721:_tokenApprovals (storage_slot: 4) (offset: 0) (type: mapping(uint256 => address)) (numberOfBytes: 32) +src/mocks/token/MockERC721.sol:MockERC721:_operatorApprovals (storage_slot: 5) (offset: 0) (type: mapping(address => mapping(address => bool))) (numberOfBytes: 32) \ No newline at end of file From 50e83b3056b0ef545a144090a5c8eeb666136176 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Sun, 4 Feb 2024 23:09:35 +0700 Subject: [PATCH 72/73] test(MainchainGatewayV3): migrate deposit tests --- ...requestDepositFor.MainchainGatewayV3.t.sol | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol diff --git a/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol new file mode 100644 index 00000000..15864c3c --- /dev/null +++ b/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 as console } from "forge-std/console2.sol"; +import { Transfer as LibTransfer } from "@ronin/contracts/libraries/Transfer.sol"; +import { Token } from "@ronin/contracts/libraries/Token.sol"; + +import "../BaseIntegration.t.sol"; + +interface IERC721 { + event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); +} + +interface IERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); +} + +contract RequestDepositFor_MainchainGatewayV3_Test is BaseIntegration_Test { + event DepositRequested(bytes32 receiptHash, LibTransfer.Receipt receipt); + + using LibTransfer for LibTransfer.Request; + using LibTransfer for LibTransfer.Receipt; + + LibTransfer.Request _depositRequest; + + address _sender; + uint256 _quantity; + + function setUp() public virtual override { + super.setUp(); + + _sender = makeAddr("sender"); + _quantity = 10; + + _depositRequest.recipientAddr = makeAddr("recipient"); + _depositRequest.tokenAddr = address(0); + _depositRequest.info.erc = Token.Standard.ERC20; + _depositRequest.info.id = 0; + _depositRequest.info.quantity = _quantity; + + vm.deal(_sender, 10 ether); + } + + // test deposit > should be able to deposit eth + function test_depositNative() public { + _depositRequest.tokenAddr = address(0); + + LibTransfer.Request memory cachedRequest = _depositRequest; + cachedRequest.tokenAddr = address(_mainchainWeth); + + vm.expectEmit(address(_mainchainGatewayV3)); + LibTransfer.Receipt memory receipt = cachedRequest.into_deposit_receipt( + _sender, _mainchainGatewayV3.depositCount(), address(_roninWeth), block.chainid + ); + emit DepositRequested(receipt.hash(), receipt); + + vm.prank(_sender); + _mainchainGatewayV3.requestDepositFor{ value: _quantity }(_depositRequest); + + assertEq(address(_mainchainGatewayV3).balance, _quantity); + assertEq(_mainchainGatewayV3.depositCount(), 1); + } + + // test deposit > should be able to deposit ERC20 + function test_depositERC20() public { + _mainchainAxs.mint(_sender, _quantity); + vm.prank(_sender); + _mainchainAxs.approve(address(_mainchainGatewayV3), _quantity); + + _depositRequest.tokenAddr = address(_mainchainAxs); + + vm.expectEmit(address(_mainchainGatewayV3)); + LibTransfer.Receipt memory receipt = _depositRequest.into_deposit_receipt( + _sender, _mainchainGatewayV3.depositCount(), address(_roninAxs), block.chainid + ); + emit DepositRequested(receipt.hash(), receipt); + + vm.prank(_sender); + _mainchainGatewayV3.requestDepositFor(_depositRequest); + + assertEq(_mainchainAxs.balanceOf(address(_mainchainGatewayV3)), _quantity); + assertEq(_mainchainGatewayV3.depositCount(), 1); + } + + // test deposit > should be able to deposit weth and gateway receive eth + function test_depositWETH() public { + vm.startPrank(_sender); + _mainchainWeth.deposit{ value: _quantity }(); + _mainchainWeth.approve(address(_mainchainGatewayV3), _quantity); + vm.stopPrank(); + + _depositRequest.tokenAddr = address(_mainchainWeth); + + LibTransfer.Receipt memory receipt = _depositRequest.into_deposit_receipt( + _sender, _mainchainGatewayV3.depositCount(), address(_roninWeth), block.chainid + ); + vm.expectEmit(address(_mainchainGatewayV3)); + emit DepositRequested(receipt.hash(), receipt); + + assertEq(address(_mainchainWeth).balance, _quantity); + + vm.prank(_sender); + _mainchainGatewayV3.requestDepositFor(_depositRequest); + + assertEq(address(_mainchainGatewayV3).balance, _quantity); + assertEq(_mainchainGatewayV3.depositCount(), 1); + } + + // test deposit > should be able to deposit weth and gateway receive eth + function test_depositERC721() public { + uint256 tokenId = 22; + _mainchainMockERC721.mint(_sender, tokenId); + vm.prank(_sender); + _mainchainMockERC721.approve(address(_mainchainGatewayV3), tokenId); + + _depositRequest.tokenAddr = address(_mainchainMockERC721); + _depositRequest.info.erc = Token.Standard.ERC721; + _depositRequest.info.id = tokenId; + _depositRequest.info.quantity = 0; + + LibTransfer.Receipt memory receipt = _depositRequest.into_deposit_receipt( + _sender, _mainchainGatewayV3.depositCount(), address(_roninMockERC721), block.chainid + ); + vm.expectEmit(address(_mainchainGatewayV3)); + emit DepositRequested(receipt.hash(), receipt); + + assertEq(_mainchainMockERC721.ownerOf(tokenId), _sender); + + vm.prank(_sender); + _mainchainGatewayV3.requestDepositFor(_depositRequest); + + assertEq(_mainchainMockERC721.ownerOf(tokenId), address(_mainchainGatewayV3)); + assertEq(_mainchainGatewayV3.depositCount(), 1); + } +} From fd9292cb6cd8e41ad32061b94ae923009ac0d8f8 Mon Sep 17 00:00:00 2001 From: huyhuynh3103 Date: Mon, 5 Feb 2024 09:41:05 +0700 Subject: [PATCH 73/73] test(MainchainGateway): remove test unwrap and deposit WETH --- ...requestDepositFor.MainchainGatewayV3.t.sol | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol b/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol index 15864c3c..3245b550 100644 --- a/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol +++ b/test/bridge/integration/mainchain-gateway/requestDepositFor.MainchainGatewayV3.t.sol @@ -82,30 +82,6 @@ contract RequestDepositFor_MainchainGatewayV3_Test is BaseIntegration_Test { assertEq(_mainchainGatewayV3.depositCount(), 1); } - // test deposit > should be able to deposit weth and gateway receive eth - function test_depositWETH() public { - vm.startPrank(_sender); - _mainchainWeth.deposit{ value: _quantity }(); - _mainchainWeth.approve(address(_mainchainGatewayV3), _quantity); - vm.stopPrank(); - - _depositRequest.tokenAddr = address(_mainchainWeth); - - LibTransfer.Receipt memory receipt = _depositRequest.into_deposit_receipt( - _sender, _mainchainGatewayV3.depositCount(), address(_roninWeth), block.chainid - ); - vm.expectEmit(address(_mainchainGatewayV3)); - emit DepositRequested(receipt.hash(), receipt); - - assertEq(address(_mainchainWeth).balance, _quantity); - - vm.prank(_sender); - _mainchainGatewayV3.requestDepositFor(_depositRequest); - - assertEq(address(_mainchainGatewayV3).balance, _quantity); - assertEq(_mainchainGatewayV3.depositCount(), 1); - } - // test deposit > should be able to deposit weth and gateway receive eth function test_depositERC721() public { uint256 tokenId = 22;