Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

deploy(REP4): v0.7.0 testnet #303

Merged
merged 131 commits into from
Nov 27, 2023
Merged
Show file tree
Hide file tree
Changes from 127 commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
6a3c8b8
restructure
nxqbao May 25, 2023
1924b70
add profile contract
nxqbao May 25, 2023
fb546f1
add storage log
nxqbao May 25, 2023
18ead5d
fix staking test
nxqbao May 25, 2023
2debf1a
fix fixture
nxqbao May 25, 2023
b798920
Revert "fix fixture"
nxqbao May 29, 2023
bae94dd
fix hardhat deploy path
nxqbao May 29, 2023
b857c57
fix deploy script
nxqbao May 29, 2023
5c29690
rollback initializerV1
nxqbao May 29, 2023
a149649
restructure profile contract
nxqbao May 29, 2023
b3a654c
fix fixture
nxqbao May 29, 2023
7d0782f
fix dependent test
nxqbao May 29, 2023
b36bc50
fix dependent test
nxqbao May 29, 2023
36173a0
fix: profile execApply
nxqbao May 29, 2023
6e53384
fix hardhat deploy src path
nxqbao May 29, 2023
383a203
rollback NON_VALIDATOR slash type
nxqbao May 29, 2023
56ba919
follow new code convention
nxqbao Jun 7, 2023
c77b82e
feat: support change admin address
nxqbao Jun 7, 2023
9cbfaaa
fix: inheritance graph
nxqbao Jun 8, 2023
7d19da3
fix: fix test setup
nxqbao Jun 8, 2023
387748e
add dev comment
nxqbao Jun 9, 2023
b1a3c99
fix rebase issue
nxqbao Jun 13, 2023
16ae502
rename for convention
nxqbao Jun 13, 2023
622cbbe
add enum for custom error
nxqbao Jun 13, 2023
99fdaca
udvt TPoolId
nxqbao Jun 13, 2023
7b424ac
Revert "udvt TPoolId"
nxqbao Jun 13, 2023
df55f31
distinguish poolId vs consensus
nxqbao Jun 14, 2023
c5eb936
declare TPoolId type
nxqbao Jun 14, 2023
359c86c
remove mockup contract
nxqbao Jun 15, 2023
46e5a49
remove bridge operator change method
nxqbao Jun 15, 2023
6bdb1ce
rename interface param
nxqbao Jun 15, 2023
9a9530c
remove comment
nxqbao Jun 15, 2023
daed9f9
refactor
nxqbao Jun 15, 2023
7fd337b
revert casting in coinbase
nxqbao Jun 15, 2023
a763dd7
Remove TPoolId. Using TConsensus.
nxqbao Jun 16, 2023
ca2bae8
fix test
nxqbao Jun 16, 2023
be65d5c
remove public vars
nxqbao Jun 16, 2023
034516b
remove more public vars
nxqbao Jun 16, 2023
7fc8fb1
remove redundant code
nxqbao Jun 16, 2023
a309710
wrap all external method to TConsensus type
nxqbao Jun 18, 2023
48e35fb
fix config
nxqbao Jun 19, 2023
0382510
fix test init
nxqbao Jun 19, 2023
4086926
fix mock
nxqbao Jun 19, 2023
e8e6612
fix test
nxqbao Jun 20, 2023
648c40c
fix test
nxqbao Jun 20, 2023
dcad9f1
add comment
nxqbao Jun 20, 2023
75eef9c
fix helper
nxqbao Jun 21, 2023
5d118fe
restructure
nxqbao Jun 21, 2023
23eb77c
fix edge case
nxqbao Jun 21, 2023
e2496e7
fix conventions
nxqbao Jun 21, 2023
253c89b
add docs
nxqbao Jun 22, 2023
470e02e
fix: foundry config
nxqbao Jun 22, 2023
87d9b20
chore: fix conventions
nxqbao Jun 22, 2023
17bc08b
Merge branch 'dev' into feat/profile
nxqbao Jul 20, 2023
b46f849
fix: remove bridge voter
nxqbao Jul 20, 2023
6efa842
fix: change inheritance tree
nxqbao Jul 20, 2023
d40095a
Merge branch 'feat/fast-finality' into feat/profile
nxqbao Jul 21, 2023
d2e2bba
fix: fix test setup
nxqbao Jul 21, 2023
06b1036
Merge branch 'feat/bridge-admin-rebase' into feat/profile
nxqbao Jul 21, 2023
cd91cdf
fix test after merging
nxqbao Jul 21, 2023
dfb0913
chore: add TODO tag
nxqbao Jul 24, 2023
69bad65
tmp disable forge test
nxqbao Jul 24, 2023
e6c0ea1
Merge branch 'testnet' into feat/profile
nxqbao Sep 13, 2023
18e4704
fix fixture
nxqbao Sep 13, 2023
7a0799f
Merge branch 'testnet' into feat/profile
nxqbao Sep 13, 2023
68581db
update ci
nxqbao Sep 13, 2023
207ed04
Continue merge branch 'testnet' into feat/profile
nxqbao Sep 13, 2023
022ccd1
fix test setup
nxqbao Sep 13, 2023
69e2555
fix more test setup
nxqbao Sep 13, 2023
134c40a
fix test
nxqbao Sep 15, 2023
8502f66
fix test & improve conf test
nxqbao Sep 15, 2023
7ef092e
refactor initializer
nxqbao Sep 15, 2023
8bd8f49
apply initializer for test suites
nxqbao Sep 15, 2023
cf1b5cb
fix fast finality test
nxqbao Sep 15, 2023
a49cb6c
fix initializers
nxqbao Sep 15, 2023
84bfe67
Merge branch 'testnet' into feat/profile
nxqbao Sep 25, 2023
83c1646
Merge branch 'release/v0.7.0' into feat/profile
nxqbao Oct 31, 2023
9deed7d
chore: resolve conflict
nxqbao Oct 31, 2023
983b747
feat(Profile): remove unused method, fix execApplyCandidate
nxqbao Oct 31, 2023
5e7aa25
feat(Profile, Staking): require pubkey at apply candidate, fix init test
nxqbao Oct 31, 2023
87e582e
test(Profile): fix other dependent tests
nxqbao Oct 31, 2023
a4699ef
chore: fix test
nxqbao Nov 1, 2023
ef2be4c
feat(ValidatorSet): recover slot shifted
nxqbao Nov 1, 2023
584236c
fix(Profile): cherry-pick fix from 'test/feat/profile'
nxqbao Nov 2, 2023
c95a4a3
fix(SlashFastFinality): fix wrapper for consensus
nxqbao Nov 2, 2023
7c92992
chore: resolve low-level call warning
nxqbao Nov 2, 2023
f60e927
temp(*): rename to cid, pid, _shadowed**
nxqbao Nov 2, 2023
d7793fb
feat(ValidatorSet): cached admin
nxqbao Nov 2, 2023
2682fa2
feat(Profile, ValidatorSet): handle execChangeAdminAddress
nxqbao Nov 2, 2023
285d700
feat(Staking): rename admin to `__shadowPoolAdmin`
nxqbao Nov 2, 2023
1b9a39e
feat(Profile): handle change treasury, fix missing rename
nxqbao Nov 2, 2023
cd99aa7
chore(Validator): rename to *ById suffix
nxqbao Nov 3, 2023
f5ac24b
chore: rename `_convert*C2P`
nxqbao Nov 3, 2023
7445b93
chore(Validator): remove old version contract
nxqbao Nov 3, 2023
1cf578c
chore(docs): write natspecs doc for struct
nxqbao Nov 3, 2023
f4603e6
chore(*): remove `_` for consistent var names
nxqbao Nov 3, 2023
79e50f1
chore(docs): NatSpecs for __css2cid
nxqbao Nov 3, 2023
639c372
chore: remove compiler warning
nxqbao Nov 3, 2023
c2aa6db
feat(TrustedOrg): handle change consensus for Trusted Org
nxqbao Nov 3, 2023
38bcac4
feat(SlashIndicator): remove code related to bridge
nxqbao Nov 3, 2023
1bdedd9
chore: clean up PR, remove unrelated files
nxqbao Nov 3, 2023
f4d3017
fix(Staking): fix inaccurate shifted gap
nxqbao Nov 3, 2023
a056da1
chore(ValidatorSet): consist interface
nxqbao Nov 3, 2023
359ddb8
chore(ValidatorSet, Staking): move callbacks to separate files
nxqbao Nov 3, 2023
564c31e
chore(ValidatorSet): refactor callbacks
nxqbao Nov 3, 2023
69248be
chore: remove log
nxqbao Nov 3, 2023
4e6a0ce
fix(TrustedOrg): remove onlyAdmin in initV2, fix test
nxqbao Nov 6, 2023
3235fa1
test: fix test after restrict not allowing rejoin in Profile
nxqbao Nov 6, 2023
59dee15
test: fix more test
nxqbao Nov 6, 2023
1fb67e5
feat(RoninTO): fix bug when change consensus in RoninTO
nxqbao Nov 6, 2023
9ae8a44
chore: fix rebase issue
nxqbao Nov 6, 2023
9e9a879
fix(RoninTO): delete deprecated storage
nxqbao Nov 7, 2023
240605f
chore: rename consensus to cid
nxqbao Nov 7, 2023
b6ab17b
fix(GovernanceAdmin): fix emergency exit typehash
nxqbao Nov 7, 2023
140dfdb
test(*): fix deprecated voter for test setup
nxqbao Nov 7, 2023
fca0888
feat(RoninTO): return address(0) for bridge voter
nxqbao Nov 7, 2023
5772afb
chore: fix typo
nxqbao Nov 7, 2023
a4c56c5
chore: fix deprecatedVoter in test
nxqbao Nov 7, 2023
c057690
feat(RoninTO): rename for consistency
nxqbao Nov 7, 2023
dd0fd85
feat(Validator): better handling emergency exit revert
nxqbao Nov 7, 2023
43eda58
feat(EmergencyExit): revert to original typehash
nxqbao Nov 8, 2023
61e439d
fix(Profile); rename check to require
nxqbao Nov 8, 2023
88d9239
feat: migrate registry for renounced candidates
nxqbao Nov 9, 2023
1a9650b
feat(Profile): fix migration
nxqbao Nov 9, 2023
96656ae
add script
nxqbao Nov 9, 2023
466c08a
fix: fix initialV2 script of Profile
nxqbao Nov 9, 2023
b9c58e6
fix: gasAmount of init Profile
nxqbao Nov 9, 2023
f5a57c2
fix: pass proxy to initialize
nxqbao Nov 9, 2023
83215e6
deploy: add artifacts
nxqbao Nov 9, 2023
0ca2b5e
chore: fix command
nxqbao Nov 9, 2023
ecab4d8
Merge branch 'release/v0.7.0' into deploy/v0.7.0-testnet
nxqbao Nov 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/unittest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
- "release/**"
pull_request:
branches:
- main
- mainnet
- testnet
- "release/**"

Expand Down
34 changes: 17 additions & 17 deletions contracts/extensions/forwarder/Forwarder.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,20 @@ contract Forwarder is AccessControlEnumerable {
/**
* @dev Initializes the forwarder with an initial target address and a contract admin.
*/
constructor(address[] memory _targets, address _admin, address _moderator) payable {
for (uint _i = 0; _i < _targets.length; ) {
_setupRole(TARGET_ROLE, _targets[_i]);
constructor(address[] memory targets, address admin, address moderator) payable {
for (uint i = 0; i < targets.length; ) {
_setupRole(TARGET_ROLE, targets[i]);

unchecked {
++_i;
++i;
}
}
_setupRole(DEFAULT_ADMIN_ROLE, _admin);
_setupRole(MODERATOR_ROLE, _moderator);
_setupRole(DEFAULT_ADMIN_ROLE, admin);
_setupRole(MODERATOR_ROLE, moderator);
}

modifier validTarget(address _target) {
_checkRole(TARGET_ROLE, _target);
modifier validTarget(address target) {
_checkRole(TARGET_ROLE, target);
_;
}

Expand All @@ -61,21 +61,21 @@ contract Forwarder is AccessControlEnumerable {
* - Only user with {MODERATOR_ROLE} can call this method.
*/
function functionCall(
address _target,
bytes memory _data,
uint256 _val
) external payable validTarget(_target) onlyRole(MODERATOR_ROLE) {
if (_val > address(this).balance) revert ErrInvalidForwardValue();
_call(_target, _data, _val);
address target,
bytes memory data,
uint256 val
) external payable validTarget(target) onlyRole(MODERATOR_ROLE) {
if (val > address(this).balance) revert ErrInvalidForwardValue();
_call(target, data, val);
}

/**
* @dev Forwards the current call to `target`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _call(address _target, bytes memory _data, uint256 _value) internal {
(bool _success, bytes memory _res) = _target.call{ value: _value }(_data);
_success.handleRevert(bytes4(_data), _res);
function _call(address target, bytes memory data, uint256 value) internal {
(bool success, bytes memory res) = target.call{ value: value }(data);
success.handleRevert(bytes4(data), res);
}
}
90 changes: 58 additions & 32 deletions contracts/interfaces/IMaintenance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

pragma solidity ^0.8.9;

import { TConsensus } from "../udvts/Types.sol";

interface IMaintenance {
/**
* @dev Error thrown when attempting to schedule an already scheduled event.
Expand Down Expand Up @@ -61,9 +63,9 @@ interface IMaintenance {
}

/// @dev Emitted when a maintenance is scheduled.
event MaintenanceScheduled(address indexed consensusAddr, Schedule);
event MaintenanceScheduled(TConsensus indexed consensusAddr, Schedule);
/// @dev Emitted when a schedule of maintenance is cancelled.
event MaintenanceScheduleCancelled(address indexed consensusAddr);
event MaintenanceScheduleCancelled(TConsensus indexed consensusAddr);
/// @dev Emitted when the maintenance config is updated.
event MaintenanceConfigUpdated(
uint256 minMaintenanceDurationInBlock,
Expand All @@ -75,52 +77,76 @@ interface IMaintenance {
);

/**
* @dev Returns whether the validator `_consensusAddr` maintained at the block number `_block`.
* @dev Returns whether the validator `consensusAddr` maintained at the block number `_block`.
*/
function checkMaintained(TConsensus consensusAddr, uint256 _block) external view returns (bool);

/**
* @dev Returns whether the validator whose id `validatorId` maintained at the block number `_block`.
*/
function checkMaintained(address _consensusAddr, uint256 _block) external view returns (bool);
function checkMaintainedById(address validatorId, uint256 _block) external view returns (bool);

/**
* @dev Returns whether the validator `_consensusAddr` maintained in the inclusive range [`_fromBlock`, `_toBlock`] of blocks.
* @dev Returns whether the validator `consensusAddr` maintained in the inclusive range [`_fromBlock`, `_toBlock`] of blocks.
*/
function checkMaintainedInBlockRange(
address _consensusAddr,
TConsensus consensusAddr,
uint256 _fromBlock,
uint256 _toBlock
) external view returns (bool);

/**
* @dev Returns the bool array indicating the validators maintained at block number `_block` or not.
* @dev Returns the bool array indicating the validators maintained at block number `k` or not.
*/
function checkManyMaintained(address[] calldata _addrList, uint256 _block) external view returns (bool[] memory);
function checkManyMaintained(
TConsensus[] calldata consensusAddrList,
uint256 atBlock
) external view returns (bool[] memory);

function checkManyMaintainedById(
address[] calldata candidateIdList,
uint256 atBlock
) external view returns (bool[] memory);

/**
* @dev Returns a bool array indicating the validators maintained in the inclusive range [`_fromBlock`, `_toBlock`] of blocks or not.
*/
function checkManyMaintainedInBlockRange(
address[] calldata _addrList,
TConsensus[] calldata _consensusAddrList,
uint256 _fromBlock,
uint256 _toBlock
) external view returns (bool[] memory);

function checkManyMaintainedInBlockRangeById(
address[] calldata idList,
uint256 fromBlock,
uint256 toBlock
) external view returns (bool[] memory);

/**
* @dev Returns whether the validator `_consensusAddr` has scheduled.
* @dev Returns whether the validator `consensusAddr` has finished cooldown.
*/
function checkScheduled(address _consensusAddr) external view returns (bool);
function checkCooldownEnded(TConsensus consensusAddr) external view returns (bool);

/**
* @dev Returns whether the validator `_consensusAddr`
* @dev Returns whether the validator `consensusAddr` has schedule.
*/
function checkCooldownEnded(address _consensusAddr) external view returns (bool);
function checkScheduled(TConsensus consensusAddr) external view returns (bool);

/**
* @dev Returns the detailed schedule of the validator `_consensusAddr`.
* @dev Returns the detailed schedule of the validator `consensusAddr`.
*/
function getSchedule(address _consensusAddr) external view returns (Schedule memory);
function getSchedule(TConsensus consensusAddr) external view returns (Schedule memory);

/**
* @dev Returns the total of current schedules.
*/
function totalSchedule() external view returns (uint256 _count);
function totalSchedule() external view returns (uint256 count);

/**
* @dev Returns the cooldown to maintain in seconds.
*/
function cooldownSecsToMaintain() external view returns (uint256);

/**
* @dev Sets the duration restriction, start time restriction, and max allowed for maintenance.
Expand All @@ -134,12 +160,12 @@ interface IMaintenance {
*
*/
function setMaintenanceConfig(
uint256 _minMaintenanceDurationInBlock,
uint256 _maxMaintenanceDurationInBlock,
uint256 _minOffsetToStartSchedule,
uint256 _maxOffsetToStartSchedule,
uint256 _maxSchedules,
uint256 _cooldownSecsToMaintain
uint256 minMaintenanceDurationInBlock_,
uint256 maxMaintenanceDurationInBlock_,
uint256 minOffsetToStartSchedule_,
uint256 maxOffsetToStartSchedule_,
uint256 maxSchedules_,
uint256 cooldownSecsToMaintain_
) external;

/**
Expand Down Expand Up @@ -168,12 +194,12 @@ interface IMaintenance {
function maxSchedule() external view returns (uint256);

/**
* @dev Schedules for maintenance from `_startedAtBlock` to `_startedAtBlock`.
* @dev Schedules for maintenance from `startedAtBlock` to `endedAtBlock`.
*
* Requirements:
* - The candidate `_consensusAddr` is the block producer.
* - The method caller is candidate admin of the candidate `_consensusAddr`.
* - The candidate `_consensusAddr` has no schedule yet or the previous is done.
* - The candidate `consensusAddr` is the block producer.
* - The method caller is candidate admin of the candidate `consensusAddr`.
* - The candidate `consensusAddr` has no schedule yet or the previous is done.
* - The total number of schedules is not larger than `maxSchedules()`.
* - The start block must be at least `minOffsetToStartSchedule()` and at most `maxOffsetToStartSchedule()` blocks from the current block.
* - The end block is larger than the start block.
Expand All @@ -184,17 +210,17 @@ interface IMaintenance {
* Emits the event `MaintenanceScheduled`.
*
*/
function schedule(address _consensusAddr, uint256 _startedAtBlock, uint256 _endedAtBlock) external;
function schedule(TConsensus consensusAddr, uint256 startedAtBlock, uint256 endedAtBlock) external;

/**
* @dev Cancel the schedule of maintenance for the `_consensusAddr`.
* @dev Cancel the schedule of maintenance for the `consensusAddr`.
*
* Requirements:
* - The candidate `_consensusAddr` is the block producer.
* - The method caller is candidate admin of the candidate `_consensusAddr`.
* - A schedule for the `_consensusAddr` must be existent and not executed yet.
* - The candidate `consensusAddr` is the block producer.
* - The method caller is candidate admin of the candidate `consensusAddr`.
* - A schedule for the `consensusAddr` must be existent and not executed yet.
*
* Emits the event `MaintenanceScheduleCancelled`.
*/
function cancelSchedule(address _consensusAddr) external;
function cancelSchedule(TConsensus consensusAddr) external;
}
44 changes: 37 additions & 7 deletions contracts/interfaces/IProfile.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

pragma solidity ^0.8.9;

import { TPoolId, TConsensus } from "../udvts/Types.sol";
import "../utils/RoleAccess.sol";

interface IProfile {
Expand All @@ -15,13 +16,13 @@ interface IProfile {
*/
address id;
/// @dev Consensus address.
address consensus;
TConsensus consensus;
/// @dev Pool admin address.
address admin;
/// @dev Treasury address.
address payable treasury;
/// @dev Address to voting proposal.
address governor;
address __reservedGovernor;
/// @dev Public key for fast finality.
bytes pubkey;
}
Expand Down Expand Up @@ -51,6 +52,15 @@ interface IProfile {
/// @dev Getter to query full `profile` from `id` address.
function getId2Profile(address id) external view returns (CandidateProfile memory profile);

/// @dev Getter to batch query from `id` to `consensus`, return address(0) if the profile not exist.
function getManyId2Consensus(address[] calldata idList) external view returns (TConsensus[] memory consensusList);

/// @dev Getter to backward query from `consensus` address to `id` address.
function getConsensus2Id(TConsensus consensus) external view returns (address id);

/// @dev Getter to backward batch query from `consensus` address to `id` address.
function getManyConsensus2Id(TConsensus[] memory consensus) external view returns (address[] memory);

/**
* @notice Add a new profile.
*
Expand All @@ -61,14 +71,34 @@ interface IProfile {
function addNewProfile(CandidateProfile memory profile) external;

/**
* @notice The candidate admin registers a new profile.
* @dev Cross-contract function to add/update new profile of a validator candidate when they
* applying for candidate role.
*
* @dev Requirements:
* - The profile must not be existent before.
* - Only user with candidate admin role can call this method.
* Requirements:
* - Only `stakingContract` can call this method.
*/
function execApplyValidatorCandidate(address admin, address id, address treasury, bytes calldata pubkey) external;

function registerProfile(CandidateProfile memory profile) external;
/**
* @dev Updated the treasury address of candidate id `id` immediately without waiting time.
*
* Emit an {ProfileAddressChanged}.
*/
function requestChangeAdminAddress(address id, address newAdminAddr) external;

/**
* @dev Updated the treasury address of candidate id `id` immediately without waiting time.
*
* Emit an {ProfileAddressChanged}.
*/
function requestChangeConsensusAddr(address id, TConsensus newConsensusAddr) external;

/**
* @dev Updated the treasury address of candidate id `id` immediately without waiting time.
*
* Emit an {ProfileAddressChanged}.
*/
function requestChangeTreasuryAddr(address id, address payable newTreasury) external;

/**
* @notice The candidate admin changes the public key.
Expand Down
24 changes: 12 additions & 12 deletions contracts/interfaces/IRoninGovernanceAdmin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ import "../utils/CommonErrors.sol";
interface IRoninGovernanceAdmin {
/// @dev Emitted when an emergency exit poll is created.
event EmergencyExitPollCreated(
bytes32 _voteHash,
address _consensusAddr,
address _recipientAfterUnlockedFund,
uint256 _requestedAt,
uint256 _expiredAt
bytes32 voteHash,
address validatorId,
address recipientAfterUnlockedFund,
uint256 requestedAt,
uint256 expiredAt
);
/// @dev Emitted when an emergency exit poll is approved.
event EmergencyExitPollApproved(bytes32 _voteHash);
event EmergencyExitPollApproved(bytes32 voteHash);
/// @dev Emitted when an emergency exit poll is expired.
event EmergencyExitPollExpired(bytes32 _voteHash);
event EmergencyExitPollExpired(bytes32 voteHash);
/// @dev Emitted when an emergency exit poll is voted.
event EmergencyExitPollVoted(bytes32 indexed _voteHash, address indexed _voter);
event EmergencyExitPollVoted(bytes32 indexed voteHash, address indexed voter);

/**
* @dev Create a vote to agree that an emergency exit is valid and should return the locked funds back.a
Expand All @@ -27,9 +27,9 @@ interface IRoninGovernanceAdmin {
*
*/
function createEmergencyExitPoll(
address _consensusAddr,
address _recipientAfterUnlockedFund,
uint256 _requestedAt,
uint256 _expiredAt
address validatorId,
address recipientAfterUnlockedFund,
uint256 requestedAt,
uint256 expiredAt
) external;
}
Loading