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: 68/75
Findings: 1
Award: $31.88
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 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.8812 USDC - $31.88
File: contracts/AxelarGateway.sol for (uint256 i = 0; i < symbols.length; i++) {
File: contracts/gas-service/AxelarGasService.sol for (uint256 i; i < tokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/AxelarGateway.sol for (uint256 i = 0; i < symbols.length; i++) {
File: contracts/auth/AxelarAuthWeighted.sol uint256 totalWeight = 0;
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i = 0; i < weightsLength; ++i) {
File: contracts/auth/AxelarAuthWeighted.sol uint256 operatorIndex = 0;
File: contracts/auth/AxelarAuthWeighted.sol uint256 weight = 0;
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i = 0; i < signatures.length; ++i) {
File: contracts/AxelarGateway.sol for (uint256 i; i < adminCount; ++i) {
File: contracts/AxelarGateway.sol for (uint256 i = 0; i < symbols.length; i++) {
File: contracts/AxelarGateway.sol for (uint256 i; i < commandsLength; ++i) {
File: contracts/gas-service/AxelarGasService.sol for (uint256 i; i < tokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i = 0; i < signatures.length; ++i) {
File: contracts/auth/AxelarAuthWeighted.sol for (; operatorIndex < operatorsLength && signer != operators[operatorIndex]; ++operatorIndex) {}
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i; i < accounts.length - 1; ++i) {
File: contracts/AxelarGateway.sol for (uint256 i = 0; i < symbols.length; i++) {
File: contracts/AxelarGateway.sol for (uint256 i; i < commandsLength; ++i) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/deposit-service/AxelarDepositService.sol for (uint256 i; i < refundTokens.length; i++) {
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i = 0; i < signatures.length; ++i) {
File: contracts/auth/AxelarAuthWeighted.sol for (uint256 i; i < accounts.length - 1; ++i) {
File: xc20/contracts/XC20Wrapper.sol if (axelarToken == address(0)) revert('NotAxelarToken()');
File: xc20/contracts/XC20Wrapper.sol if (xc20Token.codehash != xc20Codehash) revert('NotXc20Token()');
File: xc20/contracts/XC20Wrapper.sol if (wrapped[axelarToken] != address(0)) revert('AlreadyWrappingAxelarToken()');
File: xc20/contracts/XC20Wrapper.sol if (unwrapped[xc20Token] != address(0)) revert('AlreadyWrappingXC20Token()');
File: xc20/contracts/XC20Wrapper.sol if (!LocalAsset(xc20Token).set_team(address(this), address(this), address(this))) revert('NotOwner()');
File: xc20/contracts/XC20Wrapper.sol if (!LocalAsset(xc20Token).set_metadata(newName, newSymbol, IERC20(axelarToken).decimals())) revert('CannotSetMetadata()');
File: xc20/contracts/XC20Wrapper.sol if (axelarToken == address(0)) revert('NotAxelarToken()');
File: xc20/contracts/XC20Wrapper.sol if (xc20Token == address(0)) revert('NotWrappingToken()');
File: xc20/contracts/XC20Wrapper.sol if (wrappedToken == address(0)) revert('NotAxelarToken()');
File: xc20/contracts/XC20Wrapper.sol if (!LocalAsset(wrappedToken).mint(msg.sender, amount)) revert('CannotMint()');
File: xc20/contracts/XC20Wrapper.sol if (axelarToken == address(0)) revert('NotXc20Token()');
File: xc20/contracts/XC20Wrapper.sol if (IERC20(wrappedToken).balanceOf(msg.sender) < amount) revert('InsufficientBalance()');
File: xc20/contracts/XC20Wrapper.sol if (!LocalAsset(wrappedToken).burn(msg.sender, amount)) revert('CannotBurn()');
File: xc20/contracts/XC20Wrapper.sol if (!transferred || tokenAddress.code.length == 0) revert('TransferFailed()');
File: xc20/contracts/XC20Wrapper.sol if (!transferred || tokenAddress.code.length == 0) revert('TransferFailed()');
File: contracts/gas-service/AxelarGasService.sol return keccak256('axelar-gas-service');
File: contracts/deposit-service/AxelarDepositService.sol return keccak256('axelar-deposit-service');
File: xc20/contracts/XC20Wrapper.sol return keccak256('xc20-wrapper');
#0 - re1ro
2022-08-05T03:30:17Z
1, 2, 3, 4 : Dup #2
Our targeted platform/compiler doesn't support custom errors.
We prefer this for simplicity of verification. This function is only called on upgrades
#1 - GalloDaSballo
2022-08-20T18:53:52Z
Less than 300 gas saved
For 6. you could use an hardcoded constant which would have the same usage but provide gas savings (the report that constants cost gas is false and has been debunked for ages)