Platform: Code4rena
Start Date: 29/07/2022
Pot Size: $50,000 USDC
Total HM: 6
Participants: 75
Period: 5 days
Judge: GalloDaSballo
Total Solo HM: 3
Id: 149
League: ETH
Rank: 44/75
Findings: 2
Award: $87.35
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: oyc_109
Also found by: 0x1f8b, 0x52, 0xNazgul, 0xSmartContract, 0xf15ers, 8olidity, Aymen0909, Bnke0x0, CertoraInc, Chom, CodingNameKiki, Deivitto, Dravee, ElKu, IllIllI, JC, Lambda, Noah3o6, NoamYakov, RedOneN, Respx, ReyAdmirado, Rohan16, Rolezn, Ruhum, Sm4rty, TomJ, Twpony, Waze, Yiko, __141345__, ajtra, apostle0x01, ashiq0x01, asutorufos, bardamu, benbaessler, berndartmueller, bharg4v, bulej93, c3phas, cccz, ch13fd357r0y3r, codexploder, cryptonue, cryptphi, defsec, djxploit, durianSausage, fatherOfBlocks, gogo, hansfriese, horsefacts, ignacio, kyteg, lucacez, mics, rbserver, robee, sashik_eth, simon135, sseefried, tofunmi, xiaoming90
56.1273 USDC - $56.13
https://github.com/code-423n4/2022-07-axelar/blob/main/contracts/deposit-service/ReceiverImplementation.sol#L51 https://github.com/code-423n4/2022-07-axelar/blob/main/contracts/deposit-service/ReceiverImplementation.sol#L71 https://github.com/code-423n4/2022-07-axelar/blob/main/contracts/deposit-service/ReceiverImplementation.sol#L86 https://github.com/code-423n4/2022-07-axelar/blob/main/contracts/gas-service/AxelarGasService.sol#L128 https://github.com/code-423n4/2022-07-axelar/blob/main/xc20/contracts/XC20Wrapper.sol#L63
Multiple times in contracts used transfer()
function for sending ether instead of recommended call()
. It could lead to broken functionality in the future:
https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/
Use call()
function instead of transfer()
with checking successful return result and reentrancy guard.
#0 - re1ro
2022-08-23T00:46:48Z
Duplicate of #4
🌟 Selected for report: IllIllI
Also found by: 0x1f8b, 0xNazgul, 0xsam, 8olidity, Aymen0909, Bnke0x0, Chom, CodingNameKiki, Deivitto, Dravee, ElKu, Fitraldys, JC, Lambda, MiloTruck, Noah3o6, NoamYakov, RedOneN, Respx, ReyAdmirado, Rohan16, Rolezn, Ruhum, Sm4rty, TomJ, Tomio, Waze, __141345__, a12jmx, ajtra, ak1, apostle0x01, asutorufos, benbaessler, bharg4v, bulej93, c3phas, defsec, djxploit, durianSausage, erictee, fatherOfBlocks, gerdusx, gogo, kyteg, lucacez, medikko, mics, owenthurm, oyc_109, rbserver, robee, sashik_eth, simon135, tofunmi
31.222 USDC - $31.22
unchecked
block can be used for gas efficiency of the expression that can't overflow/underflowcontracts/AxelarGateway.sol:157 return getUint(_getTokenDailyMintAmountKey(symbol, block.timestamp / 1 days)); contracts/AxelarGateway.sol:615 _setUint(_getTokenDailyMintAmountKey(symbol, block.timestamp / 1 days), amount);
Using custom errors istead of revert strings could save gas: https://blog.soliditylang.org/2021/04/21/custom-errors/
xc20/contracts/XC20Wrapper.sol:12 error TransferFailed(); xc20/contracts/XC20Wrapper.sol:13 error NotAxelarToken(); xc20/contracts/XC20Wrapper.sol:14 error NotXc20Token(); xc20/contracts/XC20Wrapper.sol:15 error InsufficientBalance(); xc20/contracts/XC20Wrapper.sol:16 error AlreadyWrappingAxelarToken(); xc20/contracts/XC20Wrapper.sol:17 error AlreadyWrappingXC20Token(); xc20/contracts/XC20Wrapper.sol:18 error NotOwnerOfXc20();
for
loopsLoop could save gas if:
++i
incrementunchecked
block
It would have next view:uint256 length = myStateVarOrArrayLength; for (uint256 i = 0; i < length;) { // ... unchecked { ++i; } }
Next loops could be optimized:
contracts/AxelarGateway.sol:195 for (uint256 i; i < adminCount; ++i) { contracts/AxelarGateway.sol:207 for (uint256 i = 0; i < symbols.length; i++) { contracts/AxelarGateway.sol:292 for (uint256 i; i < commandsLength; ++i) { contracts/auth/AxelarAuthWeighted.sol:17 for (uint256 i; i < recentOperators.length; ++i) { contracts/auth/AxelarAuthWeighted.sol:69 for (uint256 i = 0; i < weightsLength; ++i) { contracts/auth/AxelarAuthWeighted.sol:98 for (uint256 i = 0; i < signatures.length; ++i) { contracts/auth/AxelarAuthWeighted.sol:101 for (; operatorIndex < operatorsLength && signer != operators[operatorIndex]; ++operatorIndex) {} contracts/auth/AxelarAuthWeighted.sol:116 for (uint256 i; i < accounts.length - 1; ++i) { contracts/deposit-service/AxelarDepositService.sol:114 for (uint256 i; i < refundTokens.length; i++) { contracts/deposit-service/AxelarDepositService.sol:168 for (uint256 i; i < refundTokens.length; i++) { contracts/deposit-service/AxelarDepositService.sol:204 for (uint256 i; i < refundTokens.length; i++) { contracts/gas-service/AxelarGasService.sol:123 for (uint256 i; i < tokens.length; i++) {
#0 - GalloDaSballo
2022-08-23T01:10:49Z
Less than 100 gas saved