Contract Reference
v1.2 soToken Contracts
v1.2 introduces the new soToken family:
| Contract | Purpose |
|---|---|
SoTokenNativeV1_2 | ERC-20-compatible token plus LOA/BOA object ledger |
SoTokenFactoryV1_2 | Launches native LOA/BOA contracts |
SoTokenMarketV1_2 | Lists and sells active transferable objects |
SoTokenITO | Initial Token Offering for native soTokens |
SoTokenMediaStorageV1_2 | Stores 50 KB on-chain media items |
SoTokenRendererV1_2 | Returns metadata for image, animation, audio, and markdown objects |
Base mainnet v1.2
| Contract | Address |
|---|---|
SoTokenFactoryV1_2 | Set after deploy |
SoTokenMarketV1_2 | Set after deploy |
Base Sepolia v1.2
| Contract | Address |
|---|---|
SoTokenFactoryV1_2 | Set after deploy |
SoTokenMarketV1_2 | Set after deploy |
Legacy BOA Contracts
The following deployed contracts remain supported as legacy BOA/BPeg infrastructure.
Base mainnet
| Contract | Address |
|---|---|
BpegFactoryV4 | 0xe3280D564f3248A532539365DcaCc3281791CD6A |
BpegMarketV4 | 0xB16A75FD6D36360a6C370f86c2b6cBEfF7E7d859 |
BpegDefaultSeedModule | 0xd907FB49C092942c3c69fEB28498E5FBdd0b33fE |
BpegUniswapV4SeedModule | 0xBE695E965cC464198B660fE38B4924a923752585 |
BpegNativeTokenDeployer | 0xaeD2c62C329774Ba57c773473B4bC1D1e27898E1 |
EpegLedgerDeployer | 0xC26a28d240fb344C26b9F15cfc3487FB15523fB1 |
| Treasury | 0x3F40459c71e3BD0A8fE7952ED47DEDcfd8C279FC |
Base Sepolia
| Contract | Address |
|---|---|
BpegFactoryV4 | 0x182796ccD77a601923c3945B1FaeB8E929a80f06 |
BpegMarketV4 | 0x65F35D2c8c4E299AA5575C34Bc02A9134D7efb9e |
BpegDefaultSeedModule | 0xc001826EbE807A72d5795944dE3Bf266b5feC290 |
BpegUniswapV4SeedModule | 0xCbf8a774236018dA0cb6656314a95E0db4787750 |
BpegNativeTokenDeployer | 0x7D9E661592F68e5136823C422Fc673f661a0927B |
v1.2 Ledger Interface
Core reads and writes:
function objectState(uint256 objectId) external view returns (ObjectState);
function ownerOfObject(uint256 objectId) external view returns (address);
function objectURI(uint256 objectId) external view returns (string memory);
function claim(uint256 amount, bytes calldata context) external returns (uint256[] memory);
function claimFor(address owner, uint256 amount, bytes calldata context) external returns (uint256[] memory);
function transferObject(address to, uint256 objectId) external;
function transferObjectFrom(address from, address to, uint256 objectId) external;
function setObjectApprovalForAll(address operator, bool approved) external;
function isApprovedForObject(address owner, address operator, uint256 objectId) external view returns (bool);
Compatibility aliases such as ownerOfBpeg and transferBpegFrom exist where needed for older app/market integrations.
Legacy Factory
BpegFactoryV4 deploys legacy BOA/BPeg-native tokens.
function createNativeBpegToken(
string calldata name,
string calldata symbol,
uint256 initialSupply,
uint256 interval,
uint256 maxObjects,
address renderer,
address seedModule,
uint16 royaltyBps
) external returns (address ledger);
If seedModule is zero, the factory uses BpegDefaultSeedModule.
Ledger interface
Core reads and writes:
function supportedCount(address owner) external view returns (uint256);
function activeCapacity(address owner) external view returns (uint256);
function objectsOf(address owner, uint256 cursor, uint256 limit) external view returns (uint256[] memory);
function ownerOfBpeg(uint256 objectId) external view returns (address);
function objectURI(uint256 objectId) external view returns (string memory);
function claim(uint256 amount, bytes calldata context) external returns (uint256[] memory);
function claimFor(address owner, uint256 amount, bytes calldata context) external returns (uint256[] memory);
function sync(address owner) external returns (uint256 removedCount);
function transferBpeg(address to, uint256 objectId) external;
function transferBpegFrom(address from, address to, uint256 objectId) external;
function setBpegApprovalForAll(address operator, bool approved) external;
function setBirthHook(address hook, bool approved) external;
Marketplace
BpegMarketV4 lists and sells Mirage-native objects:
function list(address ledger, uint256 objectId, uint256 price) external returns (uint256 listingId);
function buy(uint256 listingId) external payable;
function delist(uint256 listingId) external;
function activeListingId(address ledger, uint256 objectId) external view returns (uint256);
function getFees(address ledger, uint256 objectId, uint256 price)
external view returns (uint256 protocolCut, uint256 royaltyCut, uint256 sellerCut);
The market calls transferBpegFrom, not ERC-721 transfer functions.
Renderers
Renderers implement:
function objectURI(
uint256 objectId,
uint256 seed,
address owner,
uint256 sourceBalance,
uint256 interval
) external view returns (string memory);
BpegLayeredRendererV4 supports weighted on-chain layers and configurable canvas/profile values.
Legacy addresses
| Legacy contract | Address |
|---|---|
V3 BpegFactory | 0x4D9639AB37a9cA00E80B4Aca198aC649d02995c4 |
V3 BpegRouter | 0x856255bC5D79AdA826C0B187078bD64bb4416795 |
V3 BpegMarketplace | 0x07AAEEa34a6Dfdd0D2A527bAa7d992Bb6504a40D |
| PixelCats proto-BOA | 0xD7800C338228a6eeb37cF74133732Fb6aE05915F |
| ClankerCats renderer | 0x2fE5bf2aB284bc71B261Ea6d32aaadfcA987Eeb8 |
| ClankerCats ERC-721 | 0xbE76Ce3cE0966fedA606fCF70884dae8FBaa7FCF |
| CLKCAT | 0x84a5637CcAC19250156e582c5bF7C01Eee151b07 |