@settlemint/solidity-token-erc20-crowdsale
Version:
Smart contract set to build an ERC20 token sale in SettleMint
747 lines • 21.9 kB
JSON
{
"compiler": {
"version": "0.8.27+commit.40a35a09"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "priceFeed_",
"type": "address"
},
{
"internalType": "address",
"name": "token_",
"type": "address"
},
{
"internalType": "address payable",
"name": "wallet_",
"type": "address"
},
{
"internalType": "uint256",
"name": "usdRate_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vestingEndDate_",
"type": "uint256"
},
{
"internalType": "address",
"name": "vestingVault_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"type": "error",
"name": "AccessControlBadConfirmation"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"type": "error",
"name": "AccessControlUnauthorizedAccount"
},
{
"inputs": [],
"type": "error",
"name": "EnforcedPause"
},
{
"inputs": [],
"type": "error",
"name": "ExpectedPause"
},
{
"inputs": [],
"type": "error",
"name": "ReentrancyGuardReentrantCall"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "Paused",
"anonymous": false
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32",
"indexed": true
},
{
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32",
"indexed": true
},
{
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32",
"indexed": true
}
],
"type": "event",
"name": "RoleAdminChanged",
"anonymous": false
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32",
"indexed": true
},
{
"internalType": "address",
"name": "account",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "sender",
"type": "address",
"indexed": true
}
],
"type": "event",
"name": "RoleGranted",
"anonymous": false
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32",
"indexed": true
},
{
"internalType": "address",
"name": "account",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "sender",
"type": "address",
"indexed": true
}
],
"type": "event",
"name": "RoleRevoked",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "purchaser",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "beneficiary",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "TokensPurchased",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "Unpaused",
"anonymous": false
},
{
"inputs": [],
"stateMutability": "payable",
"type": "fallback"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "WHITELISTED_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "beneficiary",
"type": "address"
}
],
"stateMutability": "payable",
"type": "function",
"name": "buyTokens"
},
{
"inputs": [
{
"internalType": "address",
"name": "beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenAmount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "externalBuyTokens"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "fundsRaised",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function",
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "weiAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "getTokenAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "getWeiAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "grantRole"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"stateMutability": "view",
"type": "function",
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "function",
"name": "pause"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "renounceRole"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "revokeRole"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function",
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "token",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "tokensAvailable",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "function",
"name": "unpause"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "wallet",
"outputs": [
{
"internalType": "address payable",
"name": "",
"type": "address"
}
]
},
{
"inputs": [],
"stateMutability": "payable",
"type": "receive"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"buyTokens(address)": {
"details": "low level token purchase This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.",
"params": {
"beneficiary": "Recipient of the token purchase"
}
},
"externalBuyTokens(address,uint256)": {
"details": "utility function to allow the owner to handle private and bitcoin buyers This function has a non-reentrancy guard, so it shouldn't be called by another `nonReentrant` function.",
"params": {
"beneficiary": "Recipient of the token purchase",
"tokenAmount": "Number of tokens to be purchased"
}
},
"fundsRaised()": {
"returns": {
"_0": "the amount of funds raised."
}
},
"getRoleAdmin(bytes32)": {
"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
},
"getTokenAmount(uint256)": {
"details": "Converts the weiAmount into equivalent number of tokens",
"params": {
"weiAmount": "Value of wei for conversion"
}
},
"getWeiAmount(uint256)": {
"details": "Converts the tokenAmount into equivalent number of wei",
"params": {
"tokenAmount": "Number of tokens for convertion"
}
},
"grantRole(bytes32,address)": {
"details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."
},
"hasRole(bytes32,address)": {
"details": "Returns `true` if `account` has been granted `role`."
},
"pause()": {
"details": "Triggers stopped state. Requirements: - The contract must not be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE"
},
"paused()": {
"details": "Returns true if the contract is paused, and false otherwise."
},
"renounceRole(bytes32,address)": {
"details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."
},
"revokeRole(bytes32,address)": {
"details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."
},
"token()": {
"returns": {
"_0": "the address of the token being sold."
}
},
"tokensAvailable()": {
"returns": {
"_0": "the amount tokens available to the crowdsale for selling."
}
},
"unpause()": {
"details": "Returns to normal state. Requirements: - The contract must be paused. - The sender of the transaction must have the DEFAULT_ADMIN_ROLE"
},
"wallet()": {
"returns": {
"_0": "the address where funds are collected."
}
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"remappings": [
"@openzeppelin/=node_modules/@openzeppelin/",
"eth-gas-reporter/=node_modules/eth-gas-reporter/",
"forge-std/=lib/forge-std/src/",
"hardhat/=node_modules/hardhat/"
],
"optimizer": {
"enabled": true,
"runs": 10000
},
"metadata": {
"bytecodeHash": "ipfs"
},
"compilationTarget": {
"contracts/ExampleCrowdSale.sol": "ExampleCrowdSale"
},
"evmVersion": "cancun",
"libraries": {},
"viaIR": true
},
"sources": {
"contracts/ExampleCrowdSale.sol": {
"keccak256": "0xe5a0e34725bd73ea710cab6c17941d1ab35047dc4bf532d30d06f8a19acd9bbb",
"urls": [
"bzz-raw://4436dd594f102b555a4f02aeab0b795e9e9ec302e3b998e04d2de0dc265994f1",
"dweb:/ipfs/QmecLoA7j1gR5BcmYWJr8cgPDL8Mz6tSYjPS2RTyzjs92k"
],
"license": "FSL-1.1-MIT"
},
"contracts/library/AggregatorV3Interface.sol": {
"keccak256": "0x6fe9022adc0ea2fe59271183cd952e1679262f1c239583ecad824dbd25f723b8",
"urls": [
"bzz-raw://c7eb625f0943857cb5d4820d8b44918153fae0b6e6204debb4a0c3dd763f91de",
"dweb:/ipfs/QmNz2mLb7X17sqf7EQmNai3bG9NqVw732M9ogyddeqgRuV"
],
"license": "FSL-1.1-MIT"
},
"contracts/library/CrowdSale.sol": {
"keccak256": "0x6daf7c8f3c38229eca479270cbbee2aec5090f1758941f9979faf6117af4787d",
"urls": [
"bzz-raw://0bfc8f658db29b8ad4055fe1f4bf5090e5a7043be3eda0d308e9d7ac943b147d",
"dweb:/ipfs/QmNMGdx1tgoy8ZE4boqYsnXvBmaoGMqtquz16hP5JfrssD"
],
"license": "FSL-1.1-MIT"
},
"contracts/library/ICrowdSale.sol": {
"keccak256": "0xe5539638218e0e027b15b9c236cb9d2dcffcb0ea3ed79d8374e11d120d1b1d4d",
"urls": [
"bzz-raw://3600a70cc759026e923c594f69fd68d5ad3476fcfaa5945245ce08fe94b0a953",
"dweb:/ipfs/QmRq9A3iei2J1ocWDoq1xL5xLdnSAgxfuktuC3XsFhFUqh"
],
"license": "FSL-1.1-MIT"
},
"contracts/library/IVestingVault.sol": {
"keccak256": "0xf3f074546fdb24b8d2889ffd7947b5134669f1eb47c4baf30abf4663f6d320d7",
"urls": [
"bzz-raw://e13d929241510074238c4d3797aeaa9a8f3bea58c9d8beab73c2a39583dcf56e",
"dweb:/ipfs/QmNX2cSo1uxxuviE5SL8wUgMgC2DBrDEyZa8KVd9DipUAU"
],
"license": "FSL-1.1-MIT"
},
"contracts/library/VestingVault.sol": {
"keccak256": "0x0386c58188ed9a89f544a617e7b628210935857895b07549854a19e140a1b21c",
"urls": [
"bzz-raw://c2d8275e0105f4a6c134acb7057706b00c437e3b5e72185479024343346ab1ee",
"dweb:/ipfs/QmegrKCswosuTqn2uizDBKmrMFboBN9ATcXPVcyLzbUpdR"
],
"license": "FSL-1.1-MIT"
},
"node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
"keccak256": "0xc1bebdee8943bd5e9ef1e0f2e63296aa1dd4171a66b9e74d0286220e891e1458",
"urls": [
"bzz-raw://928cf2f0042c606f3dcb21bd8a272573f462a215cd65285d2d6b407f31e9bd67",
"dweb:/ipfs/QmWGxjckno6sfjHPX5naPnsfsyisgy4PJDf46eLw9umfpx"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
"keccak256": "0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530",
"urls": [
"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0",
"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
"keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
"urls": [
"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
"keccak256": "0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a",
"urls": [
"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a",
"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x"
],
"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/token/ERC20/extensions/IERC20Metadata.sol": {
"keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
"urls": [
"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/utils/Context.sol": {
"keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
"urls": [
"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/utils/Pausable.sol": {
"keccak256": "0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f",
"urls": [
"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c",
"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
"keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
"urls": [
"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa",
"urls": [
"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287",
"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"
],
"license": "MIT"
},
"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
"urls": [
"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
],
"license": "MIT"
}
},
"version": 1
}