BLB is an ERC-20 standard token for the Boundless world project of the Future market makers team.
the maximum number of tokens is 3.69 billion tokens and cannot be minted more.
Brilliant features
Using conntract standards:
standard interface
ERC20Burnable extension to tokens can be burned.
ERC20Capped extension to limit the total supply
ERC20Permit extension to pay gas fees by only BLB token.
interface for the administration of the tokens.
Using TransferControl interface:
The admin can set a monthly fraction of the spending limit which means that every user can only spend the specified fraction of their tokens every month.
admin can restrict some addresses and specify a different limitation which makes them able to spend their tokens independent of the prevailing limitations.
Using TransactionFee interface:
Admins can set a fraction or a constant amount for every BLB token transfer. so it is considered as the internal gas fee.
transaction fees are sent to a third address which can be set by the admin.
if the transaction fee receiver is zero address, then the fee tokens are burned.
External Functions API:
BLB token contract consists of two main parts:
the openzeppelin pre-built open-source contracts.
the custom-developed unique contracts of BLB token.
we explain custom-developed functions here in detail. and link others to the openzeppelin docs.
main contract (BLBToken):
minting function API :
function
/**
* Creates amount tokens and assigns them to account, increasing the total supply.
*
* Emits a transfer event from set to the zero address.
*
* Requirements:
*
* account cannot be the zero address.
* only role MINTER_ROLE can call this function.
*/
function mint(address to, uint256 amount)
function
/**
* Mint amount of token to every member in accounts.
*
* Emits some transfer events with from set to the zero address to every account.
*
* Requirements:
*
* accounts cannot be the zero address.
* only role MINTER_ROLE can call this function.
*/
function mintBatch(address[] accounts, uint256 amount)
abstract contract (TransactionFee)
deduct the transaction fee of every token transfer and send it to a third address.
functions and events API:
/**
* @return feeAmount numerator of transaction fee which denominator is 1,000,000.
* @return feeFraction independent transaction fee for every token transfer.
* @return feeReceiver address of the fee receiver.
*/
function feeDetails()
external function
/**
* @return fee transaction fee corresponding to the transferring amount.
* @notice if there is a fee amount, the transaction fee is not proportional to the
* transferring amount.
*/
function transactionFee(uint256 transferingAmount)
external function
/**
* @notice set amount or fraction and receiver of BLB transaction fees.
*
* @notice if transaction receiver is zero address, the transaction fee will be burned.
*
* @notice requirement:
* - Only role FEE_SETTER can call this function.
* - one of the feeAmount or feeFraction must be zero.
* - fee fraction can be a maximum of 50,000 which equals 5% of the transactions
*
* @dev emits a SetTransactionFee event
*/
function setTransactionFee(uint256 _feeAmount, uint256 _feeFraction, address _feeReceiver)
event
/**
* @dev emits when the admin sets a new transaction fee plan.
*/
event SetTransactionFee(uint256 _feeAmount, uint256 _feeFraction, address _feeReceiver)
abstract contract (TransferControl)
control BLB transfers.
users may have access to transfer their whole BLB balance or only a certain fraction every month(it depends on the monthly limit).
some specific addresses may have restricted access to transfer.
contract admin can restrict every desired address and also determine a spending limit for all users.
if an address is restricted then the public monthly limit is diactivated for it.
functions and events API:
external function
/**
* @notice set spend limit for monthly transfers.
* @notice there is no transfer limit if the fraction is 10**6.
*
* @param fraction the numerator of transfer limit rate which denominator
* is 10**6.
*
* @notice require:
* - only role TRANSFER_LIMIT_SETTER can call this function.
* - maximum fraction can be 10**6 (equal to 100%).
*
* @notice emits a SetMonthlyTransferFraction event.
*/
function setMonthlyTransferLimit(uint256 fraction)
external function
/**
* @notice restrict an address
* @notice the address `addr` will be only able to spend as much as `amount`.
*
* @param addr the restricted address.
* @param amount restricted spendable amount.
*
* @notice require:
* - only the RESTRICTOR_ROLE address can call this function.
*
* @notice emits a Restrict event.
*/
function restrict(address addr, uint256 amount)
external function
/**
* @notice district an address
* @notice the address `addr` will be free to spend their BLB like regular
* addresses.
*
* @param addr the address that is going to be districted.
*
* @notice require:
* - only RESTRICTOR_ROLE address can call this function.
*
* @notice emits a District event.
*/
function district(address addr)
/**
* @return fraction the numerator of monthly transfer limit rate which denominator
* is 10**6.
*/
function monthlyLimit()
external function
/**
* @return boolean true if the address is restricted.
*
* @param addr the address that is going to be checked.
*/
function isRestricted(address addr)
external function
/**
* @return amount that the address can spend.
*
* @dev if the address is restricted, the amount equals the remaining spendable amount for the
* address. else if there is a spending limit active for the contract, the amount equals the
* address's remaining monthly spendable amount. else the amount equals the balance of the address.
*
* @param addr the address that is being checked.
*/
function canSpend(address addr)
event
/**
* @dev emits when the admin sets a new value as the monthlyLimit.
*/
event SetMonthlyTransferLimit(uint256 fraction)
event
/**
* @dev emits when the admin restricts an address.
*/
event Restrict(address addr, uint256 amount);
event
/**
* @dev emits when the admin districts an address.
*/
event District(address addr);