4.4.1 The different types of tokens supported by DGT

The DGT network introduces a suite of DEC token standards, tailored to cater to various use cases and functionalities. These standards take inspiration from Ethereum's ERC tokens but have been augmented to leverage the unique features of the DGT system, such as unique public keys, account linkage, and ledger records. The DEC standards ensure flexibility, security, and efficiency for token operations within the DGT ecosystem.

#

Standard

Description

Properties

Methods

Cases

1

DEC-20

Basic fungible token with enhanced features.

Allowances(address owner, address spender)

AssociatedObjectID(string)*

Balances(address account)

Decimals(uint8)

IsFrozen(address account)*

Name(string)

ObjectMetadata(string)*

Owner(address)

Symbol(string)

TotalSupply(uint256)

Unique Public Key(string)*

Allowance(address _owner, address _spender)

Approve(address _spender, uint256 _value)

AtomicOps(address[] _froms, address[] _tos, uint256[] _values)*

BalanceOf(address _owner)

Burn(uint256 _amount)

Freeze(address _account, bool _freeze)*

HandleFailedTX()*

LinkedAccountInfo(address _account)*

NotaryCheck(uint256 _verificationId)*

RetrieveObjectInfo()*

Transfer(address _to, uint256 _value)

TransferFrom(address _from, address _to, uint256 _value)

TransferWithVerification(address _to, uint256 _value, address _verification)*

UpdateObjectMetadata()

General purpose fungible tokens. Suitable for currencies, rewards points, etc.

2

DEC-721

Non-fungible token (NFT) standard.

AssociatedObjectID(string)*

IsApprovedForAll(address owner)*

isFrozen(uint256 tokenId)*

Linked Account*

Metadata URI

Name

ObjectMetadata(string)*

Owner(address)

Ownership/Creator(address)*

Series*

Token ID

Unique Public Key*

Approve(address _approved, uint256 _tokenId)

BurnToken(uint256 tokenId)*

Freeze(address _account, bool _freeze)*

HandleFailedTX()*

LinkedAccountInfo(address _account)*

NotaryCheck(uint256 _verificationId)*

OwnerOf(uint256 _tokenId)

SafeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data)

SetApprovalForAll(address _operator, bool _approved)

TransferFrom(address _from, address _to, uint256 _tokenId)

TransferWithVerification(address _to, uint256 _value, address _verification)*

UpdateObjectMetadata()*

Digital collectibles, art, unique assets.

3

DEC-1155

Multi-token standard supporting both fungible & NFTs.

AssociatedObjectID (string)*

Balances (mapping(uint256))

Batch Transfers (bool)

ContractURI (string)

Count (uint256)

Linked Account (address)*

ObjectMetadata (string)*

Operator Approval (bool)

Owner (address)

Ownership/Creator (address)*

Series (string)

Token ID (uint256)

Unique Public Key (string)*

URI (string)

BalanceOf(address _owner, uint256 _id) -> (uint256)

BalanceOfBatch(address[] _owners, uint256[] _ids) -> (uint256[])

Burn(uint256 _tokenId, uint256 _value)

IsApprovedForAll(address _owner, address _operator) -> (bool)

LinkedAccountInfo(address _account) -> (address[])

Mint(address _to, uint256 _tokenId, uint256 _value, bytes _data)

NotaryCheck(uint256 _verificationId) -> (bool)*

SafeBatchTransferFrom(address _from, address _to, uint256[] _ids, uint256[] _values, bytes _data)

SafeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data)

SetApprovalForAll(address _operator, bool _approved)

TokenURI(uint256 _id) -> (string)

TransferWithVerification(address _to, uint256 _value, uint256 _tokenId, address _verification)*

UpdateObjectMetadata(string _newMetadata)

Projects requiring multiple token types in a single contract.

5

DEC-1400

Security token standard with complex ownerships.

AssociatedObjectID(string)

Classes(string)

Claims(uint256)

DocumentNames(string[])*

Name(string)

ObjectMetadata(string)

Symbol(string)

TokenBalances(uint256)

TokenDefaultPartitions(string[])*

TokenPartitions(string[])*

TokenHolderAddresses(address[])*

Operators(address[])*

OperatorForPartition(address, string)*

UniquePublicKey(string)*

LinkedAccount(string)*

Ownership/Creator(address)*

AuthorizeOperator(address _operator)*

Burn(uint256 _amount)

ControllerTransfer(address _controller, address _from, address _to, uint256 _value, bytes _data, bytes _operatorData)*

ControllerRedeem(address _controller, address _tokenHolder, uint256 _value, bytes _data, bytes _operatorData)*

GetDocument(string _name) -> (string, uint256)*

HandleFailedTX()

IssueByPartition(string _partition, address _tokenHolder, uint256 _value, bytes _data)

IsOperator(address _operator, address _tokenHolder) -> (bool)*

IsOperatorForPartition(string _partition, address _operator, address _tokenHolder) -> (bool)*

LinkedAccountInfo(address _account) -> (address[])

NotaryCheck(uint256 _verificationId) -> (bool)

OperatorRedeemByPartition(string _partition, address _tokenHolder, uint256 _value, bytes _operatorData)

PartitionsOf(address _tokenHolder) -> (string[])*

RedeemByPartition(string _partition, uint256 _amount, bytes _data)

RevokeOperator(address _operator)*

RetrieveObjectInfo() -> (string)

SetDocument(string _name, string _uri, uint256 _documentHash)*

TransferWithData(address _to, uint256 _value, bytes _data)

UpdateObjectMetadata(string _newMetadata)

Securities, fractional ownership, and RWA tokenization.

6

DEC-998

Tokens that can own other tokens.

AssociatedObjectID(string)

ChildContracts(address[])*

Name(string)

ObjectMetadata(string)

Owner(address)

TokenID(uint256)

TotalSupply(uint256)

UniquePublicKey(string)*

LinkedAccount(string)*

Ownership/Creator(address)*

ChildTokens(address, uint256)*

BalanceOf(address _owner) -> (uint256)

GetApproved(uint256 _tokenId) -> (address)

IsApprovedForAll(address _owner, address _operator) -> (bool)

LinkedAccountInfo(address _account) -> (address[])

NotaryCheck(uint256 _verificationId) -> (bool)

OwnerOf(uint256 _tokenId) -> (address)

RetrieveObjectInfo() -> (string)

SafeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data)

SetApprovalForAll(address _operator, bool _approved)

TransferFrom(address _from, address _to, uint256 _tokenId)

RemoveChild(address _childContract, uint256 _childTokenId)*

TransferChild(address _to, address _childContract, uint256 _childTokenId)*

ReceiveChild(address _from, uint256 _tokenId, address _childContract, uint256 _childTokenId)*

GetChild(address _childContract, uint256 _childTokenId) -> (address)*

UnwrapToken(address _childToken, uint256 _childTokenId)*

UpdateObjectMetadata(string _newMetadata)

WrapToken(address _originalToken, uint256 _tokenId)*

Composable assets, game items that may have other assets attached.

The methods and properties marked with an asterisk (*) are additional or modified properties/methods in line with ERC-like standards requirements and functionalities. Central to these enhancements is the integration of methods like LinkedAccountInfo() and NotaryCheck(). These methods allow DEC tokens to leverage the powerful off-chain computation capabilities of Notary Nodes. By doing so, the network can verify specific conditions or data points outside the constraints of the blockchain, bringing in a layer of flexibility and expanded utility to the token operations.

Last updated