Skip to main content

Token Standards

Basalt defines seven token standards and eight system contracts. Each token standard ships as a base class in the Basalt.Sdk.Contracts package. System contracts are deployed at genesis and provide core network functionality.

All token standards support policy hooks via PolicyEnforcer. Policies are checked on every transfer.

Token Standards

StandardTypeBase ClassDescription
BST-20FungibleBST20TokenERC-20 equivalent. Transfer, approve, transferFrom.
BST-721Non-FungibleBST721TokenERC-721 equivalent. Mint, burn, transfer with metadata URI.
BST-1155Multi-TokenBST1155TokenERC-1155 equivalent. Batch operations supporting fungible and non-fungible tokens in a single contract.
BST-3525Semi-FungibleBST3525TokenERC-3525 equivalent. Slot-based tokens with per-token values. Ideal for financial instruments such as bonds, tranches, and structured products.
BST-4626Tokenized VaultBST4626VaultERC-4626 equivalent. Deposit, withdraw, and redeem with standardized share accounting.
BST-DIDDecentralized IDBSTDIDRegistryDID document management with service endpoints and verification methods. W3C DID compatible.
BST-VCVerifiable CredentialBSTVCRegistryW3C VC-compatible credential issuance, verification, and revocation with selective disclosure and ZK proof support.

BST-20: Fungible Token

The standard for fungible tokens on Basalt, analogous to ERC-20 on Ethereum. Every unit of a BST-20 token is interchangeable.

Interface:

MethodMutabilityDescription
Transfer(Address to, UInt256 amount)WriteTransfer tokens from caller to recipient.
Approve(Address spender, UInt256 amount)WriteApprove a spender to transfer tokens on behalf of the caller.
TransferFrom(Address from, Address to, UInt256 amount)WriteTransfer tokens using an allowance.
BalanceOf(Address account)ViewReturns the token balance of an account.
TotalSupply()ViewReturns the total token supply.
Allowance(Address owner, Address spender)ViewReturns the remaining allowance for a spender.

BST-721: Non-Fungible Token

The standard for non-fungible tokens, analogous to ERC-721. Each token has a unique identifier and can carry an associated metadata URI.

Interface:

MethodMutabilityDescription
TransferFrom(Address from, Address to, UInt256 tokenId)WriteTransfer ownership of a token.
Approve(Address to, UInt256 tokenId)WriteApprove an address to transfer a specific token.
SetApprovalForAll(Address operator, bool approved)WriteApprove or revoke an operator for all of the caller's tokens.
Mint(Address to, UInt256 tokenId, string metadataUri)WriteMint a new token with metadata.
Burn(UInt256 tokenId)WriteBurn a token permanently.
OwnerOf(UInt256 tokenId)ViewReturns the owner of a token.
BalanceOf(Address owner)ViewReturns the number of tokens owned by an address.
TokenURI(UInt256 tokenId)ViewReturns the metadata URI for a token.

BST-1155: Multi-Token

Manages multiple token types within a single contract, analogous to ERC-1155. A single BST-1155 contract can represent fungible tokens, non-fungible tokens, and semi-fungible tokens simultaneously. Batch operations reduce gas costs by combining multiple transfers into a single transaction.

Interface:

MethodMutabilityDescription
SafeTransferFrom(Address from, Address to, UInt256 id, UInt256 amount, byte[] data)WriteTransfer a specific token type.
SafeBatchTransferFrom(Address from, Address to, UInt256[] ids, UInt256[] amounts, byte[] data)WriteBatch transfer multiple token types in one call.
BalanceOf(Address account, UInt256 id)ViewReturns the balance of a specific token type for an account.
BalanceOfBatch(Address[] accounts, UInt256[] ids)ViewReturns balances for multiple account-token pairs.

BST-3525: Semi-Fungible Token

Designed for real-world assets (RWAs) such as bonds, structured products, and tokenized securities, analogous to ERC-3525. Tokens are organized into slots, where each slot can represent a different asset class or tranche. Tokens within the same slot can transfer value between each other and can be split or merged.

Interface:

MethodMutabilityDescription
TransferFrom(UInt256 fromTokenId, Address to, UInt256 value)WriteTransfer value from a token to an address (creates a new token).
TransferFrom(UInt256 fromTokenId, UInt256 toTokenId, UInt256 value)WriteTransfer value between two tokens in the same slot.
SlotOf(UInt256 tokenId)ViewReturns the slot of a token.
ValueOf(UInt256 tokenId)ViewReturns the value held by a token.

BST-4626: Tokenized Vault

The standard for tokenized vaults that hold an underlying asset and issue shares to depositors, analogous to ERC-4626. Used for yield-bearing products, staking pools, and lending protocols. Provides standardized deposit, withdrawal, and share accounting.

Interface:

MethodMutabilityDescription
Deposit(UInt256 assets, Address receiver)WriteDeposit underlying assets and mint shares to the receiver.
Withdraw(UInt256 assets, Address receiver, Address owner)WriteWithdraw underlying assets by burning the owner's shares.
Mint(UInt256 shares, Address receiver)WriteMint a specific number of shares by depositing the equivalent assets.
Redeem(UInt256 shares, Address receiver, Address owner)WriteRedeem shares for underlying assets.
TotalAssets()ViewReturns the total amount of underlying assets held by the vault.
ConvertToShares(UInt256 assets)ViewReturns the number of shares for a given asset amount.
ConvertToAssets(UInt256 shares)ViewReturns the asset amount for a given number of shares.

BST-DID: Decentralized Identity

Implements the W3C Decentralized Identifiers (DID) specification on-chain. Provides self-sovereign identity management with support for multiple verification methods, service endpoints, and revocation.

Interface:

MethodMutabilityDescription
CreateDID(Address controller, byte[] document)WriteCreate a new DID with the given controller and initial document.
UpdateDID(byte[] didId, byte[] document)WriteUpdate the DID document. Only callable by the controller.
DeactivateDID(byte[] didId)WriteDeactivate the DID. Irreversible.
ResolveDID(byte[] didId)ViewReturns the current DID document.
IsActive(byte[] didId)ViewReturns whether the DID is active.

BST-VC: Verifiable Credentials

Implements the W3C Verifiable Credentials specification. Enables credential issuance, verification, revocation, and selective disclosure with optional zero-knowledge proof support.

Interface:

MethodMutabilityDescription
IssueCredential(byte[] credentialData, byte[] holderDid)WriteIssue a new verifiable credential to a holder.
RevokeCredential(byte[] credentialId)WriteRevoke a previously issued credential. Only callable by the issuer.
VerifyCredential(byte[] credentialId, byte[] proof)ViewVerify a credential's validity including revocation status.
IsRevoked(byte[] credentialId)ViewCheck whether a credential has been revoked.
VerifySelectiveDisclosure(byte[] disclosure, byte[] proof)ViewVerify a selective disclosure presentation.

System Contracts (Genesis)

System contracts are deployed at genesis and provide core network services. They reside at reserved system addresses and are accessible to all contracts and users.

ContractAddressPurpose
WBSLTSystemWrapped native token. BST-20 compatible wrapper around the native BST currency, enabling it to be used in contracts that expect the BST-20 interface.
BNSSystemBasalt Name Service. Human-readable name registration and resolution, mapping names like alice.bslt to addresses.
GovernanceSystemOn-chain governance with quadratic voting and delegation. Manages protocol parameter changes and treasury allocation through community proposals.
EscrowSystemTime-locked escrow for conditional transfers. Holds funds until predefined conditions (time, approval, or external trigger) are met.
StakingPoolSystemValidator staking, delegation, and reward distribution. Manages the proof-of-stake validator set and distributes block rewards to stakers.
SchemaRegistrySystemCredential schema definitions for ZK compliance. Stores and validates the schemas used by verifiable credentials across the network.
IssuerRegistrySystemTrust-tiered credential issuer management. Maintains a registry of authorized credential issuers with configurable trust levels.
BridgeETHSystemEVM bridge lock/unlock with M-of-N Ed25519 multisig verification. Enables cross-chain asset transfers between Basalt and Ethereum-compatible networks.