Skip to main content

BCOToken

Immutable TRC20 token — the core asset of the BCO Protocol. Cannot be upgraded, frozen, or seized.

PropertyValue
StandardTRC20 (ERC-20 compatible)
Solidity0.8.28
ProxyNone (immutable)
AddressTWyRGyikCy1TGkz9etJr8a3NDQcMx3F28p

Inherited Contracts

ContractSource
ERC20OpenZeppelin v5.6.1
ERC20Permit (EIP-2612)OpenZeppelin v5.6.1
AccessControlDefaultAdminRulesOpenZeppelin v5.6.1
PausableOpenZeppelin v5.6.1
ReentrancyGuardTransient (EIP-1153)OpenZeppelin v5.6.1

Roles

RoleAssigned ToPurpose
DEFAULT_ADMIN_ROLEMulti-sig 3/5Manage roles, 2-step transfer
MINTER_ROLEDeedRegistryMint BCO on deed registration
BURNER_ROLEDeedRegistryBurn BCO on deed deactivation
PAUSER_ROLEMulti-sig 3/5Emergency pause

Key Functions

Token Operations

/// @notice Mints tokens to an address. Only callable by MINTER_ROLE.
function mint(address to, uint256 amount) external;

/// @notice Burns tokens from an address. Only callable by BURNER_ROLE.
/// @dev Requires prior approval from the token holder.
function burnFrom(address from, uint256 amount) external;

ERC-20 Standard

function transfer(address to, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function totalSupply() external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);

Gasless Approvals (EIP-2612)

function permit(
address owner, address spender, uint256 value,
uint256 deadline, uint8 v, bytes32 r, bytes32 s
) external;

Metadata (ERC-7572)

/// @notice Returns contract metadata URI.
function contractURI() external view returns (string memory);

/// @notice Update contract metadata URI. Admin only.
function setContractURI(string calldata newURI) external;

/// @notice Update issuer identity information on-chain. Admin only.
function setIssuerInfo(
string calldata name, // Legal name (e.g., "REcologic Ltda")
string calldata registration, // Registration number (e.g., CNPJ)
string calldata country // ISO 3166-1 alpha-2 (e.g., "BR")
) external;

Recovery

/// @notice Recovers force-deposited native currency (TRX/ETH).
function recoverNative() external;

/// @notice Recovers accidentally sent ERC-20 tokens.
function recoverERC20(address tokenAddress, uint256 amount) external;

Admin

function pause() external;    // PAUSER_ROLE
function unpause() external; // PAUSER_ROLE

What BCOToken Does NOT Have

These features are intentionally absent:

FeatureReason
burn()No public burn — protects the invariant
ERC20BurnableNot inherited — holders cannot burn
freeze() / blacklist()No compliance role — full self-custody
COMPLIANCE_ROLENo frozen addresses, no seized funds
Proxy / upgradeImmutable — rules can never change

Events

event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);

Errors

error AdminRenounceBlocked();      // beginDefaultAdminTransfer(address(0)) reverts
error ZeroAddress(); // Zero address in parameters
error ZeroAmount(); // Zero amount in parameters