My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
FurucomboRegistry
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IFurucomboRegistry} from "./interfaces/IFurucomboRegistry.sol"; /// @notice The registry database for Furucombo contract FurucomboRegistry is IFurucomboRegistry, Ownable { mapping(address => bytes32) public handlers; mapping(address => bytes32) public callers; mapping(address => uint256) public bannedAgents; mapping(address => mapping(address => bool)) public handlerCalleeWhiteList; bool public fHalt; bytes32 public constant DEPRECATED = bytes10(0x64657072656361746564); event Registered(address indexed registration, bytes32 info); event Unregistered(address indexed registration); event CallerRegistered(address indexed registration, bytes32 info); event CallerUnregistered(address indexed registration); event Banned(address indexed agent); event Unbanned(address indexed agent); event Halted(); event Unhalted(); event HandlerCalleeWhitelistRegistered(address indexed handler, address indexed callee); event HandlerCalleeWhitelistUnregistered(address indexed handler, address indexed callee); modifier isNotHalted() { require(!fHalt, "Halted"); _; } modifier isHalted() { require(fHalt, "Not halted"); _; } modifier isNotBanned(address agent) { require(bannedAgents[agent] == 0, "Banned"); _; } modifier isBanned(address agent) { require(bannedAgents[agent] != 0, "Not banned"); _; } /** * @notice Register a handler with a bytes32 information. * @param registration Handler address. * @param info Info string. */ function register(address registration, bytes32 info) external onlyOwner { require(registration != address(0), "zero address"); require(info != DEPRECATED, "unregistered info"); require(handlers[registration] != DEPRECATED, "unregistered"); handlers[registration] = info; emit Registered(registration, info); } /** * @notice Unregister a handler. The handler will be deprecated. * @param registration The handler to be unregistered. */ function unregister(address registration) external onlyOwner { require(registration != address(0), "zero address"); require(handlers[registration] != bytes32(0), "no registration"); require(handlers[registration] != DEPRECATED, "unregistered"); handlers[registration] = DEPRECATED; emit Unregistered(registration); } /** * @notice Register a caller with a bytes32 information. * @param registration Caller address. * @param info Info string. * @dev Dapps that triggers callback function should be registered. * In this case, registration is the Dapp address and the leading 20 bytes * of info is the handler address. */ function registerCaller(address registration, bytes32 info) external onlyOwner { require(registration != address(0), "zero address"); require(info != DEPRECATED, "unregistered info"); require(callers[registration] != DEPRECATED, "unregistered"); callers[registration] = info; emit CallerRegistered(registration, info); } /** * @notice Unregister a caller. The caller will be deprecated. * @param registration The caller to be unregistered. */ function unregisterCaller(address registration) external onlyOwner { require(registration != address(0), "zero address"); require(callers[registration] != bytes32(0), "no registration"); require(callers[registration] != DEPRECATED, "unregistered"); callers[registration] = DEPRECATED; emit CallerUnregistered(registration); } /** * @notice Ban agent from query * */ function ban(address agent) external isNotBanned(agent) onlyOwner { bannedAgents[agent] = 1; emit Banned(agent); } /** * @notice Unban agent from query */ function unban(address agent) external isBanned(agent) onlyOwner { bannedAgents[agent] = 0; emit Unbanned(agent); } /** * @notice Check if the handler is valid. * @param handler The handler to be verified. */ function isValidHandler(address handler) external view returns (bool) { return handlers[handler] != 0 && handlers[handler] != DEPRECATED; } /** * @notice Check if the caller is valid. * @param caller The caller to be verified. */ function isValidCaller(address caller) external view returns (bool) { return callers[caller] != 0 && callers[caller] != DEPRECATED; } function halt() external isNotHalted onlyOwner { fHalt = true; emit Halted(); } function unhalt() external isHalted onlyOwner { fHalt = false; emit Unhalted(); } function registerHandlerCalleeWhitelist(address handler, address callee) external onlyOwner { require(handler != address(0) && callee != address(0), "zero address"); handlerCalleeWhiteList[handler][callee] = true; emit HandlerCalleeWhitelistRegistered(handler, callee); } function unregisterHandlerCalleeWhitelist(address handler, address callee) external onlyOwner { require(handler != address(0) && callee != address(0), "zero address"); handlerCalleeWhiteList[handler][callee] = false; emit HandlerCalleeWhitelistUnregistered(handler, callee); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IFurucomboRegistry { function handlers(address) external view returns (bytes32); function callers(address) external view returns (bytes32); function bannedAgents(address) external view returns (uint256); function fHalt() external view returns (bool); function isValidHandler(address handler) external view returns (bool); function isValidCaller(address handler) external view returns (bool); function handlerCalleeWhiteList(address handler, address callee) external view returns (bool); }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"agent","type":"address"}],"name":"Banned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registration","type":"address"},{"indexed":false,"internalType":"bytes32","name":"info","type":"bytes32"}],"name":"CallerRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registration","type":"address"}],"name":"CallerUnregistered","type":"event"},{"anonymous":false,"inputs":[],"name":"Halted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"},{"indexed":true,"internalType":"address","name":"callee","type":"address"}],"name":"HandlerCalleeWhitelistRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"handler","type":"address"},{"indexed":true,"internalType":"address","name":"callee","type":"address"}],"name":"HandlerCalleeWhitelistUnregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registration","type":"address"},{"indexed":false,"internalType":"bytes32","name":"info","type":"bytes32"}],"name":"Registered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"agent","type":"address"}],"name":"Unbanned","type":"event"},{"anonymous":false,"inputs":[],"name":"Unhalted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registration","type":"address"}],"name":"Unregistered","type":"event"},{"inputs":[],"name":"DEPRECATED","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"ban","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bannedAgents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"callers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fHalt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"handlerCalleeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"handlers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"isValidCaller","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"isValidHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registration","type":"address"},{"internalType":"bytes32","name":"info","type":"bytes32"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registration","type":"address"},{"internalType":"bytes32","name":"info","type":"bytes32"}],"name":"registerCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"},{"internalType":"address","name":"callee","type":"address"}],"name":"registerHandlerCalleeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"unban","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unhalt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registration","type":"address"}],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registration","type":"address"}],"name":"unregisterCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"handler","type":"address"},{"internalType":"address","name":"callee","type":"address"}],"name":"unregisterHandlerCalleeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f5f8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063818b47a7116100b8578063bb1010e91161007c578063bb1010e9146102b3578063cb3e64fd146102c6578063d4c68348146102ce578063dbeda307146102e1578063ea750af6146102f4578063f2fde38b1461030157600080fd5b8063818b47a71461024b5780638da5cb5b1461025f57806397c3ccd81461027a578063afb4bfbd1461028d578063b9f14557146102a057600080fd5b806356ea919f116100ff57806356ea919f146101ca57806357fe06e3146101dd5780635ed7ca5b1461021b578063715018a6146102235780637bbf4a3f1461022b57600080fd5b8063020b1e5e1461013c5780631903dcaa146101515780631a21c0bc146101845780631e7a505f146101a45780632ec2c246146101b7575b600080fd5b61014f61014a366004610e29565b610314565b005b61017161015f366004610e5c565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b610171610192366004610e5c565b60016020526000908152604090205481565b61014f6101b2366004610e7e565b6103e0565b61014f6101c5366004610e5c565b61051f565b61014f6101d8366004610e7e565b61065c565b61020b6101eb366004610e29565b600460209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161017b565b61014f61078f565b61014f61082d565b610171610239366004610e5c565b60026020526000908152604090205481565b6101716919195c1c9958d85d195960b21b81565b6000546040516001600160a01b03909116815260200161017b565b61014f610288366004610e5c565b610863565b61014f61029b366004610e5c565b610924565b61014f6102ae366004610e5c565b610a61565b61020b6102c1366004610e5c565b610b24565b61014f610b76565b61020b6102dc366004610e5c565b610c14565b61014f6102ef366004610e29565b610c62565b60055461020b9060ff1681565b61014f61030f366004610e5c565b610d22565b6000546001600160a01b031633146103475760405162461bcd60e51b815260040161033e90610ea8565b60405180910390fd5b6001600160a01b0382161580159061036757506001600160a01b03811615155b6103835760405162461bcd60e51b815260040161033e90610edd565b6001600160a01b03808316600081815260046020908152604080832094861680845294909152808220805460ff19166001179055517f598d5761a6201d31b5e012ce501be35af391c15388051a0dc0aab108a61655f89190a35050565b6000546001600160a01b0316331461040a5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b0382166104305760405162461bcd60e51b815260040161033e90610edd565b6919195c1c9958d85d195960b21b8114156104815760405162461bcd60e51b8152602060048201526011602482015270756e7265676973746572656420696e666f60781b604482015260640161033e565b6001600160a01b0382166000908152600160205260409020546919195c1c9958d85d195960b21b14156104c65760405162461bcd60e51b815260040161033e90610f03565b6001600160a01b03821660008181526001602052604090819020839055517fb8142d42f05d95abf0a6570799774d59276e49ea32a04d9a4ec316ea4a6886bc906105139084815260200190565b60405180910390a25050565b6000546001600160a01b031633146105495760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b03811661056f5760405162461bcd60e51b815260040161033e90610edd565b6001600160a01b0381166000908152600160205260409020546105c65760405162461bcd60e51b815260206004820152600f60248201526e3737903932b3b4b9ba3930ba34b7b760891b604482015260640161033e565b6001600160a01b0381166000908152600160205260409020546919195c1c9958d85d195960b21b141561060b5760405162461bcd60e51b815260040161033e90610f03565b6001600160a01b0381166000818152600160205260408082206919195c1c9958d85d195960b21b9055517f75cd6de711483e11488a1cd9b66172abccb9e5c19572f92015a7880f0c8c0edc9190a250565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b0382166106ac5760405162461bcd60e51b815260040161033e90610edd565b6919195c1c9958d85d195960b21b8114156106fd5760405162461bcd60e51b8152602060048201526011602482015270756e7265676973746572656420696e666f60781b604482015260640161033e565b6001600160a01b0382166000908152600260205260409020546919195c1c9958d85d195960b21b14156107425760405162461bcd60e51b815260040161033e90610f03565b6001600160a01b03821660008181526002602052604090819020839055517fbcf9675eb3fde058129f75f75f8b7a48bf7bcc37ec73dfd9b45218d551ce483b906105139084815260200190565b60055460ff16156107cb5760405162461bcd60e51b815260206004820152600660248201526512185b1d195960d21b604482015260640161033e565b6000546001600160a01b031633146107f55760405162461bcd60e51b815260040161033e90610ea8565b6005805460ff191660011790556040517f1ee9080f6b55ca44ce58681c8162e6c1ac1c47e1da791a4a1c1ec6186d8af1f390600090a1565b6000546001600160a01b031633146108575760405162461bcd60e51b815260040161033e90610ea8565b6108616000610dbd565b565b6001600160a01b0381166000908152600360205260409020548190156108b45760405162461bcd60e51b815260206004820152600660248201526510985b9b995960d21b604482015260640161033e565b6000546001600160a01b031633146108de5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b03821660008181526003602052604080822060019055517f30d1df1214d91553408ca5384ce29e10e5866af8423c628be22860e41fb810059190a25050565b6000546001600160a01b0316331461094e5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b0381166109745760405162461bcd60e51b815260040161033e90610edd565b6001600160a01b0381166000908152600260205260409020546109cb5760405162461bcd60e51b815260206004820152600f60248201526e3737903932b3b4b9ba3930ba34b7b760891b604482015260640161033e565b6001600160a01b0381166000908152600260205260409020546919195c1c9958d85d195960b21b1415610a105760405162461bcd60e51b815260040161033e90610f03565b6001600160a01b0381166000818152600260205260408082206919195c1c9958d85d195960b21b9055517f5b357470d4ba3884887ef785883313bfabff1620ba84b4a140ddc4536cb2e0b69190a250565b6001600160a01b0381166000908152600360205260409020548190610ab55760405162461bcd60e51b815260206004820152600a602482015269139bdd0818985b9b995960b21b604482015260640161033e565b6000546001600160a01b03163314610adf5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b038216600081815260036020526040808220829055517f2ab91b53354938415bb6962c4322231cd4cb2c84930f1a4b9abbedc2fe8abe729190a25050565b6001600160a01b03811660009081526002602052604081205415801590610b7057506001600160a01b0382166000908152600260205260409020546919195c1c9958d85d195960b21b14155b92915050565b60055460ff16610bb55760405162461bcd60e51b815260206004820152600a602482015269139bdd081a185b1d195960b21b604482015260640161033e565b6000546001600160a01b03163314610bdf5760405162461bcd60e51b815260040161033e90610ea8565b6005805460ff191690556040517f7c46a5e7a10434913e987d799d659758880ce8e790692e13e66ddfae4cc9afca90600090a1565b6001600160a01b03811660009081526001602052604081205415801590610b705750506001600160a01b03166000908152600160205260409020546919195c1c9958d85d195960b21b141590565b6000546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b03821615801590610cac57506001600160a01b03811615155b610cc85760405162461bcd60e51b815260040161033e90610edd565b6001600160a01b03808316600081815260046020908152604080832094861680845294909152808220805460ff19169055517fec5d903ff939ce057caffbf9a008daad77f41ac92e063dc477ca0e348186b66b9190a35050565b6000546001600160a01b03163314610d4c5760405162461bcd60e51b815260040161033e90610ea8565b6001600160a01b038116610db15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161033e565b610dba81610dbd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610e2457600080fd5b919050565b60008060408385031215610e3c57600080fd5b610e4583610e0d565b9150610e5360208401610e0d565b90509250929050565b600060208284031215610e6e57600080fd5b610e7782610e0d565b9392505050565b60008060408385031215610e9157600080fd5b610e9a83610e0d565b946020939093013593505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6020808252600c908201526b1d5b9c9959da5cdd195c995960a21b60408201526060019056fea2646970667358221220a89f34953a26c11859cc83fcf921e21979a8f11abdbfee397d0ac089e515a67b64736f6c634300080a0033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.