Galileo Protocol · MMXXVI

Token Architecture

Galileo extends ERC-3643 (T-REX) to create compliant security tokens for luxury product ownership. Each physical product is represented by exactly one token.

Single-Supply Pattern

Unlike fungible tokens, Galileo uses a single-supply pattern:

  • Each product = one token contract deployment
  • Total supply = 1 (always)
  • Token ID = product DID

This ensures perfect 1:1 correspondence between physical items and digital tokens.

Token Interface

interface IGalileoToken is IToken {
    // Product Metadata
    function productDID() external view returns (string memory);
    function productCategory() external view returns (string memory);
    function brandDID() external view returns (string memory);
    function productURI() external view returns (string memory);
    function gtin() external view returns (string memory);
    function serialNumber() external view returns (string memory);

    // CPO (Certified Pre-Owned) Status
    function isCPOCertified() external view returns (bool);
    function cpoCertificationDate() external view returns (uint256);
    function cpoCertifier() external view returns (address);
    function cpoCertificationURI() external view returns (string memory);

    // CPO Management (restricted)
    function certifyCPO(string calldata certificationURI) external;
    function revokeCPO(string calldata reason) external;

    // Extended Transfer
    function transferWithReason(
        address to,
        uint256 amount,
        bytes32 reasonCode,
        string calldata reasonDescription
    ) external returns (bool);

    // Lifecycle
    function isDecommissioned() external view returns (bool);
    function decommissionReason() external view returns (string memory);
}

Compliance Modules

Galileo includes 5 pluggable compliance modules:

ModulePurposeChecks
BrandAuthorizationAuthorized retailer verificationSeller has brand authorization claim
CPOCertificationCPO status requirementsResale requires valid CPO certification
ServiceCenterMRO authorizationTransfer to/from authorized service centers
SanctionsSanctions screeningNeither party on sanctions lists
JurisdictionGeographic restrictionsTransfer allowed in both jurisdictions

Transfer Flow

  1. Initiate — Seller calls transfer() or transferWithReason()
  2. Identity Check — Verify sender/receiver ONCHAINID
  3. Compliance Check — All modules must approve (in order)
  4. Execute — Ownership transfers on-chain
  5. Event — TransferWithReason emitted, off-chain sync triggered

Transfer Reason Codes

// Standard reason codes (keccak256 hashes)
keccak256("SALE")              // Primary or secondary sale
keccak256("GIFT")              // Gift between individuals
keccak256("INHERITANCE")       // Estate/inheritance transfer
keccak256("WARRANTY_CLAIM")    // Return for warranty service
keccak256("SERVICE_TRANSFER")  // Temporary transfer for service
keccak256("AUCTION")           // Auction house transfer
keccak256("LOAN")              // Temporary transfer for display/loan

Further Reading