Source Code
Overview
S Balance
More Info
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Is Started | 21711649 | 3 days ago | IN | 0 S | 0.00005626 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
21711649 | 3 days ago | 0 S |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x023C86B1...1de29ce00 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Referral
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 1000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; import "./interfaces/IManager.sol"; contract Referral { struct ReferralInfo { address[] referrals; uint256[] timeOfReferrals; } mapping(address => string) private shortReferralCodes; mapping(string => address) private shortCodeOwners; mapping(address => bytes32) private bytesReferralCodes; mapping(bytes32 => address) private codeOwnersBytes; mapping(address => ReferralInfo) private referrals; mapping(address => address) private referrers; mapping(address => bool) private isAuthorized; bool public isStarted = false; uint256 private salt; IManager private Manager; //--------------------------------------------------// constructor(address _manager) { Manager = IManager(_manager); } //--------------------------------------------------// modifier onlyStaking() { address _Staking = Manager.getContract("Staking"); require( msg.sender == _Staking || msg.sender == Manager.owner(), "Only Staking can call this function" ); _; } modifier onlyOwner() { require( msg.sender == Manager.owner(), "Only owner can call this function" ); _; } //--------------------------------------------------// function setManager(address _manager) external onlyOwner { Manager = IManager(_manager); } function setIsStarted(bool _isStarted) external onlyOwner { isStarted = _isStarted; } function setIsAuthorizedBatch( address[] memory users, bool _isAuthorized ) external onlyOwner { for (uint256 i = 0; i < users.length; i++) { isAuthorized[users[i]] = _isAuthorized; } } function setIsAuthorized( address user, bool _isAuthorized ) external onlyOwner { isAuthorized[user] = _isAuthorized; } //--------------------------------------------------// /** * @dev generates a referral code for the caller */ function generateReferralCode() external { address sender = msg.sender; require(isStarted || isAuthorized[sender], "Not authorized"); require( bytesReferralCodes[sender] == 0, "Referral code already generated" ); bytes32 referralCode; string memory shortCode; do { salt++; referralCode = keccak256(abi.encodePacked(sender, salt)); shortCode = _toShortCode(referralCode); } while ( codeOwnersBytes[referralCode] != address(0) || shortCodeOwners[shortCode] != address(0) ); shortReferralCodes[sender] = shortCode; shortCodeOwners[shortCode] = sender; bytesReferralCodes[sender] = referralCode; codeOwnersBytes[referralCode] = sender; } /** * @dev uses a referral code to set the referrer of the caller * @param code the referral code to be used */ function useReferralCode(string memory code) external { address sender = msg.sender; address _referrer = shortCodeOwners[code]; require(_referrer != address(0), "Referral code does not exist"); require(sender != _referrer, "Cannot use your own referral code"); require( referrers[sender] == address(0), "Already used a referral code" ); referrals[_referrer].referrals.push(sender); referrals[_referrer].timeOfReferrals.push(block.timestamp); referrers[sender] = _referrer; } //--------------------------------------------------// function _toShortCode( bytes32 hashCode ) private pure returns (string memory) { bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(10); for (uint8 i = 0; i < 10; i++) { str[i] = alphabet[uint8(hashCode[i]) & 0x0f]; } return string(str); } //--------------------------------------------------// function getUserFromCode( string memory code ) external view onlyStaking returns (address) { return shortCodeOwners[code]; } function getReferrals( address user ) external view onlyStaking returns (address[] memory) { return referrals[user].referrals; } function getTimeOfReferrals( address user ) external view onlyStaking returns (uint256[] memory) { return referrals[user].timeOfReferrals; } /** * @dev gets the referral code of a user * @param user the user to get the referral code of */ function getCodeFromUser( address user ) external view returns (string memory) { return shortReferralCodes[user]; } /** * @dev gets the referrer of a user * @param user the user to get the referrer of */ function getReferrer(address user) external view returns (address) { return referrers[user]; } /** * @dev gets the amount of referrals a user has * @param user the user to get the amount of referrals of */ function getAmountOfReferrals( address user ) external view returns (uint256) { return referrals[user].referrals.length; } /** * @dev returns either if a user has a referral code or not * @param user the user to check */ function getHasAReferralCode(address user) external view returns (bool) { return bytesReferralCodes[user] != 0; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.20; interface IManager { function getContract(string memory name) external view returns (address); function owner() external view returns (address); }
{ "optimizer": { "enabled": true, "runs": 1000 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"generateReferralCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAmountOfReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getCodeFromUser","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getHasAReferralCode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTimeOfReferrals","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"}],"name":"getUserFromCode","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"_isAuthorized","type":"bool"}],"name":"setIsAuthorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isAuthorized","type":"bool"}],"name":"setIsAuthorizedBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isStarted","type":"bool"}],"name":"setIsStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"}],"name":"useReferralCode","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635873a1961161008c5780639cade937116100665780639cade93714610221578063b0a2fc1b14610258578063d0ebdbe714610260578063f9f6864a1461027357600080fd5b80635873a196146101db5780635d23273f146101ee5780636208aebe1461020157600080fd5b806333a8433a116100c857806333a8433a1461015757806341a0894d1461016a5780634a9fefc71461018a578063544736e6146101ce57600080fd5b8063105af005146100ef578063166aa8a8146101045780631e1c154a14610117575b600080fd5b6101026100fd3660046112be565b610293565b005b61010261011236600461138a565b6103db565b6101426101253660046113ac565b6001600160a01b0316600090815260026020526040902054151590565b60405190151581526020015b60405180910390f35b6101026101653660046113c9565b6104cf565b61017d6101783660046113ac565b6106b8565b60405161014e9190611463565b6101b66101983660046113ac565b6001600160a01b039081166000908152600560205260409020541690565b6040516001600160a01b03909116815260200161014e565b6007546101429060ff1681565b6101b66101e93660046113c9565b6108b0565b6101026101fc3660046114af565b610a62565b61021461020f3660046113ac565b610b6e565b60405161014e91906114ff565b61024a61022f3660046113ac565b6001600160a01b031660009081526004602052604090205490565b60405190815260200161014e565b610102610c1a565b61010261026e3660046113ac565b610e54565b6102866102813660046113ac565b610f64565b60405161014e9190611532565b600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030a919061156a565b6001600160a01b0316336001600160a01b0316146103795760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b60648201526084015b60405180910390fd5b60005b82518110156103d657816006600085848151811061039c5761039c611587565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161037c565b505050565b600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610452919061156a565b6001600160a01b0316336001600160a01b0316146104bc5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610370565b6007805460ff1916911515919091179055565b600033905060006001836040516104e6919061159d565b908152604051908190036020019020546001600160a01b031690508061054e5760405162461bcd60e51b815260206004820152601c60248201527f526566657272616c20636f646520646f6573206e6f74206578697374000000006044820152606401610370565b806001600160a01b0316826001600160a01b0316036105d55760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f742075736520796f7572206f776e20726566657272616c20636f6460448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610370565b6001600160a01b03828116600090815260056020526040902054161561063d5760405162461bcd60e51b815260206004820152601c60248201527f416c72656164792075736564206120726566657272616c20636f6465000000006044820152606401610370565b6001600160a01b03908116600081815260046020908152604080832080546001818101835582865284862090910180549890971673ffffffffffffffffffffffffffffffffffffffff199889168117909755908101805491820181558452828420429101559382526005905291909120805490921617905550565b600954604051633581777360e01b81526020600482015260076024820152665374616b696e6760c81b60448201526060916000916001600160a01b0390911690633581777390606401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610742919061156a565b9050336001600160a01b03821614806107e25750600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cd919061156a565b6001600160a01b0316336001600160a01b0316145b61083a5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79205374616b696e672063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610370565b6001600160a01b038316600090815260046020908152604091829020805483518184028101840190945280845290918301828280156108a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610884575b505050505091505b50919050565b600954604051633581777360e01b81526020600482015260076024820152665374616b696e6760c81b604482015260009182916001600160a01b0390911690633581777390606401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061156a565b9050336001600160a01b03821614806109d95750600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c4919061156a565b6001600160a01b0316336001600160a01b0316145b610a315760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79205374616b696e672063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610370565b600183604051610a41919061159d565b908152604051908190036020019020546001600160a01b0316915050919050565b600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad9919061156a565b6001600160a01b0316336001600160a01b031614610b435760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610370565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152602081905260409020805460609190610b95906115b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc1906115b9565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b50505050509050919050565b600754339060ff1680610c4557506001600160a01b03811660009081526006602052604090205460ff165b610c915760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420617574686f72697a65640000000000000000000000000000000000006044820152606401610370565b6001600160a01b03811660009081526002602052604090205415610cf75760405162461bcd60e51b815260206004820152601f60248201527f526566657272616c20636f646520616c72656164792067656e657261746564006044820152606401610370565b600060605b60088054906000610d0c836115ed565b90915550506008546040516bffffffffffffffffffffffff19606086901b1660208201526034810191909152605401604051602081830303815290604052805190602001209150610d5c82611153565b6000838152600360205260409020549091506001600160a01b0316151580610db6575060006001600160a01b0316600182604051610d9a919061159d565b908152604051908190036020019020546001600160a01b031614155b610cfc576001600160a01b0383166000908152602081905260409020610ddc8282611662565b5082600182604051610dee919061159d565b9081526040805160209281900383019020805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03958616179091559590921660008181526002835283812086905594855260039091529220805490931690911790915550565b600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061156a565b6001600160a01b0316336001600160a01b031614610f355760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610370565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600954604051633581777360e01b81526020600482015260076024820152665374616b696e6760c81b60448201526060916000916001600160a01b0390911690633581777390606401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee919061156a565b9050336001600160a01b038216148061108e5750600960009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611055573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611079919061156a565b6001600160a01b0316336001600160a01b0316145b6110e65760405162461bcd60e51b815260206004820152602360248201527f4f6e6c79205374616b696e672063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610370565b6001600160a01b038316600090815260046020908152604091829020600101805483518184028101840190945280845290918301828280156108a257602002820191906000526020600020905b815481526020019060010190808311611133575050505050915050919050565b604080518082018252601081527f303132333435363738396162636465660000000000000000000000000000000060208201528151600a8082528184019093526060926000919060208201818036833701905050905060005b600a8160ff1610156112425782858260ff16602081106111ce576111ce611587565b1a60f81b60f81c600f1660ff16815181106111eb576111eb611587565b602001015160f81c60f81b828260ff168151811061120b5761120b611587565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016111ac565b509392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112895761128961124a565b604052919050565b6001600160a01b03811681146112a657600080fd5b50565b803580151581146112b957600080fd5b919050565b600080604083850312156112d157600080fd5b823567ffffffffffffffff8111156112e857600080fd5b8301601f810185136112f957600080fd5b803567ffffffffffffffff8111156113135761131361124a565b8060051b61132360208201611260565b9182526020818401810192908101908884111561133f57600080fd5b6020850194505b8385101561136d578435925061135b83611291565b82825260209485019490910190611346565b8096505050505050611381602084016112a9565b90509250929050565b60006020828403121561139c57600080fd5b6113a5826112a9565b9392505050565b6000602082840312156113be57600080fd5b81356113a581611291565b6000602082840312156113db57600080fd5b813567ffffffffffffffff8111156113f257600080fd5b8201601f8101841361140357600080fd5b803567ffffffffffffffff81111561141d5761141d61124a565b611430601f8201601f1916602001611260565b81815285602083850101111561144557600080fd5b81602084016020830137600091810160200191909152949350505050565b602080825282518282018190526000918401906040840190835b818110156114a45783516001600160a01b031683526020938401939092019160010161147d565b509095945050505050565b600080604083850312156114c257600080fd5b82356114cd81611291565b9150611381602084016112a9565b60005b838110156114f65781810151838201526020016114de565b50506000910152565b602081526000825180602084015261151e8160408501602087016114db565b601f01601f19169190910160400192915050565b602080825282518282018190526000918401906040840190835b818110156114a457835183526020938401939092019160010161154c565b60006020828403121561157c57600080fd5b81516113a581611291565b634e487b7160e01b600052603260045260246000fd5b600082516115af8184602087016114db565b9190910192915050565b600181811c908216806115cd57607f821691505b6020821081036108aa57634e487b7160e01b600052602260045260246000fd5b60006001820161160d57634e487b7160e01b600052601160045260246000fd5b5060010190565b601f8211156103d657806000526020600020601f840160051c8101602085101561163b5750805b601f840160051c820191505b8181101561165b5760008155600101611647565b5050505050565b815167ffffffffffffffff81111561167c5761167c61124a565b6116908161168a84546115b9565b84611614565b6020601f8211600181146116c457600083156116ac5750848201515b600019600385901b1c1916600184901b17845561165b565b600084815260208120601f198516915b828110156116f457878501518255602094850194600190920191016116d4565b50848210156117125786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212207a46551371fd18ab60bb093d1cef09691f1d83232e29e31853d6c84f3c0e25fe64736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.