Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

feat: clean deprecated code #593

Open
wants to merge 52 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
34a4be6
feat: clean deprecated code
cosinlink Aug 27, 2024
73ca43d
feat: clean deprecated code more
cosinlink Aug 27, 2024
e600faa
feat: recover init functions
cosinlink Aug 27, 2024
5cf936a
feat: remove unused code
cosinlink Aug 28, 2024
c6a2f85
feat: remove unused code in stakehub
cosinlink Aug 28, 2024
26663b0
feat: update genesis.json
cosinlink Aug 29, 2024
798904d
feat: remove unused code and add comments
cosinlink Aug 30, 2024
c98ae1d
feat: remove unused code
cosinlink Aug 30, 2024
73d3e7e
feat: remove unused code
cosinlink Aug 30, 2024
c96aec0
feat: add comments
cosinlink Aug 30, 2024
13ea43f
feat: update genesis.json
cosinlink Aug 30, 2024
c1592fb
fix: fix test after code clean up
cosinlink Aug 30, 2024
579bd70
feat: remove unused code
cosinlink Aug 30, 2024
bbc5f23
feat: remove unused code and imports
cosinlink Sep 2, 2024
0e96ece
feat: remove _legacyConsensusAddress and _legacyVoteAddress check
cosinlink Sep 3, 2024
7ed2991
fix: removed deprecated comment
cosinlink Sep 3, 2024
d1a8a56
fix: move events
cosinlink Sep 3, 2024
4db83b8
fix: move events
cosinlink Sep 3, 2024
246a073
feat: deprecate withdrawUnlockToken in TokenHub.sol
cosinlink Sep 3, 2024
23ab1e2
feat: remove unused constants
cosinlink Sep 3, 2024
7f893f5
feat: remove unused code
cosinlink Sep 3, 2024
543f311
feat: remove flattened folder
cosinlink Sep 3, 2024
71bfbc0
fix: fix genesis bytecode generate script and sync genesis.json
cosinlink Sep 3, 2024
f4b5ab3
fix: remove unused code
cosinlink Sep 3, 2024
798651e
feat: sync genesis.json
cosinlink Sep 3, 2024
48e79b2
feat: remove unused tests
cosinlink Sep 4, 2024
7709ada
feat: remove lint ci check
cosinlink Sep 4, 2024
cfd697a
feat: clean unused code in generate.py
pythonberg1997 Sep 5, 2024
0b0e394
feat: lint code and recover ci lint check
cosinlink Sep 5, 2024
348fe40
fix: modify vote slash code to avoid reentry
cosinlink Sep 5, 2024
7d172f2
Revert "fix: modify vote slash code to avoid reentry"
cosinlink Sep 5, 2024
08f7a1f
fix: recover claimMigrationFund in TokenHub
cosinlink Sep 6, 2024
3ad33b1
feat: sync genesis.json
cosinlink Sep 6, 2024
e0346f7
feat: add testnet genesis file
cosinlink Sep 8, 2024
e882dad
feat: add ci check bsc repo bytecode
cosinlink Sep 8, 2024
3cfa57b
chores: modify ci check
cosinlink Sep 8, 2024
64c8f7d
chores: modify ci check
cosinlink Sep 8, 2024
b4591cd
chores: test ci script
cosinlink Sep 8, 2024
8905cf1
chores: test ci script
cosinlink Sep 8, 2024
7e1fa4f
chores: test ci script
cosinlink Sep 8, 2024
0c5637a
chores: test ci script
cosinlink Sep 8, 2024
6cc7f2f
chores: test ci script
cosinlink Sep 8, 2024
5f57952
chores: test ci script
cosinlink Sep 8, 2024
10c1695
chores: test ci script
cosinlink Sep 8, 2024
d8e351f
chores: test ci script
cosinlink Sep 8, 2024
39255e8
chores: test ci script
cosinlink Sep 8, 2024
399bab6
chores: test ci script
cosinlink Sep 8, 2024
031dab5
chores: test ci script
cosinlink Sep 8, 2024
5d82720
chores: test ci script
cosinlink Sep 8, 2024
9132efb
feat: finish ci to check bsc hardfork bytecodes
cosinlink Sep 8, 2024
dd04573
fix: fix check bsc bytecode script
cosinlink Sep 8, 2024
9383bd9
feat: update dev genesis generate command
cosinlink Sep 9, 2024
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
250 changes: 6 additions & 244 deletions contracts/BSCValidatorSet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica
bool public isSystemRewardIncluded;

// BEP-294 BC-fusion
Validator[] private _tmpMigratedValidatorSet;
bytes[] private _tmpMigratedVoteAddrs;
Validator[] private _tmpMigratedValidatorSet; // @dev deprecated
unclezoro marked this conversation as resolved.
Show resolved Hide resolved
bytes[] private _tmpMigratedVoteAddrs; // @dev deprecated

// BEP-341 Validators can produce consecutive blocks
uint256 public turnLength; // Consecutive number of blocks a validator receives priority for block production
Expand Down Expand Up @@ -195,49 +195,15 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica
uint8,
bytes calldata msgBytes
) external override onlyInit onlyCrossChainContract initValidatorExtraSet returns (bytes memory responsePayload) {
(IbcValidatorSetPackage memory validatorSetPackage, bool ok) = decodeValidatorSetSynPackage(msgBytes);
if (!ok) {
return CmnPkg.encodeCommonAckPackage(ERROR_FAIL_DECODE);
}
uint32 resCode;
if (validatorSetPackage.packageType == VALIDATORS_UPDATE_MESSAGE_TYPE) {
resCode = updateValidatorSet(validatorSetPackage.validatorSet, validatorSetPackage.voteAddrs);
} else if (validatorSetPackage.packageType == JAIL_MESSAGE_TYPE) {
if (validatorSetPackage.validatorSet.length != 1) {
emit failReasonWithStr("length of jail validators must be one");
resCode = ERROR_LEN_OF_VAL_MISMATCH;
} else {
address validator = validatorSetPackage.validatorSet[0].consensusAddress;
uint256 index = currentValidatorSetMap[validator];
if (index == 0 || currentValidatorSet[index - 1].jailed) {
emit validatorEmptyJailed(validator);
} else {
// felony will failed if the validator is the only one in the validator set
bool success = _felony(validator, index - 1);
if (!success) {
emit validatorEmptyJailed(validator);
}
}
resCode = CODE_OK;
}
} else {
resCode = ERROR_UNKNOWN_PACKAGE_TYPE;
}
if (resCode == CODE_OK) {
return new bytes(0);
} else {
return CmnPkg.encodeCommonAckPackage(resCode);
}
revert("deprecated");
unclezoro marked this conversation as resolved.
Show resolved Hide resolved
}

function handleAckPackage(uint8 channelId, bytes calldata msgBytes) external override onlyCrossChainContract {
// should not happen
emit unexpectedPackage(channelId, msgBytes);
revert("deprecated");
}

function handleFailAckPackage(uint8 channelId, bytes calldata msgBytes) external override onlyCrossChainContract {
unclezoro marked this conversation as resolved.
Show resolved Hide resolved
// should not happen
emit unexpectedPackage(channelId, msgBytes);
revert("deprecated");
}

/*----------------- External Functions -----------------*/
Expand All @@ -262,35 +228,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica
});
}

// if staking channel is not closed, store the migrated validator set and return
if (
ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).registeredContractChannelMap(
VALIDATOR_CONTRACT_ADDR, STAKING_CHANNELID
)
) {
uint256 newLength = _validatorSet.length;
uint256 oldLength = _tmpMigratedValidatorSet.length;
if (oldLength > newLength) {
for (uint256 i = newLength; i < oldLength; ++i) {
_tmpMigratedValidatorSet.pop();
_tmpMigratedVoteAddrs.pop();
}
}

for (uint256 i; i < newLength; ++i) {
if (i >= oldLength) {
_tmpMigratedValidatorSet.push(_validatorSet[i]);
_tmpMigratedVoteAddrs.push(_voteAddrs[i]);
} else {
_tmpMigratedValidatorSet[i] = _validatorSet[i];
_tmpMigratedVoteAddrs[i] = _voteAddrs[i];
}
}

emit tmpValidatorSetUpdated(newLength);
return;
}

// step 0: force all maintaining validators to exit `Temporary Maintenance`
// - 1. validators exit maintenance
unclezoro marked this conversation as resolved.
Show resolved Hide resolved
// - 2. clear all maintainInfo
Expand Down Expand Up @@ -781,177 +718,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica
}

/*----------------- Internal Functions -----------------*/
function updateValidatorSet(Validator[] memory validatorSet, bytes[] memory voteAddrs) internal returns (uint32) {
{
// do verify.
if (validatorSet.length > MAX_NUM_OF_VALIDATORS) {
emit failReasonWithStr("the number of validators exceed the limit");
return ERROR_FAIL_CHECK_VALIDATORS;
}
for (uint256 i; i < validatorSet.length; ++i) {
for (uint256 j; j < i; ++j) {
if (validatorSet[i].consensusAddress == validatorSet[j].consensusAddress) {
emit failReasonWithStr("duplicate consensus address of validatorSet");
return ERROR_FAIL_CHECK_VALIDATORS;
}
}
}
}

// step 0: force all maintaining validators to exit `Temporary Maintenance`
// - 1. validators exit maintenance
// - 2. clear all maintainInfo
// - 3. get unjailed validators from validatorSet
Validator[] memory validatorSetTemp;
bytes[] memory voteAddrsTemp;
{
// get migrated validators
Validator[] memory bscValidatorSet = _tmpMigratedValidatorSet;
bytes[] memory bscVoteAddrs = _tmpMigratedVoteAddrs;
for (uint256 i; i < bscValidatorSet.length; ++i) {
bscValidatorSet[i].votingPower = bscValidatorSet[i].votingPower * 3; // amplify the voting power for BSC validators
}
(Validator[] memory mergedValidators, bytes[] memory mergedVoteAddrs) =
_mergeValidatorSet(validatorSet, voteAddrs, bscValidatorSet, bscVoteAddrs);

(validatorSetTemp, voteAddrsTemp) = _forceMaintainingValidatorsExit(mergedValidators, mergedVoteAddrs);
}

{
//step 1: do calculate distribution, do not make it as an internal function for saving gas.
uint256 crossSize;
uint256 directSize;
uint256 validatorsNum = currentValidatorSet.length;
uint8[] memory isMigrated = new uint8[](validatorsNum);
for (uint256 i; i < validatorsNum; ++i) {
if (
IStakeHub(STAKE_HUB_ADDR).consensusToOperator(currentValidatorSet[i].consensusAddress) != address(0)
) {
isMigrated[i] = 1;
if (currentValidatorSet[i].incoming != 0) {
++directSize;
}
} else if (currentValidatorSet[i].incoming >= DUSTY_INCOMING) {
++crossSize;
} else if (currentValidatorSet[i].incoming != 0) {
++directSize;
}
}

//cross transfer
address[] memory crossAddrs = new address[](crossSize);
uint256[] memory crossAmounts = new uint256[](crossSize);
uint256[] memory crossIndexes = new uint256[](crossSize);
address[] memory crossRefundAddrs = new address[](crossSize);
uint256 crossTotal;
// direct transfer
address payable[] memory directAddrs = new address payable[](directSize);
uint256[] memory directAmounts = new uint256[](directSize);
crossSize = 0;
directSize = 0;
uint256 relayFee = ITokenHub(TOKEN_HUB_ADDR).getMiniRelayFee();
if (relayFee > DUSTY_INCOMING) {
emit failReasonWithStr("fee is larger than DUSTY_INCOMING");
return ERROR_RELAYFEE_TOO_LARGE;
}
for (uint256 i; i < validatorsNum; ++i) {
if (isMigrated[i] == 1) {
if (currentValidatorSet[i].incoming != 0) {
directAddrs[directSize] = payable(currentValidatorSet[i].consensusAddress);
directAmounts[directSize] = currentValidatorSet[i].incoming;
isMigrated[directSize] = 1; // directSize must be less than i. so we can use directSize as index
++directSize;
}
} else if (currentValidatorSet[i].incoming >= DUSTY_INCOMING) {
crossAddrs[crossSize] = currentValidatorSet[i].BBCFeeAddress;
uint256 value = currentValidatorSet[i].incoming - currentValidatorSet[i].incoming % PRECISION;
crossAmounts[crossSize] = value.sub(relayFee);
crossRefundAddrs[crossSize] = currentValidatorSet[i].feeAddress;
crossIndexes[crossSize] = i;
crossTotal = crossTotal.add(value);
++crossSize;
} else if (currentValidatorSet[i].incoming != 0) {
directAddrs[directSize] = currentValidatorSet[i].feeAddress;
directAmounts[directSize] = currentValidatorSet[i].incoming;
isMigrated[directSize] = 0;
++directSize;
}
}

//step 2: do cross chain transfer
bool failCross = false;
if (crossTotal > 0) {
try ITokenHub(TOKEN_HUB_ADDR).batchTransferOutBNB{ value: crossTotal }(
crossAddrs, crossAmounts, crossRefundAddrs, uint64(block.timestamp + expireTimeSecondGap)
) returns (bool success) {
if (success) {
emit batchTransfer(crossTotal);
} else {
emit batchTransferFailed(crossTotal, "batch transfer return false");
}
} catch Error(string memory reason) {
failCross = true;
emit batchTransferFailed(crossTotal, reason);
} catch (bytes memory lowLevelData) {
failCross = true;
emit batchTransferLowerFailed(crossTotal, lowLevelData);
}
}

if (failCross) {
for (uint256 i; i < crossIndexes.length; ++i) {
uint256 idx = crossIndexes[i];
bool success = currentValidatorSet[idx].feeAddress.send(currentValidatorSet[idx].incoming);
if (success) {
emit directTransfer(currentValidatorSet[idx].feeAddress, currentValidatorSet[idx].incoming);
} else {
emit directTransferFail(currentValidatorSet[idx].feeAddress, currentValidatorSet[idx].incoming);
}
}
}

// step 3: direct transfer
if (directAddrs.length > 0) {
for (uint256 i; i < directAddrs.length; ++i) {
if (isMigrated[i] == 1) {
IStakeHub(STAKE_HUB_ADDR).distributeReward{ value: directAmounts[i] }(directAddrs[i]);
} else {
bool success = directAddrs[i].send(directAmounts[i]);
if (success) {
emit directTransfer(directAddrs[i], directAmounts[i]);
} else {
emit directTransferFail(directAddrs[i], directAmounts[i]);
}
}
}
}
}

for (uint256 i; i < currentValidatorSet.length; ++i) {
if (currentValidatorSet[i].incoming != 0) {
currentValidatorSet[i].incoming = 0;
}
}

// step 4: do dusk transfer
if (address(this).balance > 0) {
emit systemTransfer(address(this).balance);
address(uint160(SYSTEM_REWARD_ADDR)).transfer(address(this).balance);
}

// step 5: do update validator set state
totalInComing = 0;
numOfJailed = 0;
if (validatorSetTemp.length > 0) {
doUpdateState(validatorSetTemp, voteAddrsTemp);
}

// step 6: clean slash contract
ISlashIndicator(SLASH_CONTRACT_ADDR).clean();
emit validatorSetUpdated();
return CODE_OK;
}

function doUpdateState(Validator[] memory newValidatorSet, bytes[] memory newVoteAddrs) private {
uint256 n = currentValidatorSet.length;
uint256 m = newValidatorSet.length;
Expand Down Expand Up @@ -1323,11 +1089,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica
isFelony = false;
if (slashCount >= felonyThreshold) {
_felony(validator, index);
if (IStakeHub(STAKE_HUB_ADDR).consensusToOperator(validator) != address(0)) {
ISlashIndicator(SLASH_CONTRACT_ADDR).downtimeSlash(validator, slashCount, shouldRevert);
} else {
ISlashIndicator(SLASH_CONTRACT_ADDR).sendFelonyPackage(validator);
}
ISlashIndicator(SLASH_CONTRACT_ADDR).downtimeSlash(validator, slashCount, shouldRevert);
isFelony = true;
} else if (slashCount >= misdemeanorThreshold) {
_misdemeanor(validator);
Expand Down
38 changes: 3 additions & 35 deletions contracts/GovHub.sol
Original file line number Diff line number Diff line change
Expand Up @@ -31,26 +31,17 @@ contract GovHub is System, IApplication {
uint8,
bytes calldata msgBytes
) external override onlyCrossChainContract returns (bytes memory responsePayload) {
(ParamChangePackage memory proposal, bool success) = decodeSynPackage(msgBytes);
if (!success) {
return CmnPkg.encodeCommonAckPackage(ERROR_FAIL_DECODE);
}
uint32 resCode = notifyUpdates(proposal);
if (resCode == CODE_OK) {
return new bytes(0);
} else {
return CmnPkg.encodeCommonAckPackage(resCode);
}
revert("deprecated");
}

// should not happen
function handleAckPackage(uint8, bytes calldata) external override onlyCrossChainContract {
require(false, "receive unexpected ack package");
revert("deprecated");
}

// should not happen
function handleFailAckPackage(uint8, bytes calldata) external override onlyCrossChainContract {
require(false, "receive unexpected fail ack package");
revert("deprecated");
}

function updateParam(string calldata key, bytes calldata value, address target) external onlyGovernorTimelock {
Expand All @@ -73,27 +64,4 @@ contract GovHub is System, IApplication {
}
return CODE_OK;
}

//rlp encode & decode function
function decodeSynPackage(bytes memory msgBytes) internal pure returns (ParamChangePackage memory, bool) {
ParamChangePackage memory pkg;

RLPDecode.Iterator memory iter = msgBytes.toRLPItem().iterator();
bool success = false;
uint256 idx = 0;
while (iter.hasNext()) {
if (idx == 0) {
pkg.key = string(iter.next().toBytes());
} else if (idx == 1) {
pkg.value = iter.next().toBytes();
} else if (idx == 2) {
pkg.target = iter.next().toAddress();
success = true;
} else {
break;
}
++idx;
}
return (pkg, success);
}
}
Loading
Loading