Skip to content

Devpack Token Standards

Back to Devpack Overview

NEP17.sol — Fungible Tokens

Complete NEP-17 implementation with ERC-20 compatibility:

solidity
interface INEP17 {
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address from, address to, uint256 amount, Any calldata data) external returns (bool);
}

Key features:

  • onNEP17Payment callback support via INEP17Receiver
  • Any type for the data parameter (maps to NeoVM's unconstrained StackItem)
  • Mint, burn, pause, and allowance management
  • Inherits FrameworkBase for ownership and witness control

NEP11.sol — Non-Fungible Tokens

Complete NEP-11 implementation supporting both indivisible and divisible NFTs:

solidity
interface INEP11 {
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function tokensOf(address owner) external view returns (bytes32[] memory);
    function ownerOf(bytes32 tokenId) external view returns (address);
    function transfer(address to, bytes32 tokenId, bytes calldata data) external returns (bool);
    function properties(bytes32 tokenId) external view returns (bytes memory);
}

interface INEP11Divisible is INEP11 {
    function balanceOf(address owner, bytes32 tokenId) external view returns (uint256);
    function transfer(address from, address to, uint256 amount, bytes32 tokenId, bytes calldata data) external returns (bool);
    function ownersOf(bytes32 tokenId) external view returns (address[] memory);
}

NEP24.sol — Royalty Standard

Minimal NEP-24 royalty mixin for NEP-11 NFTs:

solidity
interface INEP24Royalty {
    struct RoyaltyInfo {
        address royaltyRecipient;
        uint256 royaltyAmount;
    }
    function royaltyInfo(bytes32 tokenId, address royaltyToken, uint256 salePrice)
        external view returns (RoyaltyInfo[] memory);
}
  • Per-token and default royalty rules (basis points: 10000 = 100%)
  • _setDefaultRoyalty(), _setTokenRoyalty(), _clearTokenRoyalty()
  • Returns empty array when no royalty is configured

MIT Licensed