UNPKG

@sablier/airdrops

Version:

EVM smart contracts of the Sablier Airdrops protocol

514 lines (513 loc) 39.2 kB
{ "abi": [ { "type": "function", "name": "comptroller", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "contract ISablierComptroller" }], "stateMutability": "view" }, { "type": "function", "name": "computeMerkleInstant", "inputs": [ { "name": "campaignCreator", "type": "address", "internalType": "address" }, { "name": "campaignParams", "type": "tuple", "internalType": "struct MerkleInstant.ConstructorParams", "components": [ { "name": "campaignName", "type": "string", "internalType": "string" }, { "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" }, { "name": "claimType", "type": "uint8", "internalType": "enum ClaimType" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" }, { "name": "initialAdmin", "type": "address", "internalType": "address" }, { "name": "ipfsCID", "type": "string", "internalType": "string" }, { "name": "merkleRoot", "type": "bytes32", "internalType": "bytes32" }, { "name": "token", "type": "address", "internalType": "contract IERC20" } ] } ], "outputs": [{ "name": "merkleInstant", "type": "address", "internalType": "address" }], "stateMutability": "view" }, { "type": "function", "name": "createMerkleInstant", "inputs": [ { "name": "campaignParams", "type": "tuple", "internalType": "struct MerkleInstant.ConstructorParams", "components": [ { "name": "campaignName", "type": "string", "internalType": "string" }, { "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" }, { "name": "claimType", "type": "uint8", "internalType": "enum ClaimType" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" }, { "name": "initialAdmin", "type": "address", "internalType": "address" }, { "name": "ipfsCID", "type": "string", "internalType": "string" }, { "name": "merkleRoot", "type": "bytes32", "internalType": "bytes32" }, { "name": "token", "type": "address", "internalType": "contract IERC20" } ] }, { "name": "aggregateAmount", "type": "uint256", "internalType": "uint256" }, { "name": "recipientCount", "type": "uint256", "internalType": "uint256" } ], "outputs": [{ "name": "merkleInstant", "type": "address", "internalType": "contract ISablierMerkleInstant" }], "stateMutability": "nonpayable" }, { "type": "function", "name": "nativeToken", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "address" }], "stateMutability": "view" }, { "type": "function", "name": "setComptroller", "inputs": [{ "name": "newComptroller", "type": "address", "internalType": "contract ISablierComptroller" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "setNativeToken", "inputs": [{ "name": "newNativeToken", "type": "address", "internalType": "address" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "transferFeesToComptroller", "inputs": [], "outputs": [], "stateMutability": "nonpayable" }, { "type": "event", "name": "CreateMerkleInstant", "inputs": [ { "name": "merkleInstant", "type": "address", "indexed": true, "internalType": "contract ISablierMerkleInstant" }, { "name": "campaignParams", "type": "tuple", "indexed": false, "internalType": "struct MerkleInstant.ConstructorParams", "components": [ { "name": "campaignName", "type": "string", "internalType": "string" }, { "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" }, { "name": "claimType", "type": "uint8", "internalType": "enum ClaimType" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" }, { "name": "initialAdmin", "type": "address", "internalType": "address" }, { "name": "ipfsCID", "type": "string", "internalType": "string" }, { "name": "merkleRoot", "type": "bytes32", "internalType": "bytes32" }, { "name": "token", "type": "address", "internalType": "contract IERC20" } ] }, { "name": "aggregateAmount", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "recipientCount", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "comptroller", "type": "address", "indexed": false, "internalType": "address" }, { "name": "minFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "SetComptroller", "inputs": [ { "name": "oldComptroller", "type": "address", "indexed": false, "internalType": "contract ISablierComptroller" }, { "name": "newComptroller", "type": "address", "indexed": false, "internalType": "contract ISablierComptroller" } ], "anonymous": false }, { "type": "event", "name": "SetNativeToken", "inputs": [ { "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" }, { "name": "nativeToken", "type": "address", "indexed": false, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "TransferFeesToComptroller", "inputs": [ { "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" }, { "name": "feeAmount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false } ], "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, "methodIdentifiers": { "comptroller()": "5fe3b567", "computeMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address))": "bf4aa528", "createMerkleInstant((string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256)": "106dc4a0", "nativeToken()": "e1758bd8", "setComptroller(address)": "8bad38dd", "setNativeToken(address)": "6da1e102", "transferFeesToComptroller()": "78f82ce7" }, "rawMetadata": "{\"compiler\":{\"version\":\"0.8.29+commit.ab55807c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract ISablierMerkleInstant\",\"name\":\"merkleInstant\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"campaignName\",\"type\":\"string\"},{\"internalType\":\"uint40\",\"name\":\"campaignStartTime\",\"type\":\"uint40\"},{\"internalType\":\"enum ClaimType\",\"name\":\"claimType\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"ipfsCID\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct MerkleInstant.ConstructorParams\",\"name\":\"campaignParams\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"recipientCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minFeeUSD\",\"type\":\"uint256\"}],\"name\":\"CreateMerkleInstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISablierComptroller\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ISablierComptroller\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"SetComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"}],\"name\":\"SetNativeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"TransferFeesToComptroller\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ISablierComptroller\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"campaignCreator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"campaignName\",\"type\":\"string\"},{\"internalType\":\"uint40\",\"name\":\"campaignStartTime\",\"type\":\"uint40\"},{\"internalType\":\"enum ClaimType\",\"name\":\"claimType\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"ipfsCID\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct MerkleInstant.ConstructorParams\",\"name\":\"campaignParams\",\"type\":\"tuple\"}],\"name\":\"computeMerkleInstant\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"merkleInstant\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"campaignName\",\"type\":\"string\"},{\"internalType\":\"uint40\",\"name\":\"campaignStartTime\",\"type\":\"uint40\"},{\"internalType\":\"enum ClaimType\",\"name\":\"claimType\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"ipfsCID\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct MerkleInstant.ConstructorParams\",\"name\":\"campaignParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"aggregateAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientCount\",\"type\":\"uint256\"}],\"name\":\"createMerkleInstant\",\"outputs\":[{\"internalType\":\"contract ISablierMerkleInstant\",\"name\":\"merkleInstant\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISablierComptroller\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"setComptroller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newNativeToken\",\"type\":\"address\"}],\"name\":\"setNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferFeesToComptroller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See the documentation in {ISablierMerkleInstant}.\",\"kind\":\"dev\",\"methods\":{\"computeMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address))\":{\"details\":\"Reverts if the requirements from {createMerkleInstant} are not met.\"},\"createMerkleInstant((string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256)\":{\"details\":\"Emits a {CreateMerkleInstant} event. Notes: - The contract is created with CREATE2. - The campaign's fee will be set to the min USD fee unless a custom fee is set for `msg.sender`. - A value of zero for `campaignParams.expiration` means the campaign does not expire. Requirements: - `campaignParams.token` must not be the forbidden native token.\",\"params\":{\"aggregateAmount\":\"The total amount of ERC-20 tokens to be distributed to all recipients.\",\"campaignParams\":\"Struct encapsulating the {SablierMerkleInstant} parameters.\",\"recipientCount\":\"The total number of recipient addresses eligible for the airdrop.\"},\"returns\":{\"merkleInstant\":\"The address of the newly created MerkleInstant contract.\"}},\"nativeToken()\":{\"details\":\"The native tokens on some chains have a dual interface as ERC-20. For example, on Polygon the $POL token is the native token and has an ERC-20 version at 0x0000000000000000000000000000000000001010. This means that `address(this).balance` returns the same value as `balanceOf(address(this))`. To avoid any unintended behavior, these tokens cannot be used in Sablier. As an alternative, users can use the Wrapped version of the token, i.e. WMATIC, which is a standard ERC-20 token.\"},\"setComptroller(address)\":{\"details\":\"Emits a {SetComptroller} event. Requirements: - `msg.sender` must be the current comptroller. - The new comptroller must return `true` from {supportsInterface} with the comptroller's minimal interface ID which is defined as the XOR of the following function selectors: 1. {calculateMinFeeWeiFor} 2. {convertUSDFeeToWei} 3. {execute} 4. {getMinFeeUSDFor}\",\"params\":{\"newComptroller\":\"The address of the new comptroller contract.\"}},\"setNativeToken(address)\":{\"details\":\"For more information, see the documentation for {nativeToken}. Emits a {SetNativeToken} event. Requirements: - `msg.sender` must be the comptroller. - `newNativeToken` must not be zero address. - The native token must not be already set.\",\"params\":{\"newNativeToken\":\"The address of the native token.\"}},\"transferFeesToComptroller()\":{\"details\":\"Emits a {TransferFeesToComptroller} event.\"}},\"title\":\"ISablierFactoryMerkleInstant\",\"version\":1},\"userdoc\":{\"events\":{\"CreateMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256,address,uint256)\":{\"notice\":\"Emitted when a {SablierMerkleInstant} campaign is created.\"},\"SetComptroller(address,address)\":{\"notice\":\"Emitted when the comptroller address is set by the admin.\"},\"SetNativeToken(address,address)\":{\"notice\":\"Emitted when the native token address is set by the comptroller.\"},\"TransferFeesToComptroller(address,uint256)\":{\"notice\":\"Emitted when the fees are transferred to the comptroller contract.\"}},\"kind\":\"user\",\"methods\":{\"comptroller()\":{\"notice\":\"Retrieves the address of the comptroller contract.\"},\"computeMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address))\":{\"notice\":\"Computes the deterministic address where {SablierMerkleInstant} campaign will be deployed.\"},\"createMerkleInstant((string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256)\":{\"notice\":\"Creates a new MerkleInstant campaign for instant distribution of tokens.\"},\"nativeToken()\":{\"notice\":\"Retrieves the address of the ERC-20 interface of the native token, if it exists.\"},\"setComptroller(address)\":{\"notice\":\"Sets the comptroller to a new address.\"},\"setNativeToken(address)\":{\"notice\":\"Sets the native token address. Once set, it cannot be changed.\"},\"transferFeesToComptroller()\":{\"notice\":\"Transfers the fees to the comptroller contract.\"}},\"notice\":\"A factory that deploys MerkleInstant campaign contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISablierFactoryMerkleInstant.sol\":\"ISablierFactoryMerkleInstant\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":60000},\"remappings\":[\":@arbitrum/=node_modules/@arbitrum/\",\":@chainlink/=node_modules/@chainlink/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@offchainlabs/=node_modules/@offchainlabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/=node_modules/@prb/\",\":@sablier/=node_modules/@sablier/\",\":@scroll-tech/=node_modules/@scroll-tech/\",\":@zksync/=node_modules/@zksync/\",\":forge-std/=node_modules/forge-std/\",\":murky/=node_modules/murky/\",\":openzeppelin-contracts/=node_modules/murky/lib/openzeppelin-contracts/\",\":solady/=node_modules/solady/\",\":solarray/=node_modules/solarray/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IAdminable.sol\":{\"keccak256\":\"0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126\",\"dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IComptrollerable.sol\":{\"keccak256\":\"0xdbc32762b87590be38095a84789906fa7a23fd2c2c112859504549ef3be17522\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://14ac13726bb7435ce310dd437a9b58852ca0c35640949e898c803a33a30dee8b\",\"dweb:/ipfs/QmeeKPApvBHbUF3S98qCnB26Aw67KTQF2GFyGQZCxykyMW\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IRoleAdminable.sol\":{\"keccak256\":\"0x391cb4bd4bae01e3efdb84f63635644ed6329b72e8a5105ad53833551e8ba825\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ccca9da1c044c15cf0b647a4572c05f5d498fb18b3685a85a8836f7110cb1bc4\",\"dweb:/ipfs/QmfAKHqvgKQUgpC6VomTjTkc1tDnsbVJD5bLn8wL8KuTFV\"]},\"node_modules/@sablier/evm-utils/src/interfaces/ISablierComptroller.sol\":{\"keccak256\":\"0x5c52e70a6c083611d4b5518d17d025f70d322ee2c61d81f20f3fe50f4bd824ba\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5c07b2076065f1c65a59176ada3459be53f78e59a2055d9ae92b226edafa484c\",\"dweb:/ipfs/QmXYRDkBSWUBza1pi439ErzeLoaLUT8Zvj2yWcFZ5F1rgX\"]},\"src/interfaces/ISablierFactoryMerkleBase.sol\":{\"keccak256\":\"0x9f92d9fb4758379e1649a35eec35c0e9b5d1403cac8a9c20403a33ac0de004b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b32cd3982504e7584adae3ca25b927c6fd11d19029f6d5f049a11145aea7dee7\",\"dweb:/ipfs/QmezYhSdiU6ciuosTqMe3kDTFpX8xttgkjayF37j7tUQni\"]},\"src/interfaces/ISablierFactoryMerkleInstant.sol\":{\"keccak256\":\"0x5aea8d210d73603eb1beafd0ff547a9b73aad121938219bab7861ea685fb901b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2a150d059405bf5dcbb5ed2e2285d9a46c9acc34fcb191c3770d8befd13dff31\",\"dweb:/ipfs/QmTqG6e5DhFrMP36uaBqGgJnnmMwJXBstRNnTUZ4B6kjpB\"]},\"src/interfaces/ISablierMerkleBase.sol\":{\"keccak256\":\"0xfc4e9b4737765f3f66fb81390154aaff3f21ee63fd21bed441baf553ac090993\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://189aab3a9ddf0e72425cb3b6420129ce971da916967a920c3132e328e546abbb\",\"dweb:/ipfs/QmQZaV1yvBs6MBf5jzgboTYztsVLMi5q3L4JVowyn6Yhrp\"]},\"src/interfaces/ISablierMerkleInstant.sol\":{\"keccak256\":\"0x03ae076658b6b4243b3dc3d68bc8e187a369deb01ec5510e9a2b7b3c96647439\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6b19c1699eb6ced4040bd35b1544097788e2cfe35c1c57e4f14d86b05ed92d1\",\"dweb:/ipfs/Qmf8ciPgHLbXJhGTbyChQfxJyAs1yEGgdRQToCFqpov4eq\"]},\"src/interfaces/ISablierMerkleSignature.sol\":{\"keccak256\":\"0x2e6e8cc3b951ddc10344883c08d662161efbd5fb5bc4672f77b51aa7ed8bf87d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dd48f5c162987c93e45f7f942b7f23817d81ef588bb776816a207639c91e6e4e\",\"dweb:/ipfs/QmQHyHxPG6YVt5BVMYKfb5YWX6cQdp5yMVHoP1u2U3E1ut\"]},\"src/types/MerkleBase.sol\":{\"keccak256\":\"0x33004c31ccf302e5da76dbb8476816db31c2c0984fb9c928c45528bbfdef6397\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://55b26d1a6beda8cb76043d2fde56445910ae3e88e8ab20d2c48678e4456beca3\",\"dweb:/ipfs/QmYrMXbpPcjzJen93uFXiBws7fauseuXZcQ9fpbsNbaGN8\"]},\"src/types/MerkleInstant.sol\":{\"keccak256\":\"0x737782a3b4467d2a69e291a9b77e7977fc323f1124f848e4111bae338b945bf3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ffc466a43a98214260873d82a28039cf17268056aa86cc62f4ec767bcb050067\",\"dweb:/ipfs/QmWzXMMsiag1y2mXvYwyorzRx8xtTnzFsk4fJutREo9Yo4\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.29+commit.ab55807c" }, "language": "Solidity", "output": { "abi": [ { "inputs": [ { "internalType": "contract ISablierMerkleInstant", "name": "merkleInstant", "type": "address", "indexed": true }, { "internalType": "struct MerkleInstant.ConstructorParams", "name": "campaignParams", "type": "tuple", "components": [ { "internalType": "string", "name": "campaignName", "type": "string" }, { "internalType": "uint40", "name": "campaignStartTime", "type": "uint40" }, { "internalType": "enum ClaimType", "name": "claimType", "type": "uint8" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" }, { "internalType": "address", "name": "initialAdmin", "type": "address" }, { "internalType": "string", "name": "ipfsCID", "type": "string" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "indexed": false }, { "internalType": "uint256", "name": "aggregateAmount", "type": "uint256", "indexed": false }, { "internalType": "uint256", "name": "recipientCount", "type": "uint256", "indexed": false }, { "internalType": "address", "name": "comptroller", "type": "address", "indexed": false }, { "internalType": "uint256", "name": "minFeeUSD", "type": "uint256", "indexed": false } ], "type": "event", "name": "CreateMerkleInstant", "anonymous": false }, { "inputs": [ { "internalType": "contract ISablierComptroller", "name": "oldComptroller", "type": "address", "indexed": false }, { "internalType": "contract ISablierComptroller", "name": "newComptroller", "type": "address", "indexed": false } ], "type": "event", "name": "SetComptroller", "anonymous": false }, { "inputs": [ { "internalType": "address", "name": "comptroller", "type": "address", "indexed": true }, { "internalType": "address", "name": "nativeToken", "type": "address", "indexed": false } ], "type": "event", "name": "SetNativeToken", "anonymous": false }, { "inputs": [ { "internalType": "address", "name": "comptroller", "type": "address", "indexed": true }, { "internalType": "uint256", "name": "feeAmount", "type": "uint256", "indexed": false } ], "type": "event", "name": "TransferFeesToComptroller", "anonymous": false }, { "inputs": [], "stateMutability": "view", "type": "function", "name": "comptroller", "outputs": [{ "internalType": "contract ISablierComptroller", "name": "", "type": "address" }] }, { "inputs": [ { "internalType": "address", "name": "campaignCreator", "type": "address" }, { "internalType": "struct MerkleInstant.ConstructorParams", "name": "campaignParams", "type": "tuple", "components": [ { "internalType": "string", "name": "campaignName", "type": "string" }, { "internalType": "uint40", "name": "campaignStartTime", "type": "uint40" }, { "internalType": "enum ClaimType", "name": "claimType", "type": "uint8" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" }, { "internalType": "address", "name": "initialAdmin", "type": "address" }, { "internalType": "string", "name": "ipfsCID", "type": "string" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "contract IERC20", "name": "token", "type": "address" } ] } ], "stateMutability": "view", "type": "function", "name": "computeMerkleInstant", "outputs": [{ "internalType": "address", "name": "merkleInstant", "type": "address" }] }, { "inputs": [ { "internalType": "struct MerkleInstant.ConstructorParams", "name": "campaignParams", "type": "tuple", "components": [ { "internalType": "string", "name": "campaignName", "type": "string" }, { "internalType": "uint40", "name": "campaignStartTime", "type": "uint40" }, { "internalType": "enum ClaimType", "name": "claimType", "type": "uint8" }, { "internalType": "uint40", "name": "expiration", "type": "uint40" }, { "internalType": "address", "name": "initialAdmin", "type": "address" }, { "internalType": "string", "name": "ipfsCID", "type": "string" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "contract IERC20", "name": "token", "type": "address" } ] }, { "internalType": "uint256", "name": "aggregateAmount", "type": "uint256" }, { "internalType": "uint256", "name": "recipientCount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function", "name": "createMerkleInstant", "outputs": [{ "internalType": "contract ISablierMerkleInstant", "name": "merkleInstant", "type": "address" }] }, { "inputs": [], "stateMutability": "view", "type": "function", "name": "nativeToken", "outputs": [{ "internalType": "address", "name": "", "type": "address" }] }, { "inputs": [{ "internalType": "contract ISablierComptroller", "name": "newComptroller", "type": "address" }], "stateMutability": "nonpayable", "type": "function", "name": "setComptroller" }, { "inputs": [{ "internalType": "address", "name": "newNativeToken", "type": "address" }], "stateMutability": "nonpayable", "type": "function", "name": "setNativeToken" }, { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "transferFeesToComptroller" } ], "devdoc": { "kind": "dev", "methods": { "computeMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address))": { "details": "Reverts if the requirements from {createMerkleInstant} are not met." }, "createMerkleInstant((string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256)": { "details": "Emits a {CreateMerkleInstant} event. Notes: - The contract is created with CREATE2. - The campaign's fee will be set to the min USD fee unless a custom fee is set for `msg.sender`. - A value of zero for `campaignParams.expiration` means the campaign does not expire. Requirements: - `campaignParams.token` must not be the forbidden native token.", "params": { "aggregateAmount": "The total amount of ERC-20 tokens to be distributed to all recipients.", "campaignParams": "Struct encapsulating the {SablierMerkleInstant} parameters.", "recipientCount": "The total number of recipient addresses eligible for the airdrop." }, "returns": { "merkleInstant": "The address of the newly created MerkleInstant contract." } }, "nativeToken()": { "details": "The native tokens on some chains have a dual interface as ERC-20. For example, on Polygon the $POL token is the native token and has an ERC-20 version at 0x0000000000000000000000000000000000001010. This means that `address(this).balance` returns the same value as `balanceOf(address(this))`. To avoid any unintended behavior, these tokens cannot be used in Sablier. As an alternative, users can use the Wrapped version of the token, i.e. WMATIC, which is a standard ERC-20 token." }, "setComptroller(address)": { "details": "Emits a {SetComptroller} event. Requirements: - `msg.sender` must be the current comptroller. - The new comptroller must return `true` from {supportsInterface} with the comptroller's minimal interface ID which is defined as the XOR of the following function selectors: 1. {calculateMinFeeWeiFor} 2. {convertUSDFeeToWei} 3. {execute} 4. {getMinFeeUSDFor}", "params": { "newComptroller": "The address of the new comptroller contract." } }, "setNativeToken(address)": { "details": "For more information, see the documentation for {nativeToken}. Emits a {SetNativeToken} event. Requirements: - `msg.sender` must be the comptroller. - `newNativeToken` must not be zero address. - The native token must not be already set.", "params": { "newNativeToken": "The address of the native token." } }, "transferFeesToComptroller()": { "details": "Emits a {TransferFeesToComptroller} event." } }, "version": 1 }, "userdoc": { "kind": "user", "methods": { "comptroller()": { "notice": "Retrieves the address of the comptroller contract." }, "computeMerkleInstant(address,(string,uint40,uint8,uint40,address,string,bytes32,address))": { "notice": "Computes the deterministic address where {SablierMerkleInstant} campaign will be deployed." }, "createMerkleInstant((string,uint40,uint8,uint40,address,string,bytes32,address),uint256,uint256)": { "notice": "Creates a new MerkleInstant campaign for instant distribution of tokens." }, "nativeToken()": { "notice": "Retrieves the address of the ERC-20 interface of the native token, if it exists." }, "setComptroller(address)": { "notice": "Sets the comptroller to a new address." }, "setNativeToken(address)": { "notice": "Sets the native token address. Once set, it cannot be changed." }, "transferFeesToComptroller()": { "notice": "Transfers the fees to the comptroller contract." } }, "version": 1 } }, "settings": { "remappings": [ "@arbitrum/=node_modules/@arbitrum/", "@chainlink/=node_modules/@chainlink/", "@eth-optimism/=node_modules/@eth-optimism/", "@offchainlabs/=node_modules/@offchainlabs/", "@openzeppelin/=node_modules/@openzeppelin/", "@prb/=node_modules/@prb/", "@sablier/=node_modules/@sablier/", "@scroll-tech/=node_modules/@scroll-tech/", "@zksync/=node_modules/@zksync/", "forge-std/=node_modules/forge-std/", "murky/=node_modules/murky/", "openzeppelin-contracts/=node_modules/murky/lib/openzeppelin-contracts/", "solady/=node_modules/solady/", "solarray/=node_modules/solarray/" ], "optimizer": { "enabled": true, "runs": 60000 }, "metadata": { "bytecodeHash": "ipfs" }, "compilationTarget": { "src/interfaces/ISablierFactoryMerkleInstant.sol": "ISablierFactoryMerkleInstant" }, "evmVersion": "shanghai", "libraries": {}, "viaIR": true }, "sources": { "node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": { "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d", "urls": [ "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196", "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA" ], "license": "MIT" }, "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", "urls": [ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" ], "license": "MIT" }, "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", "urls": [ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" ], "license": "MIT" }, "node_modules/@sablier/evm-utils/src/interfaces/IAdminable.sol": { "keccak256": "0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26", "urls": [ "bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126", "dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4" ], "license": "GPL-3.0-or-later" }, "node_modules/@sablier/evm-utils/src/interfaces/IComptrollerable.sol": { "keccak256": "0xdbc32762b87590be38095a84789906fa7a23fd2c2c112859504549ef3be17522", "urls": [ "bzz-raw://14ac13726bb7435ce310dd437a9b58852ca0c35640949e898c803a33a30dee8b", "dweb:/ipfs/QmeeKPApvBHbUF3S98qCnB26Aw67KTQF2GFyGQZCxykyMW" ], "license": "GPL-3.0-or-later" }, "node_modules/@sablier/evm-utils/src/interfaces/IRoleAdminable.sol": { "keccak256": "0x391cb4bd4bae01e3efdb84f63635644ed6329b72e8a5105ad53833551e8ba825", "urls": [ "bzz-raw://ccca9da1c044c15cf0b647a4572c05f5d498fb18b3685a85a8836f7110cb1bc4", "dweb:/ipfs/QmfAKHqvgKQUgpC6VomTjTkc1tDnsbVJD5bLn8wL8KuTFV" ], "license": "GPL-3.0-or-later" }, "node_modules/@sablier/evm-utils/src/interfaces/ISablierComptroller.sol": { "keccak256": "0x5c52e70a6c083611d4b5518d17d025f70d322ee2c61d81f20f3fe50f4bd824ba", "urls": [ "bzz-raw://5c07b2076065f1c65a59176ada3459be53f78e59a2055d9ae92b226edafa484c", "dweb:/ipfs/QmXYRDkBSWUBza1pi439ErzeLoaLUT8Zvj2yWcFZ5F1rgX" ], "license": "GPL-3.0-or-later" }, "src/interfaces/ISablierFactoryMerkleBase.sol": { "keccak256": "0x9f92d9fb4758379e1649a35eec35c0e9b5d1403cac8a9c20403a33ac0de004b8", "urls": [ "bzz-raw://b32cd3982504e7584adae3ca25b927c6fd11d19029f6d5f049a11145aea7dee7", "dweb:/ipfs/QmezYhSdiU6ciuosTqMe3kDTFpX8xttgkjayF37j7tUQni" ], "license": "GPL-3.0-or-later" }, "src/interfaces/ISablierFactoryMerkleInstant.sol": { "keccak256": "0x5aea8d210d73603eb1beafd0ff547a9b73aad121938219bab7861ea685fb901b", "urls": [ "bzz-raw://2a150d059405bf5dcbb5ed2e2285d9a46c9acc34fcb191c3770d8befd13dff31", "dweb:/ipfs/QmTqG6e5DhFrMP36uaBqGgJnnmMwJXBstRNnTUZ4B6kjpB" ], "license": "GPL-3.0-or-later" }, "src/interfaces/ISablierMerkleBase.sol": { "keccak256": "0xfc4e9b4737765f3f66fb81390154aaff3f21ee63fd21bed441baf553ac090993", "urls": [ "bzz-raw://189aab3a9ddf0e72425cb3b6420129ce971da916967a920c3132e328e546abbb", "dweb:/ipfs/QmQZaV1yvBs6MBf5jzgboTYztsVLMi5q3L4JVowyn6Yhrp" ], "license": "GPL-3.0-or-later" }, "src/interfaces/ISablierMerkleInstant.sol": { "keccak256": "0x03ae076658b6b4243b3dc3d68bc8e187a369deb01ec5510e9a2b7b3c96647439", "urls": [ "bzz-raw://b6b19c1699eb6ced4040bd35b1544097788e2cfe35c1c57e4f14d86b05ed92d1", "dweb:/ipfs/Qmf8ciPgHLbXJhGTbyChQfxJyAs1yEGgdRQToCFqpov4eq" ], "license": "GPL-3.0-or-later" }, "src/interfaces/ISablierMerkleSignature.sol": { "keccak256": "0x2e6e8cc3b951ddc10344883c08d662161efbd5fb5bc4672f77b51aa7ed8bf87d", "urls": [ "bzz-raw://dd48f5c162987c93e45f7f942b7f23817d81ef588bb776816a207639c91e6e4e", "dweb:/ipfs/QmQHyHxPG6YVt5BVMYKfb5YWX6cQdp5yMVHoP1u2U3E1ut" ], "license": "GPL-3.0-or-later" }, "src/types/MerkleBase.sol": { "keccak256": "0x33004c31ccf302e5da76dbb8476816db31c2c0984fb9c928c45528bbfdef6397", "urls": [ "bzz-raw://55b26d1a6beda8cb76043d2fde56445910ae3e88e8ab20d2c48678e4456beca3", "dweb:/ipfs/QmYrMXbpPcjzJen93uFXiBws7fauseuXZcQ9fpbsNbaGN8" ], "license": "GPL-3.0-or-later" }, "src/types/MerkleInstant.sol": { "keccak256": "0x737782a3b4467d2a69e291a9b77e7977fc323f1124f848e4111bae338b945bf3", "urls": [ "bzz-raw://ffc466a43a98214260873d82a28039cf17268056aa86cc62f4ec767bcb050067", "dweb:/ipfs/QmWzXMMsiag1y2mXvYwyorzRx8xtTnzFsk4fJutREo9Yo4" ], "license": "GPL-3.0-or-later" } }, "version": 1 }, "id": 117 }