{"sources":{"AGENTO.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\n/// @notice Minimal Agent ID registry interface (Binance Agent ID on BSC).\ninterface IAgentIdRegistry {\n    function ownerOf(uint256 id) external view returns (address);\n}\n\n/// @title AGENTO\n/// @notice Fixed-price share mint token for Binance Agent ID holders.\n///         1 share = 10,000 AGENTO for exactly 0.0003 BNB.\n///         Max 5 shares per wallet, 1,000 shares total. No pre-mine:\n///         the owner receives zero tokens and can only withdraw the\n///         BNB proceeds collected by the contract. Sale parameters are\n///         constants and can never be changed after deployment.\ncontract AGENTO {\n    // ---------- ERC-20 ----------\n    string public constant name = \"AGENTO\";\n    string public constant symbol = \"AGENTO\";\n    uint8 public constant decimals = 18;\n    uint256 public totalSupply;\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    // ---------- Sale parameters (immutable by construction) ----------\n    uint256 public constant PRICE = 0.0003 ether;              // per share\n    uint256 public constant TOKENS_PER_SHARE = 10_000 ether;  // 10,000 tokens\n    uint256 public constant MAX_SHARES = 1000;\n    uint256 public constant MAX_PER_WALLET = 5;\n\n    address public immutable owner;\n    IAgentIdRegistry public immutable registry;\n\n    uint256 public sharesSold;\n    mapping(address => uint256) public sharesMintedBy;\n\n    event Mint(address indexed buyer, uint256 indexed agentId, uint256 shares, uint256 cost);\n    event Withdraw(address indexed to, uint256 amount);\n\n    constructor(address _owner, address _registry) {\n        owner = _owner;\n        registry = IAgentIdRegistry(_registry);\n    }\n\n    // ---------- Views used by scanners / mint bots ----------\n    function costOf(uint256 shares) public pure returns (uint256) {\n        return shares * PRICE;\n    }\n\n    function quote(uint256 shares) public pure returns (uint256) {\n        return costOf(shares);\n    }\n\n    function totalShares() external view returns (uint256) {\n        return sharesSold;\n    }\n\n    function remainingShares() external view returns (uint256) {\n        return MAX_SHARES - sharesSold;\n    }\n\n    // ---------- Sale ----------\n    /// @notice Mint `shares` shares against Agent ID `agentId`.\n    ///         Caller must own that Agent ID in the registry and must\n    ///         send exactly shares * PRICE wei.\n    function mint(uint256 shares, uint256 agentId) external payable {\n        require(shares > 0, \"zero shares\");\n        require(msg.value == shares * PRICE, \"wrong value\");\n        require(sharesSold + shares <= MAX_SHARES, \"sold out\");\n        require(sharesMintedBy[msg.sender] + shares <= MAX_PER_WALLET, \"wallet cap\");\n        require(registry.ownerOf(agentId) == msg.sender, \"not agent owner\");\n\n        sharesSold += shares;\n        sharesMintedBy[msg.sender] += shares;\n\n        uint256 amount = shares * TOKENS_PER_SHARE;\n        totalSupply += amount;\n        balanceOf[msg.sender] += amount;\n        emit Transfer(address(0), msg.sender, amount);\n        emit Mint(msg.sender, agentId, shares, msg.value);\n    }\n\n    /// @notice Owner withdraws all collected BNB proceeds.\n    function withdraw() external {\n        require(msg.sender == owner, \"not owner\");\n        uint256 bal = address(this).balance;\n        require(bal > 0, \"empty\");\n        (bool ok, ) = payable(owner).call{value: bal}(\"\");\n        require(ok, \"send failed\");\n        emit Withdraw(owner, bal);\n    }\n\n    // ---------- ERC-20 logic ----------\n    function transfer(address to, uint256 value) external returns (bool) {\n        _transfer(msg.sender, to, value);\n        return true;\n    }\n\n    function approve(address spender, uint256 value) external returns (bool) {\n        allowance[msg.sender][spender] = value;\n        emit Approval(msg.sender, spender, value);\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool) {\n        uint256 allowed = allowance[from][msg.sender];\n        require(allowed >= value, \"allowance\");\n        if (allowed != type(uint256).max) {\n            allowance[from][msg.sender] = allowed - value;\n        }\n        _transfer(from, to, value);\n        return true;\n    }\n\n    function _transfer(address from, address to, uint256 value) internal {\n        require(to != address(0), \"zero address\");\n        require(balanceOf[from] >= value, \"balance\");\n        balanceOf[from] -= value;\n        balanceOf[to] += value;\n        emit Transfer(from, to, value);\n    }\n}\n"}},"abi":[{"type":"constructor","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_registry","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Mint","type":"event","inputs":[{"name":"buyer","type":"address","indexed":true,"internalType":"address"},{"name":"agentId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"cost","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Withdraw","type":"event","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"TOKENS_PER_SHARE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"costOf","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"agentId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"quote","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"registry","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IAgentIdRegistry"}],"stateMutability":"view"},{"name":"remainingShares","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sharesMintedBy","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sharesSold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalShares","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"withdraw","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"}],"matchId":"58280540","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-11-03T23:47:49Z","match":"exact_match","chainId":"56","address":"0xe9BA85A0943E337a3A1bE44DEc28aCE122Ea61cb"}