{"id":26848224,"url":"https://github.com/0xpolarzero/airdrop-gas-benchmarks","last_synced_at":"2026-01-22T13:48:44.449Z","repository":{"id":219419792,"uuid":"747240577","full_name":"0xpolarzero/airdrop-gas-benchmarks","owner":"0xpolarzero","description":"Gas consumption benchmarks for popular airdrop patterns.","archived":false,"fork":false,"pushed_at":"2024-04-18T15:31:56.000Z","size":388,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-01T09:18:00.777Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xpolarzero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-23T14:48:46.000Z","updated_at":"2024-12-12T13:46:28.000Z","dependencies_parsed_at":"2024-01-27T12:21:56.863Z","dependency_job_id":"b226143c-8d1a-463e-9ae1-176be1e1e68f","html_url":"https://github.com/0xpolarzero/airdrop-gas-benchmarks","commit_stats":null,"previous_names":["0xpolarzero/airdrop-gas-benchmarks"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/0xpolarzero/airdrop-gas-benchmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xpolarzero%2Fairdrop-gas-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xpolarzero%2Fairdrop-gas-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xpolarzero%2Fairdrop-gas-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xpolarzero%2Fairdrop-gas-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xpolarzero","download_url":"https://codeload.github.com/0xpolarzero/airdrop-gas-benchmarks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xpolarzero%2Fairdrop-gas-benchmarks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28664023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-30T20:53:35.824Z","updated_at":"2026-01-22T13:48:44.430Z","avatar_url":"https://github.com/0xpolarzero.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gas consumption benchmarks for popular airdrop patterns\n\nThis repository contains a series of tests to measure gas usage for popular airdrop patterns with various token standards and airdrop mechanisms. Including:\n\n- native currency (ETH);\n- ERC20;\n- ERC721;\n- ERC1155.\n\nThe custom mapping-based contracts ([`AirdropClaimMappingERC{20/721/1155}`](./src/custom/AirdropClaimMapping.ERC20.sol)), and to some extent [`AirdropClaimMerkleERC{20/721/1155}`](./src/custom/AirdropClaimMerkle.ERC20.sol) and [`AirdropClaimSignatureERC{20/721/1155}`](./src/custom/AirdropClaimSignature.ERC20.sol) as well, are purposely written poorly to fit common assumptions and patterns found in the wild.\n\n## Table of contents\n\n- [Overview](#overview)\n  - [Airdrop mechanisms (custom contracts)](#airdrop-mechanisms-custom-contracts)\n  - [Airdrop solutions (including already deployed contracts)](#airdrop-solutions-including-already-deployed-contracts)\n- [Results](#results)\n  - [ERC20 (push-based)](#erc20-direct-airdrop)\n  - [ERC20 (claim-based)](#erc20-claim-based-airdrop)\n  - [ERC721 (push-based)](#erc721-direct-airdrop)\n  - [ERC721 (claim-based)](#erc721-claim-based-airdrop)\n  - [ERC1155 (push-based)](#erc1155-direct-airdrop)\n  - [ERC1155 (claim-based)](#erc1155-claim-based-airdrop)\n  - [ETH (push-based)](#eth-direct-airdrop)\n- [How to run](#how-to-run)\n  - [Setup](#setup)\n  - [Usage](#usage)\n\n## Overview\n\n### Airdrop mechanisms (custom contracts):\n\n| Type                                              | Tokens                 | Contract                                                                                                                                                                                                                                       |\n| ------------------------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Claimable airdrop (data inscribed into a mapping) | ERC20, ERC721, ERC1155 | [`AirdropClaimMappingERC20`](./src/custom/AirdropClaimMapping.ERC20.sol), [`AirdropClaimMappingERC721`](./src/custom/AirdropClaimMapping.ERC721.sol), [`AirdropClaimMappingERC1155`](./src/custom/AirdropClaimMapping.ERC1155.sol)             |\n| Claimable airdrop (merkle proof)                  | ERC20, ERC721, ERC1155 | [`AirdropClaimMerkleERC20`](./src/custom/AirdropClaimMerkle.ERC20.sol), [`AirdropClaimMerkleERC721`](./src/custom/AirdropClaimMerkle.ERC721.sol), [`AirdropClaimMerkleERC1155`](./src/custom/AirdropClaimMerkle.ERC1155.sol)                   |\n| Claimable airdrop (signature)                     | ERC20, ERC721, ERC1155 | [`AirdropClaimSignatureERC20`](./src/custom/AirdropClaimSignature.ERC20.sol), [`AirdropClaimSignatureERC721`](./src/custom/AirdropClaimSignature.ERC721.sol), [`AirdropClaimSignatureERC1155`](./src/custom/AirdropClaimSignature.ERC1155.sol) |\n| Airdrop (bytecode contract)                       | ERC20                  | [`BytecodeDrop`](./src/BytecodeDrop.sol)                                                                                                                                                                                                       |\n\n### Airdrop solutions (including already deployed contracts):\n\n| Type                                              | Tokens                 | Contract                                                                                                                                                                                                            | Website/source code                                  |\n| ------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |\n| GasliteDrop (airdrop)                             | ETH, ERC20, ERC721     | [`GasliteDrop`](./src/GasliteDrop.sol)                                                                                                                                                                              | [drop.gaslite.org](https://drop.gaslite.org/)        |\n| GasliteDrop1155 (airdrop)                         | ERC1155                | [`GasliteDrop1155`](./src/GasliteDrop1155.sol)                                                                                                                                                                      | [drop.gaslite.org](https://drop.gaslite.org/)        |\n| GasliteMerkleDN (claimable airdrop, merkle proof) | ETH                    | [`GasliteMerkleDN`](./src/GasliteMerkleDN.sol)                                                                                                                                                                      | [gaslite.org](https://gaslite.org/)                  |\n| GasliteMerkleDT (claimable airdrop, merkle proof) | ERC20                  | [`GasliteMerkleDT`](./src/GasliteMerkleDT.sol)                                                                                                                                                                      | [gaslite.org](https://gaslite.org/)                  |\n| Disperse.app (airdrop)                            | ETH, ERC20             | [`Disperse`](./src/Disperse.sol)                                                                                                                                                                                    | [disperse.app](https://disperse.app/)                |\n| wentokens (airdrop)                               | ETH, ERC20             | [`Airdrop`](./src/Wentokens.sol)                                                                                                                                                                                    | [www.wentokens.xyz](https://www.wentokens.xyz/)      |\n| Thirdweb (airdrop)                                | ERC20, ERC721, ERC1155 | [`AirdropERC20`](./src/thirdweb/AirdropERC20.sol), [`AirdropERC721`](./src/thirdweb/AirdropERC721.sol), [`AirdropERC1155`](./src/thirdweb/AirdropERC1155.sol)                                                       | [thirdweb.com](https://thirdweb.com/explore/airdrop) |\n| Thirdweb (claimable airdrop, merkle proof)        | ERC20, ERC721, ERC1155 | [`AirdropERC20Claimable`](./src/thirdweb/AirdropERC20Claimable.sol), [`AirdropERC721Claimable`](./src/thirdweb/AirdropERC721Claimable.sol), [`AirdropERC1155Claimable`](./src/thirdweb/AirdropERC1155Claimable.sol) | [thirdweb.com](https://thirdweb.com/explore/airdrop) |\n\n---\n\nThis Readme is an attempt to showcase the results in an organized and sorted manner.\n\n\u003e [!NOTE]\n\u003e The benchmarks do not include the gas consumption for [the bytecode contract](./src/BytecodeDrop.sol), as [a current limitation with Forge](https://github.com/foundry-rs/foundry/issues/6129); this should actually be the most efficient way for airdropping ERC20 tokens.\n\n## Results\n\nThe tables below are based on gas benchmarks with the following parameters:\n\n- 1,000 different random recipients;\n- random amounts between 1e10 and 1e19 (10 \\* 18 decimals), except for ERC721 (1 token per recipient);\n- some amounts are repeated randomly to better simulate real world scenarios ([see here](./test/Benchmarks.base.sol#L260));\n- randomness is generated with [Solady LibPRNG](https://github.com/Vectorized/solady/blob/main/src/utils/LibPRNG.sol), taking advantage of random calldata generated with fuzzing (see the unnamed uint256 parameter in each test function);\n- the gas consumption is measured [with Forge](https://book.getfoundry.sh/forge/gas-reports?highlight=gas-report#gas-reports);\n- Thirdweb contracts are supposed to be deployed as a proxy pointing to the actual implementation, so the cost of deploying the implementation is not included in the report.\n\nSee [the full report](./gas-report.txt) for more details or [generate it yourself](#how-to-run).\n\n### Notes\n\nFor **claim-based airdrops**, multiple measurements are taken into account:\n\n1. deployment/initilization (e.g. Thirdweb contracts require only a proxy to be deployed, but the proxy needs to be initialized with the airdrop data, which can be quite expensive);\n2. deposit/airdrop (e.g. depositing tokens, writing the airdrop data to the contract);\n3. claim.\n\nSteps 1 and 2 are aggregated into `Gas deployment`, with the details for each amount in such way: `total (deployment/initialization + deposit/airdrop)`.\n\nFor **push-based airdrops**, the gas cost of deploying and initializing the contract is ignored, as all solutions, excluding Thirdweb, are already deployed and available for use (direct call to the airdrop function).\n\n### ERC20 (push-based)\n\n| Rank | Contract                                                       | Gas (1,000 recipients) | Difference from #1             |\n| ---- | -------------------------------------------------------------- | ---------------------- | ------------------------------ |\n| 1    | [`GasliteDrop`](./src//GasliteDrop.sol#L86)                    | 25,542,088 \u003c!-- g --\u003e  | 0                              |\n| 2    | Wentokens [`Airdrop`](./src/Wentokens.sol#L77)                 | 25,586,923 \u003c!-- g --\u003e  | +44,835 (+0.18%) \u003c!-- g --\u003e    |\n| 3    | [`Disperse`](./src/Disperse.sol#L20) (`disperseToken`)         | 26,342,497 \u003c!-- g --\u003e  | +800,409 (+3.13%) \u003c!-- g --\u003e   |\n| 4    | [`Disperse`](./src//Disperse.sol#L31) (`disperseTokenSimple`)  | 26,852,552 \u003c!-- g --\u003e  | +1,310,464 (+5.13%) \u003c!-- g --\u003e |\n| 5    | Thirdweb [`AirdropERC20`](./src/thirdweb/AirdropERC20.sol#L96) | 26,925,358 \u003c!-- g --\u003e  | +1,383,270 (+5.41%) \u003c!-- g --\u003e |\n\n### ERC20 (claim-based)\n\n| Rank | Contract                                                                     | Gas deployment (1,000 recipients)            | Difference from #1                  | Gas claim (1 recipient) | Difference from #1           |\n| ---- | ---------------------------------------------------------------------------- | -------------------------------------------- | ----------------------------------- | ----------------------- | ---------------------------- |\n| 1    | [`AirdropClaimSignature`](./src/custom/AirdropClaimSignature.ERC20.sol)      | 496,127 (496,127 + 0) \u003c!-- g --\u003e             | 0                                   | 85,766 \u003c!-- g --\u003e       | 0                            |\n| 2    | [`AirdropClaimMerkle`](./src/custom/AirdropClaimMerkle.ERC20.sol)            | 464,492 (464,492 + 0) \u003c!-- g --\u003e             | -31,635 (-6.81%) \u003c!-- g --\u003e         | 87,547 \u003c!-- g --\u003e       | +1,781 (+2.03%) \u003c!-- g --\u003e   |\n| 3    | [`GasliteMerkleDT`](./src/GasliteMerkleDT.sol)                               | 647,007 (601,488 + 45,519) \u003c!-- g --\u003e        | +150,880 (+30.41%) \u003c!-- g --\u003e       | 88,613 \u003c!-- g --\u003e       | +2,847 (+3.32%) \u003c!-- g --\u003e   |\n| 4    | Thirdweb [`AirdropERC20Claimable`](./src/thirdweb/AirdropERC20Claimable.sol) | 207,525 (66,769 + 140,756) \u003c!-- g --\u003e        | -288,602 (-58.17%) \u003c!-- g --\u003e       | 90,267 \u003c!-- g --\u003e       | +4,501 (+5.25%) \u003c!-- g --\u003e   |\n| 5    | [`AirdropClaimMapping`](./src/custom/AirdropClaimMapping.ERC20.sol)          | 25,666,389 (538,776 + 25,127,613) \u003c!-- g --\u003e | +25,170,262 (+5,073.25%) \u003c!-- g --\u003e | 57,631 \u003c!-- g --\u003e       | -28,135 (-32.80%) \u003c!-- g --\u003e |\n\nThis comparison is opinionated. Some arguments to support it:\n\n- The difference in deployment cost is too significant for `AirdropClaimMapping` to be considered a viable solution. Although, in pure gas terms, for 1,000 recipients, it's still cheaper than the Thirdweb and signature-based solutions, i.e. it will spend less gas in total.\n- Although the deployment for Thirdweb's `AirdropERC20Claimable` is half the cost of `AirdropClaimMerkle` or `AirdropClaimSignature`, the increase in gas for claiming is too significant to have it ranked higher. I believe that the deployer paying ~400-500,000 gas instead of ~200,000 cannot justify each single claimer having to pay ~90,000 gas instead of ~86,000.\n\nIn any case, these are only benchmarks, with a ranking provided for convenience.\n\nIt's also worth noting that the top 1 and 2 custom contracts are really just mock implementations. Although they do allow claiming on behalf of another account, they lack some checks and utility functions (e.g. pausing the claim)—the position of these contracts in the ranking is not a recommendation to use them, but rather based on the gas consumption.\n\n### ERC721 (push-based)\n\n| Rank | Contract                                                         | Gas (1,000 recipients) | Difference from #1             |\n| ---- | ---------------------------------------------------------------- | ---------------------- | ------------------------------ |\n| 1    | [`GasliteDrop`](./src/GasliteDrop.sol#L46)                       | 33,103,232 \u003c!-- g --\u003e  | 0                              |\n| 2    | Thirdweb [`AirdropERC721`](./src/thirdweb/AirdropERC721.sol#L93) | 35,844,727 \u003c!-- g --\u003e  | +2,741,495 (+8.28%) \u003c!-- g --\u003e |\n\n### ERC721 (claim-based)\n\n| Rank | Contract                                                                       | Gas deployment (1,000 recipients)            | Difference from #1                  | Gas claim (1 recipient) | Difference from #1                 |\n| ---- | ------------------------------------------------------------------------------ | -------------------------------------------- | ----------------------------------- | ----------------------- | ---------------------------------- |\n| 1    | [`AirdropClaimSignature`](./src/custom/AirdropClaimSignature.ERC721.sol)       | 479,098 (479,098 + 0) \u003c!-- g --\u003e             | 0                                   | 93,072 \u003c!-- g --\u003e       | 0                                  |\n| 2    | [`AirdropClaimMerkle`](./src/custom/AirdropClaimMerkle.ERC721.sol)             | 447,613 (447,613 + 0) \u003c!-- g --\u003e             | -31,485 (-6.57%) \u003c!-- g --\u003e         | 94,953 \u003c!-- g --\u003e       | +1,881 (+2.02%) \u003c!-- g --\u003e         |\n| 3    | [`AirdropClaimMapping`](./src/custom/AirdropClaimMapping.ERC721.sol)           | 36,472,337 (520,397 + 35,951,940) \u003c!-- g --\u003e | +35,993,239 (+7,512.71%) \u003c!-- g --\u003e | 65,162 \u003c!-- g --\u003e       | -27,910 (-29.99%) \u003c!-- g --\u003e       |\n| 4    | Thirdweb [`AirdropERC721Claimable`](./src/thirdweb/AirdropERC721Claimable.sol) | 22,452,426 (66,769 + 22,385,657) \u003c!-- g --\u003e  | +21,973,328 (+4,586.40%) \u003c!-- g --\u003e | 2,257,594 \u003c!-- g --\u003e    | +2,164,522 (+2,325.64%) \u003c!-- g --\u003e |\n\nIt really hurts to not put `AirdropClaimMapping` in the last place, but Thirdweb's `AirdropERC721Claimable` really is too much with both the ~30M gas deployment and the ~218k gas claims. With 1,000 recipients, it is more than 219M in gas just for users to claim their tokens...\n\nAlso, `AirdropERC721Claimable` does not allow for airdroping specific tokens to specific accounts, it will just allow to claim `n` amount of tokens, and read the tokenIds array in ascending order. So it basically looks like a minting function.\n\n### ERC1155 (push-based)\n\n| Rank | Contract                                                           | Gas (1,000 recipients) | Difference from #1           |\n| ---- | ------------------------------------------------------------------ | ---------------------- | ---------------------------- |\n| 1    | [`GasliteDrop1155`](./src/GasliteDrop1155.sol#L64)                 | 29,910,313 \u003c!-- g --\u003e  | 0                            |\n| 2    | Thirdweb [`AirdropERC1155`](./src/thirdweb/AirdropERC1155.sol#L93) | 30,320,907 \u003c!-- g --\u003e  | +410,594 (+1.37%) \u003c!-- g --\u003e |\n\nIt's worth noting that `GasliteDrop1155` takes advantage of multiple recipients with same amount by packing them into a single struct. Which much better simulates real world scenarios (e.g. users being rewarded the same amounts for the same token IDs after accomplishing a similar task). See:\n\n```solidity\nstruct AirdropTokenAmount {\n    uint256 amount;\n    address[] recipients;\n}\n```\n\nIn these tests, there are ~14% of recipients aggregated with the same amount. As the proportion of recipients with the same amount increases, the gap in gas consumption between `GasliteDrop1155` and Thirdweb's `AirdropERC1155` contract will increase as well.\n\n### ERC1155 (claim-based)\n\n| Rank | Contract                                                                         | Gas deployment (1,000 recipients)            | Difference from #1                  | Gas claim (1 recipient) | Difference from #1           |\n| ---- | -------------------------------------------------------------------------------- | -------------------------------------------- | ----------------------------------- | ----------------------- | ---------------------------- |\n| 1    | [`AirdropClaimSignature`](./src/custom/AirdropClaimSignature.ERC1155.sol)        | 609,717 (609717 + 0) \u003c!-- g --\u003e              | 0                                   | 87,405 \u003c!-- g --\u003e       | 0                            |\n| 2    | [`AirdropClaimMerkle`](./src/custom/AirdropClaimMerkle.ERC1155.sol)              | 577,332 (577,332 + 0) \u003c!-- g --\u003e             | -32,385 (-5.31%) \u003c!-- g --\u003e         | 89,236 \u003c!-- g --\u003e       | +1,831 (+2.10%) \u003c!-- g --\u003e   |\n| 3    | Thirdweb [`AirdropERC1155Claimable`](./src/thirdweb/AirdropERC1155Claimable.sol) | 1,556,310 (66,769 + 1,489,541) \u003c!-- g --\u003e    | +946,593 (+155.25%) \u003c!-- g --\u003e      | 88,990 \u003c!-- g --\u003e       | +1,585 (+1.81%) \u003c!-- g --\u003e   |\n| 4    | [`AirdropClaimMapping`](./src/custom/AirdropClaimMapping.ERC1155.sol)            | 27,929,999 (697,536 + 27,232,463) \u003c!-- g --\u003e | +27,320,282 (+4,480.81%) \u003c!-- g --\u003e | 59,402 \u003c!-- g --\u003e       | -28,003 (-32.03%) \u003c!-- g --\u003e |\n\nThese contracts allow only for claiming a single token ID per recipient, to fit the Thirdweb pattern.\n\n### ETH (push-based)\n\n| Rank | Contract                                       | Gas (1,000 recipients) | Difference from #1           |\n| ---- | ---------------------------------------------- | ---------------------- | ---------------------------- |\n| 1    | [`GasliteDrop`](./src/GasliteDrop.sol#L137)    | 9,996,017 \u003c!-- g --\u003e   | 0                            |\n| 2    | Wentokens [`Airdrop`](./src/Wentokens.sol#L32) | 10,050,255 \u003c!-- g --\u003e  | +54,238 (+0.54%) \u003c!-- g --\u003e  |\n| 3    | [`Disperse`](./src/Disperse.sol#L10)           | 10,314,834 \u003c!-- g --\u003e  | +318,817 (+3.19%) \u003c!-- g --\u003e |\n\n\u003e [!NOTE]\n\u003e There tests use already initialized accounts—that is, accounts that were sent 1 wei prior to the measurement—to better simulate real world scenarios. This helps to avoid the cost of both the cold account access (2,500 gas) and the initialization surcharges (25,000 gas).\n\u003e [See here for reference](https://github.com/foundry-rs/foundry/issues/7047#issuecomment-1935424409)\n\n### ETH (claim-based)\n\n| Rank | Contract                                       | Gas deployment (1,000 recipients)     | Difference from #1 | Gas claim (1 recipient) | Difference from #1 |\n| ---- | ---------------------------------------------- | ------------------------------------- | ------------------ | ----------------------- | ------------------ |\n| 1    | [`GasliteMerkleDN`](./src/GasliteMerkleDN.sol) | 536,646 (491,127 + 45,519) \u003c!-- g --\u003e | 0                  | 87,177 \u003c!-- g --\u003e       | 0                  |\n\n## How to run\n\n### Setup\n\n1. Clone the repository and navigate to the root directory\n\n```sh\ngit clone git@github.com:0xpolarzero/airdrop-gas-benchmarks.git\ncd airdrop-gas-benchmarks\n```\n\n2. [Install Foundry](https://book.getfoundry.sh/getting-started/installation)\n\n3. Customize the amount of recipients [here](./test/Benchmarks.base.sol#L45) and the amount of ERC1155 tokens ids to distribute [here](./test/Benchmarks.base.sol#L47)\n\n### Usage\n\n1. Run all tests with gas snapshots\n\n```sh\n# Output to stdout\nforge test --gas-report\n# Output to file\nforge test --gas-report \u003e gas-report.txt\n```\n\n2. Run benchmarks for a specific token/currency\n\n```sh\n# BenchmarksERC20\n# BenchmarksERC721\n# BenchmarksERC1155\n# BenchmarksETH\nforge test --mc BenchmarksERC20 --gas-report\n```\n\n3. Run benchmarks for a specific contract/solution\n\n```sh\n# AirdropClaimMapping\n# AirdropClaimMerkle\n# AirdropClaimSignature\n# Disperse\n# wentokens\n# GasliteDrop\n# BytecodeDrop\n# Thirdweb\n# ...\nforge test --mt AirdropClaimMapping_ERC20 --gas-report\n```\n\n4. Run a specific test\n\n```sh\n# See the name of each test\nforge test --mt test_ERC20_GasliteDrop --gas-report\n```\n\n## Disclaimer\n\n\u003e [!WARNING]\n\u003e The custom contracts shared in this repository are not meant to be used in production. They are not audited, and some of them are written precisely to showcase how inefficient airdrops can be if not properly designed. This does not only apply to gas consumption, but also to security and usability.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xpolarzero%2Fairdrop-gas-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xpolarzero%2Fairdrop-gas-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xpolarzero%2Fairdrop-gas-benchmarks/lists"}