@sablier/airdrops
Version:
EVM smart contracts of the Sablier Airdrops protocol
631 lines • 59.6 kB
JSON
{
"abi": [
{
"type": "function",
"name": "CAMPAIGN_START_TIME",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "CLAIM_TYPE",
"inputs": [],
"outputs": [{ "name": "", "type": "uint8", "internalType": "enum ClaimType" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "COMPTROLLER",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "EXPIRATION",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "IS_SABLIER_MERKLE",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "MERKLE_ROOT",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "TOKEN",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "contract IERC20" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "admin",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "attestor",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "calculateMinFeeWei",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "campaignName",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "claim",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "recipient", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimTo",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimViaAttestation",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "expireAt", "type": "uint40", "internalType": "uint40" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" },
{ "name": "attestation", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimViaSig",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "recipient", "type": "address", "internalType": "address" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "validFrom", "type": "uint40", "internalType": "uint40" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" },
{ "name": "signature", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "clawback",
"inputs": [
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "domainSeparator",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "firstClaimTime",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "hasClaimed",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "hasExpired",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "ipfsCID",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "lowerMinFeeUSD",
"inputs": [{ "name": "newMinFeeUSD", "type": "uint256", "internalType": "uint256" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "minFeeUSD",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "setAttestor",
"inputs": [{ "name": "newAttestor", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "sponsor",
"inputs": [
{ "name": "token", "type": "address", "internalType": "contract IERC20" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "biller", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferAdmin",
"inputs": [{ "name": "newAdmin", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "ClaimInstant",
"inputs": [
{ "name": "index", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" },
{ "name": "to", "type": "address", "indexed": false, "internalType": "address" },
{ "name": "viaSig", "type": "bool", "indexed": false, "internalType": "bool" }
],
"anonymous": false
},
{
"type": "event",
"name": "Clawback",
"inputs": [
{ "name": "admin", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "to", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }
],
"anonymous": false
},
{
"type": "event",
"name": "LowerMinFeeUSD",
"inputs": [
{ "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "previousMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "event",
"name": "SetAttestor",
"inputs": [
{ "name": "caller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "previousAttestor", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newAttestor", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "Sponsor",
"inputs": [
{ "name": "caller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "token", "type": "address", "indexed": true, "internalType": "contract IERC20" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" },
{ "name": "biller", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "TransferAdmin",
"inputs": [
{ "name": "oldAdmin", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newAdmin", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
}
],
"bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
"deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
"methodIdentifiers": {
"CAMPAIGN_START_TIME()": "7ca3944d",
"CLAIM_TYPE()": "eb8cd775",
"COMPTROLLER()": "5f82c67e",
"EXPIRATION()": "bb4b5734",
"IS_SABLIER_MERKLE()": "7423649b",
"MERKLE_ROOT()": "51e75e8b",
"TOKEN()": "82bfefc8",
"admin()": "f851a440",
"attestor()": "cada25c2",
"calculateMinFeeWei()": "3a12a5bc",
"campaignName()": "0724fda9",
"claim(uint256,address,uint128,bytes32[])": "3f31ae3f",
"claimTo(uint256,address,uint128,bytes32[])": "0854a79c",
"claimViaAttestation(uint256,address,uint128,uint40,bytes32[],bytes)": "e74f822d",
"claimViaSig(uint256,address,address,uint128,uint40,bytes32[],bytes)": "20743583",
"clawback(address,uint128)": "1686c909",
"domainSeparator()": "f698da25",
"firstClaimTime()": "82d72f7f",
"hasClaimed(uint256)": "ce516507",
"hasExpired()": "90e64d13",
"ipfsCID()": "49fc73dd",
"lowerMinFeeUSD(uint256)": "8ec68869",
"minFeeUSD()": "4e0bb8cc",
"setAttestor(address)": "f5770b1f",
"sponsor(address,uint128,address)": "2481a13a",
"transferAdmin(address)": "75829def"
},
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.29+commit.ab55807c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"viaSig\",\"type\":\"bool\"}],\"name\":\"ClaimInstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"Clawback\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMinFeeUSD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousMinFeeUSD\",\"type\":\"uint256\"}],\"name\":\"LowerMinFeeUSD\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousAttestor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAttestor\",\"type\":\"address\"}],\"name\":\"SetAttestor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"biller\",\"type\":\"address\"}],\"name\":\"Sponsor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CAMPAIGN_START_TIME\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CLAIM_TYPE\",\"outputs\":[{\"internalType\":\"enum ClaimType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COMPTROLLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXPIRATION\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_SABLIER_MERKLE\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE_ROOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"attestor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calculateMinFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"campaignName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProof\",\"type\":\"bytes32[]\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProof\",\"type\":\"bytes32[]\"}],\"name\":\"claimTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"expireAt\",\"type\":\"uint40\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"attestation\",\"type\":\"bytes\"}],\"name\":\"claimViaAttestation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"validFrom\",\"type\":\"uint40\"},{\"internalType\":\"bytes32[]\",\"name\":\"merkleProof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"claimViaSig\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"clawback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"firstClaimTime\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"hasClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasExpired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ipfsCID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMinFeeUSD\",\"type\":\"uint256\"}],\"name\":\"lowerMinFeeUSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minFeeUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAttestor\",\"type\":\"address\"}],\"name\":\"setAttestor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"biller\",\"type\":\"address\"}],\"name\":\"sponsor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"TransferAdmin(address,address)\":{\"params\":{\"newAdmin\":\"The address of the new admin.\",\"oldAdmin\":\"The address of the old admin.\"}}},\"kind\":\"dev\",\"methods\":{\"CAMPAIGN_START_TIME()\":{\"details\":\"This is an immutable state variable.\"},\"CLAIM_TYPE()\":{\"details\":\"This is an immutable state variable.\"},\"EXPIRATION()\":{\"details\":\"This is an immutable state variable.\"},\"IS_SABLIER_MERKLE()\":{\"details\":\"This is a constant state variable.\"},\"MERKLE_ROOT()\":{\"details\":\"This is an immutable state variable.\"},\"TOKEN()\":{\"details\":\"This is an immutable state variable.\"},\"claim(uint256,address,uint128,bytes32[])\":{\"details\":\"It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - The current time must be greater than or equal to the campaign start time. - The campaign must not have expired. - `msg.value` must not be less than the value returned by {COMPTROLLER.calculateMinFeeWei}. - The `index` must not be claimed already. - The Merkle proof must be valid.\",\"params\":{\"amount\":\"The amount of ERC-20 tokens allocated to the recipient.\",\"index\":\"The index of the recipient in the Merkle tree.\",\"merkleProof\":\"The proof of inclusion in the Merkle tree.\",\"recipient\":\"The address of the airdrop recipient.\"}},\"claimTo(uint256,address,uint128,bytes32[])\":{\"details\":\"It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - `msg.sender` must be the airdrop recipient. - The `to` must not be the zero address. - Refer to the requirements in {claim}.\",\"params\":{\"amount\":\"The amount of ERC-20 tokens allocated to the `msg.sender`.\",\"index\":\"The index of the `msg.sender` in the Merkle tree.\",\"merkleProof\":\"The proof of inclusion in the Merkle tree.\",\"to\":\"The address receiving the ERC-20 tokens on behalf of `msg.sender`.\"}},\"claimViaAttestation(uint256,address,uint128,uint40,bytes32[],bytes)\":{\"details\":\"It emits a {ClaimInstant} event. Notes: - The attestation must be an EIP-712 signature from the attestor. - See the example in the {claimViaSig} function. - If the attestor is not set in the campaign, the attestor from the comptroller is used. Requirements: - `msg.sender` must be the airdrop recipient. - `CLAIM_TYPE` must be `ATTEST`. - The `to` must not be the zero address. - The attestor must not be the zero address. - The `expireAt` timestamp must not be in the past. - The attestation signature must be valid. - Refer to the requirements in {claim}.\",\"params\":{\"amount\":\"The amount of ERC-20 tokens allocated to the `msg.sender`.\",\"attestation\":\"The EIP-712 signature from the attestor.\",\"expireAt\":\"The timestamp after which the attestation signature is no longer valid.\",\"index\":\"The index of the `msg.sender` in the Merkle tree.\",\"merkleProof\":\"The proof of inclusion in the Merkle tree.\",\"to\":\"The address receiving the ERC-20 tokens on behalf of `msg.sender`.\"}},\"claimViaSig(uint256,address,address,uint128,uint40,bytes32[],bytes)\":{\"details\":\"It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - If `recipient` is an EOA, it must match the recovered signer. - If `recipient` is a contract, it must implement the IERC-1271 interface. - The `to` must not be the zero address. - The `validFrom` must be less than or equal to the current block timestamp. - Refer to the requirements in {claim}. Below is the example of typed data to be signed by the airdrop recipient, referenced from https://docs.metamask.io/wallet/how-to/sign-data/#example. ```json types: { EIP712Domain: [ { name: \\\"name\\\", type: \\\"string\\\" }, { name: \\\"chainId\\\", type: \\\"uint256\\\" }, { name: \\\"verifyingContract\\\", type: \\\"address\\\" }, ], Claim: [ { name: \\\"index\\\", type: \\\"uint256\\\" }, { name: \\\"recipient\\\", type: \\\"address\\\" }, { name: \\\"to\\\", type: \\\"address\\\" }, { name: \\\"amount\\\", type: \\\"uint128\\\" }, { name: \\\"validFrom\\\", type: \\\"uint40\\\" }, ], }, domain: { name: \\\"Sablier Airdrops Protocol\\\", chainId: 1, // Chain on which the contract is deployed verifyingContract: \\\"0xTheAddressOfThisContract\\\", // The address of this contract }, primaryType: \\\"Claim\\\", message: { index: 2, // The index of the signer in the Merkle tree recipient: \\\"0xTheAddressOfTheRecipient\\\", // The address of the airdrop recipient to: \\\"0xTheAddressReceivingTheTokens\\\", // The address where recipient wants to transfer the tokens amount: \\\"1000000000000000000000\\\", // The amount of tokens allocated to the recipient validFrom: 1752425637 // The timestamp from which the claim signature is valid }, ```\",\"params\":{\"amount\":\"The amount of ERC-20 tokens allocated to the recipient.\",\"index\":\"The index of the recipient in the Merkle tree.\",\"merkleProof\":\"The proof of inclusion in the Merkle tree.\",\"recipient\":\"The address of the airdrop recipient who is providing the signature.\",\"signature\":\"The EIP-712 or EIP-1271 signature from the airdrop recipient.\",\"to\":\"The address receiving the ERC-20 tokens on behalf of the recipient.\",\"validFrom\":\"The timestamp from which the claim signature is valid.\"}},\"clawback(address,uint128)\":{\"details\":\"Emits a {Clawback} event. Requirements: - `msg.sender` must be the admin. - No claim must be made, OR The current timestamp must not exceed 7 days after the first claim, OR The campaign must be expired.\",\"params\":{\"amount\":\"The amount of tokens to claw back.\",\"to\":\"The address to receive the tokens.\"}},\"hasClaimed(uint256)\":{\"details\":\"Uses a bitmap to save gas.\",\"params\":{\"index\":\"The index of the recipient to check.\"}},\"ipfsCID()\":{\"details\":\"An empty value may break certain UI features that depend upon the IPFS CID.\"},\"lowerMinFeeUSD(uint256)\":{\"details\":\"Emits a {LowerMinFeeUSD} event. Requirements: - `msg.sender` must be the comptroller. - The new fee must be less than the current {minFeeUSD}.\",\"params\":{\"newMinFeeUSD\":\"The new min USD fee to set, denominated in 8 decimals.\"}},\"minFeeUSD()\":{\"details\":\"The denomination is based on Chainlink's 8-decimal format for USD prices, where 1e8 is $1.\"},\"setAttestor(address)\":{\"details\":\"Emits a {SetAttestor} event. Requirements: - `msg.sender` must be either the comptroller or the campaign admin.\",\"params\":{\"newAttestor\":\"The new attestor address. If zero, the attestor from the comptroller will be used.\"}},\"sponsor(address,uint128,address)\":{\"details\":\"Emits a {Sponsor} event. Notes: - This function only makes the payment. The claim fees are updated only after the payment has been verified off-chain. - Refer to the Sablier website in order to sponsor with the correct token, otherwise the sponsorship may be ignored. Requirements: - `biller` must not be the zero address. - `amount` must be greater than zero. - `token` must not be the zero address and must be a valid ERC20 token. - `msg.sender` must have approved the contract to spend the tokens.\",\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"biller\":\"The address to receive the tokens.\",\"token\":\"The ERC-20 token to transfer.\"}},\"transferAdmin(address)\":{\"details\":\"Notes: - Does not revert if the admin is the same. - This function can potentially leave the contract without an admin, thereby removing any functionality that is only available to the admin. Requirements: - `msg.sender` must be the contract admin.\",\"params\":{\"newAdmin\":\"The address of the new admin.\"}}},\"title\":\"ISablierMerkleInstant\",\"version\":1},\"userdoc\":{\"events\":{\"ClaimInstant(uint256,address,uint128,address,bool)\":{\"notice\":\"Emitted when an airdrop is claimed on behalf of an eligible recipient.\"},\"Clawback(address,address,uint128)\":{\"notice\":\"Emitted when the admin claws back the unclaimed tokens.\"},\"LowerMinFeeUSD(address,uint256,uint256)\":{\"notice\":\"Emitted when the min USD fee is lowered by the comptroller.\"},\"SetAttestor(address,address,address)\":{\"notice\":\"Emitted when the address of the attestor is set in this contract.\"},\"Sponsor(address,address,uint128,address)\":{\"notice\":\"Emitted when campaign owner sponsors the claim fees for eligible recipients.\"},\"TransferAdmin(address,address)\":{\"notice\":\"Emitted when the admin is transferred.\"}},\"kind\":\"user\",\"methods\":{\"CAMPAIGN_START_TIME()\":{\"notice\":\"The timestamp at which campaign starts and claim begins.\"},\"CLAIM_TYPE()\":{\"notice\":\"Retrieves the claim type supported by the campaign.\"},\"COMPTROLLER()\":{\"notice\":\"Retrieves the address of the comptroller contract.\"},\"EXPIRATION()\":{\"notice\":\"The cut-off point for the campaign, as a Unix timestamp. A value of zero means there is no expiration.\"},\"IS_SABLIER_MERKLE()\":{\"notice\":\"Returns `true` indicating that this campaign contract is deployed using the Sablier Factory.\"},\"MERKLE_ROOT()\":{\"notice\":\"The root of the Merkle tree used to validate the proofs of inclusion.\"},\"TOKEN()\":{\"notice\":\"The ERC-20 token to distribute.\"},\"admin()\":{\"notice\":\"The address of the admin account or contract.\"},\"attestor()\":{\"notice\":\"Retrieves the attestor address used for creating attestation signatures.\"},\"calculateMinFeeWei()\":{\"notice\":\"Calculates the minimum fee in wei required to claim the airdrop.\"},\"campaignName()\":{\"notice\":\"Retrieves the name of the campaign.\"},\"claim(uint256,address,uint128,bytes32[])\":{\"notice\":\"Claim airdrop on behalf of eligible recipient and transfer it to the recipient address.\"},\"claimTo(uint256,address,uint128,bytes32[])\":{\"notice\":\"Claim airdrop and transfer the tokens to the `to` address.\"},\"claimViaAttestation(uint256,address,uint128,uint40,bytes32[],bytes)\":{\"notice\":\"Claim airdrop using an external attestation from a trusted attestor (e.g., KYC verifier).\"},\"claimViaSig(uint256,address,address,uint128,uint40,bytes32[],bytes)\":{\"notice\":\"Claim airdrop on behalf of eligible recipient using an EIP-712 or EIP-1271 signature, and transfer the tokens to the `to` address.\"},\"clawback(address,uint128)\":{\"notice\":\"Claws back the unclaimed tokens.\"},\"domainSeparator()\":{\"notice\":\"The domain separator, as required by EIP-712 and EIP-1271, used for signing claims to prevent replay attacks across different campaigns.\"},\"firstClaimTime()\":{\"notice\":\"Retrieves the timestamp when the first claim is made, and zero if no claim was made yet.\"},\"hasClaimed(uint256)\":{\"notice\":\"Returns a flag indicating whether a claim has been made for a given index.\"},\"hasExpired()\":{\"notice\":\"Returns a flag indicating whether the campaign has expired.\"},\"ipfsCID()\":{\"notice\":\"The content identifier for indexing the campaign on IPFS.\"},\"lowerMinFeeUSD(uint256)\":{\"notice\":\"Lowers the min USD fee.\"},\"minFeeUSD()\":{\"notice\":\"Retrieves the min USD fee required to claim the airdrop, denominated in 8 decimals.\"},\"setAttestor(address)\":{\"notice\":\"Sets the attestor address used for verifying attestation signatures.\"},\"sponsor(address,uint128,address)\":{\"notice\":\"Sponsors the claim fees for eligible recipients.\"},\"transferAdmin(address)\":{\"notice\":\"Transfers the contract admin to a new address.\"}},\"notice\":\"MerkleInstant enables an airdrop model where eligible users receive the tokens as soon as they claim.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISablierMerkleInstant.sol\":\"ISablierMerkleInstant\"},\"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/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@sablier/evm-utils/src/interfaces/IAdminable.sol\":{\"keccak256\":\"0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126\",\"dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4\"]},\"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\"]}},\"version\":1}",
"metadata": {
"compiler": { "version": "0.8.29+commit.ab55807c" },
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{ "internalType": "uint256", "name": "index", "type": "uint256", "indexed": false },
{ "internalType": "address", "name": "recipient", "type": "address", "indexed": true },
{ "internalType": "uint128", "name": "amount", "type": "uint128", "indexed": false },
{ "internalType": "address", "name": "to", "type": "address", "indexed": false },
{ "internalType": "bool", "name": "viaSig", "type": "bool", "indexed": false }
],
"type": "event",
"name": "ClaimInstant",
"anonymous": false
},
{
"inputs": [
{ "internalType": "address", "name": "admin", "type": "address", "indexed": true },
{ "internalType": "address", "name": "to", "type": "address", "indexed": true },
{ "internalType": "uint128", "name": "amount", "type": "uint128", "indexed": false }
],
"type": "event",
"name": "Clawback",
"anonymous": false
},
{
"inputs": [
{ "internalType": "address", "name": "comptroller", "type": "address", "indexed": true },
{ "internalType": "uint256", "name": "newMinFeeUSD", "type": "uint256", "indexed": false },
{ "internalType": "uint256", "name": "previousMinFeeUSD", "type": "uint256", "indexed": false }
],
"type": "event",
"name": "LowerMinFeeUSD",
"anonymous": false
},
{
"inputs": [
{ "internalType": "address", "name": "caller", "type": "address", "indexed": true },
{ "internalType": "address", "name": "previousAttestor", "type": "address", "indexed": true },
{ "internalType": "address", "name": "newAttestor", "type": "address", "indexed": true }
],
"type": "event",
"name": "SetAttestor",
"anonymous": false
},
{
"inputs": [
{ "internalType": "address", "name": "caller", "type": "address", "indexed": true },
{ "internalType": "contract IERC20", "name": "token", "type": "address", "indexed": true },
{ "internalType": "uint128", "name": "amount", "type": "uint128", "indexed": false },
{ "internalType": "address", "name": "biller", "type": "address", "indexed": true }
],
"type": "event",
"name": "Sponsor",
"anonymous": false
},
{
"inputs": [
{ "internalType": "address", "name": "oldAdmin", "type": "address", "indexed": true },
{ "internalType": "address", "name": "newAdmin", "type": "address", "indexed": true }
],
"type": "event",
"name": "TransferAdmin",
"anonymous": false
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "CAMPAIGN_START_TIME",
"outputs": [{ "internalType": "uint40", "name": "", "type": "uint40" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "CLAIM_TYPE",
"outputs": [{ "internalType": "enum ClaimType", "name": "", "type": "uint8" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "COMPTROLLER",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "EXPIRATION",
"outputs": [{ "internalType": "uint40", "name": "", "type": "uint40" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "IS_SABLIER_MERKLE",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "MERKLE_ROOT",
"outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "TOKEN",
"outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "admin",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "attestor",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "calculateMinFeeWei",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "campaignName",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }]
},
{
"inputs": [
{ "internalType": "uint256", "name": "index", "type": "uint256" },
{ "internalType": "address", "name": "recipient", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" },
{ "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" }
],
"stateMutability": "payable",
"type": "function",
"name": "claim"
},
{
"inputs": [
{ "internalType": "uint256", "name": "index", "type": "uint256" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" },
{ "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" }
],
"stateMutability": "payable",
"type": "function",
"name": "claimTo"
},
{
"inputs": [
{ "internalType": "uint256", "name": "index", "type": "uint256" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" },
{ "internalType": "uint40", "name": "expireAt", "type": "uint40" },
{ "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" },
{ "internalType": "bytes", "name": "attestation", "type": "bytes" }
],
"stateMutability": "payable",
"type": "function",
"name": "claimViaAttestation"
},
{
"inputs": [
{ "internalType": "uint256", "name": "index", "type": "uint256" },
{ "internalType": "address", "name": "recipient", "type": "address" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" },
{ "internalType": "uint40", "name": "validFrom", "type": "uint40" },
{ "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" },
{ "internalType": "bytes", "name": "signature", "type": "bytes" }
],
"stateMutability": "payable",
"type": "function",
"name": "claimViaSig"
},
{
"inputs": [
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" }
],
"stateMutability": "nonpayable",
"type": "function",
"name": "clawback"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "domainSeparator",
"outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "firstClaimTime",
"outputs": [{ "internalType": "uint40", "name": "", "type": "uint40" }]
},
{
"inputs": [{ "internalType": "uint256", "name": "index", "type": "uint256" }],
"stateMutability": "view",
"type": "function",
"name": "hasClaimed",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "hasExpired",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "ipfsCID",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }]
},
{
"inputs": [{ "internalType": "uint256", "name": "newMinFeeUSD", "type": "uint256" }],
"stateMutability": "nonpayable",
"type": "function",
"name": "lowerMinFeeUSD"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "minFeeUSD",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
},
{
"inputs": [{ "internalType": "address", "name": "newAttestor", "type": "address" }],
"stateMutability": "nonpayable",
"type": "function",
"name": "setAttestor"
},
{
"inputs": [
{ "internalType": "contract IERC20", "name": "token", "type": "address" },
{ "internalType": "uint128", "name": "amount", "type": "uint128" },
{ "internalType": "address", "name": "biller", "type": "address" }
],
"stateMutability": "nonpayable",
"type": "function",
"name": "sponsor"
},
{
"inputs": [{ "internalType": "address", "name": "newAdmin", "type": "address" }],
"stateMutability": "nonpayable",
"type": "function",
"name": "transferAdmin"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"CAMPAIGN_START_TIME()": { "details": "This is an immutable state variable." },
"CLAIM_TYPE()": { "details": "This is an immutable state variable." },
"EXPIRATION()": { "details": "This is an immutable state variable." },
"IS_SABLIER_MERKLE()": { "details": "This is a constant state variable." },
"MERKLE_ROOT()": { "details": "This is an immutable state variable." },
"TOKEN()": { "details": "This is an immutable state variable." },
"claim(uint256,address,uint128,bytes32[])": {
"details": "It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - The current time must be greater than or equal to the campaign start time. - The campaign must not have expired. - `msg.value` must not be less than the value returned by {COMPTROLLER.calculateMinFeeWei}. - The `index` must not be claimed already. - The Merkle proof must be valid.",
"params": {
"amount": "The amount of ERC-20 tokens allocated to the recipient.",
"index": "The index of the recipient in the Merkle tree.",
"merkleProof": "The proof of inclusion in the Merkle tree.",
"recipient": "The address of the airdrop recipient."
}
},
"claimTo(uint256,address,uint128,bytes32[])": {
"details": "It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - `msg.sender` must be the airdrop recipient. - The `to` must not be the zero address. - Refer to the requirements in {claim}.",
"params": {
"amount": "The amount of ERC-20 tokens allocated to the `msg.sender`.",
"index": "The index of the `msg.sender` in the Merkle tree.",
"merkleProof": "The proof of inclusion in the Merkle tree.",
"to": "The address receiving the ERC-20 tokens on behalf of `msg.sender`."
}
},
"claimViaAttestation(uint256,address,uint128,uint40,bytes32[],bytes)": {
"details": "It emits a {ClaimInstant} event. Notes: - The attestation must be an EIP-712 signature from the attestor. - See the example in the {claimViaSig} function. - If the attestor is not set in the campaign, the attestor from the comptroller is used. Requirements: - `msg.sender` must be the airdrop recipient. - `CLAIM_TYPE` must be `ATTEST`. - The `to` must not be the zero address. - The attestor must not be the zero address. - The `expireAt` timestamp must not be in the past. - The attestation signature must be valid. - Refer to the requirements in {claim}.",
"params": {
"amount": "The amount of ERC-20 tokens allocated to the `msg.sender`.",
"attestation": "The EIP-712 signature from the attestor.",
"expireAt": "The timestamp after which the attestation signature is no longer valid.",
"index": "The index of the `msg.sender` in the Merkle tree.",
"merkleProof": "The proof of inclusion in the Merkle tree.",
"to": "The address receiving the ERC-20 tokens on behalf of `msg.sender`."
}
},
"claimViaSig(uint256,address,address,uint128,uint40,bytes32[],bytes)": {
"details": "It emits a {ClaimInstant} event. Requirements: - `CLAIM_TYPE` must be `DEFAULT`. - If `recipient` is an EOA, it must match the recovered signer. - If `recipient` is a contract, it must implement the IERC-1271 interface. - The `to` must not be the zero address. - The `validFrom` must be less than or equal to the current block timestamp. - Refer to the requirements in {claim}. Below is the example of typed data to be signed by the airdrop recipient, referenced from https://docs.metamask.io/wallet/how-to/sign-data/#example. ```json types: { EIP712Domain: [ { name: \"name\", type: \"string\" }, { name: \"chainId\", type: \"uint256\" }, { name: \"verifyingContract\", type: \"address\" }, ], Claim: [ { name: \"index\", type: \"uint256\" }, { name: \"recipient\", type: \"address\" }, { name: \"to\", type: \"address\" }, { name: \"amount\", type: \"uint128\" }, { name: \"validFrom\", type: \"uint40\" }, ], }, domain: { name: \"Sablier Airdrops Protocol\", chainId: 1, // Chain on which the contract is deployed verifyingContract: \"0xTheAddressOfThisContract\", // The address of this contract }, primaryType: \"Claim\", message: { index: 2, // The index of the signer in the Merkle tree recipient: \"0xTheAddressOfTheRecipient\", // The address of the airdrop recipient to: \"0xTheAddressReceivingTheTokens\", // The address where recipient wants to transfer the tokens amount: \"1000000000000000000000\", // The amount of tokens allocated to the recipient validFrom: 1752425637 // The timestamp from which the claim signature is valid }, ```",
"params": {
"amount": "The amount of ERC-20 tokens allocated to the recipient.",
"index": "The index of the recipient in the Merkle tree.",
"merkleProof": "The proof of inclusion in the Merkle tree.",
"recipient": "The address of the airdrop recipient who is providing the signature.",
"signature": "The EIP-712 or EIP-1271 signature from the airdrop recipient.",
"to": "The address receiving the ERC-20 tokens on behalf of the recipient.",
"validFrom": "The timestamp from which the claim signature