1. funding_amount (numeric or string, required) Fund resulting UTXO owning the asset by this much SYS for gas.
2. symbol (string, required) Asset symbol (1-8 characters)
3. description (string, required) Public description of the token.
4. contract (string, required) Ethereum token contract for SyscoinX bridge. Must be in hex and not include the '0x' format tag. For example contract '0xb060ddb93707d2bc2f8bcc39451a5a28852f8d1d' should be set as 'b060ddb93707d2bc2f8bcc39451a5a28852f8d1d'. Leave empty for no smart contract bridge.
5. precision (numeric, required) Precision of balances. Must be between 0 and 8. The lower it is the higher possible max_supply is available since the supply is represented as a 64 bit integer. With a precision of 8 the max supply is 10 billion.
6. max_supply (numeric or string, required) Maximum supply of this asset. Depends on the precision value that is set, the lower the precision the higher max_supply can be.
7. updatecapability_flags (numeric) Ability to update certain fields. Must be decimal value which is a bitmask for certain rights to update. The bitmask 1 represents the ability to update public data field, 2 for updating the smart contract field, 4 for updating supply, 8 for updating notary address, 16 for updating notary details, 32 for updating auxfee details, 64 for ability to update the capability flags (this field). 127 for all. 0 for none (not updatable).
"endpoint": "str", (string, required) Notary API endpoint (if applicable)
"instant_transfers": bool, (boolean, required) Enforced double-spend prevention on Notary for Instant Transfers
"hd_required": bool, (boolean, required) If Notary requires HD Wallet approval (for sender approval specifically applicable to change address schemes), usually in the form of account XPUB or Verifiable Credential of account XPUB using DID
10. auxfee_details (json object) Auxiliary fee structure (may be enforced if notary is set)
This step covers how to issue and transfer a non-fungible token to its first owner. To issue fungible tokens, go to subsection 4a.
Syscoin 4.2 enables issuers to optionally assign a unique identifier to an issuance, which effectively makes it an NFT. Using assetsend with NFTID will issue and allocate a non-fungible token to an address. It also signs and broadcasts the transaction to the network, and returns the transaction ID.
Further, Divisible and Non-Divisible NFTs can be issued. This article covers how to do both.
The issuer-assigned ID of an NFT is stored on the Syscoin blockchain (NFTID). Beyond the unique identifier, storage of any detailed-oriented data associated with the asset is the responsibility of the issuer, and isn't stored on the Syscoin blockchain. This is part of what keeps the Syscoin blockchain and its NFT functionality efficient and scalable.
The issuer-assigned NFTID is a 4 byte unsigned integer with a max value of 4294967295. Syscoin Core also assigns a unique identifier of the same byte-length and type to ensure global uniqueness on the blockchain. The total footprint of an NFT is only 8 bytes greater than a standard fungible token.
4b(i). How to Issue and Transfer a Fractional (Divisible) Non-Fungible Token#
In this example we will work with a testnet asset representing an inventory of up to 1,000 serialized 100oz gold bars, 6 of which have already been issued to owners.
$ syscoin-cli assetinfo 2433418946
"desc": "XYZ Vaulting Co. - 100oz AU bar - Royal Canadian Mint - Serialized"
1. issue another entire bar (1 new token) and identify it with the serial number stamped on the physical asset by the Royal Canadian Mint (13077), and send to a designated recipient address - in this case an address for which you hold the key. Send a small amount of SYS for gas to be used in the future, too.
2. Transfer 12.7251% ownership of the bar (56167720748738) to another address by using assetallocationsend. We will also send the address a small amount of SYS for gas to be used in the future. We'll make the transaction use Z-DAG by specifying to be false.
4b(ii). How to Issue and Transfer a Non-Fractional Non-Fungible Token#
In this example we will start with a testnet asset representing the inventory of an art vault.
$ syscoin-cli assetinfo 389115219
"desc": "Fitzstephen Co. Art Vault #9"
This asset was defined with a precision of 0 and a max supply of 288, because there are 288 art pieces held in the vault, and ownership of each of these will be transferred to one owner as a non-divisible token representing the entirety of the piece
You can also create an asset with precision 0 and max supply 1, effectively making the primary asset itself a non-divisble NFT. However, it's often more intuitive to issue multiple unique non-divisible tokens from a single parent asset (the inventory). This is more cost effective as you pay the asset creation fee only once (1 SYS) and are able to issue a quantity of unique child NFT's up to the max supply of the parent asset, only paying the comparatively small fee associated with assetsend for each new NFT.
Children assets inherit the attributes of the parent and are unique only by their NFTID and deterministic child assetGUID. If you want each NFT you issue to use a different Notary API, on-chain description, etc, you would use assetnew and pay the asset creation fee for each of them.
Issue one of the art pieces into the new owner's possession with assetsend in the amount of 1 token, and assign the NFTID (your own numeric identifier representing the art piece), in this case 14, your inventory number for Andy Warhol's original Self Portrait. We'll also send the new owner a small amount of SYS for gas to be used in the future (0.000098).