Combined Token Framework Chaincode Package

The combined token framework uses the extended ERC-1155 standard that is supported by Blockchain App Builder.

The NFT Art Collection Marketplace sample illustrates the use of the combined token generic framework. The sample includes a chaincode to represent a marketplace for buying and selling non-fungible tokens (NFTs) associated with works of art. In this sample, the NFT platform provider onboards museums who can mint (create) NFTs for artworks in the blockchain network. Consumers can then buy NFTs from the museums using Eth coins or ERC-20 coins. When consumers purchase NFTs, museums award loyalty tokens to their fungible token accounts. Consumers can also resell NFTs. The chaincode implements the methods that are required for managing token life cycles, including token initialization, account operations, role assignments, minting, transfers, and burning. It also provides notary accounts for approving minting, transfer, and burning operations, and supports compliance through daily limits and auditing procedures. The NFT Art Collection Marketplace sample is designed for chaincode development in TypeScript.

The combined token framework is downloadable from the Oracle Blockchain Platform console, and includes the following components.

  • NFTCollectiblesWithERC1155.zip, an archive file that contains the packaged chaincode for deployment.
  • NFTCollectiblesWithERC1155-TypeScript.yaml, a specification file that you can use with Blockchain App Builder to scaffold the NFTCollectiblesWithERC1155 chaincode.
  • NFTCollectiblesWithERC1155_postman_collection.json, a Postman collection that enables you to test the APIs in the chaincode.
  • README.md, a step-by-step guide for working with the chaincode.

To get the fungible token framework, in the Oracle Blockchain Platform Digital Assets console click the Digital Assets tab and then select Combined Token Framework.

Specification File

The specification file that is used to generate the art collection marketplace chaincode includes the events attribute. The chaincode events function supports event callbacks in generated chaincodes to enable real-time notifications and trigger workflows. For more information about specification files and the parameters used in specification files, see Input Specification File for Combined Tokens in Using Oracle Blockchain Platform.

The art collection marketplace chaincode is based on the extended ERC-1155 standard, as shown in the following specification file.
#
# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
#
 
# This specification file is an example how to build any whole combined token application that includes fungible and non-fungible tokens together.
# For a combined token application, art collection marketplace with loyalty token has been used as an example.
# Art collection marketplace is a digital marketplace for buying and selling NFT art that rewards users with fungible loyalty tokens for their participation.
 
assets:
    - name: ArtCollection #Asset name
      type: token #Asset type
      symbol: ART         # Token symbol
      standard: erc721+   # Token standard
      events: true # Supports event code generation for non-GET methods
 
      anatomy:
          type: nonfungible # Token type
          unit: whole  #Token unit
       
      behavior:
        - indivisible
        - singleton                               
        - mintable:                  
            max_mint_quantity: 20000
        - transferable               
        - lockable
        - roles:
            minter_role_name: minter
       
      properties:  # Custom asset attributes for non-fungible token
           
          - name: Price # Custom asset attribute to set the price of a non-fungible token in the marketplace
            type: float
           
          - name: On_Sale_Flag # Custom asset attribute to maintain non-fungible token selling status in the marketplace
            type: boolean
       
      metadata: # To maintain the metadata on-chain, this tag will be used. Users won't be able to update the metadata attribute values after an NFT is minted.
           
          - name: Painting_Name # Custom asset attribute to represent the title given to a piece of artwork.
            type: string
           
          - name: Description # Custom asset attribute to represent a detailed explanation or interpretation of the painting's concept, style, or message.
            type: string
           
          - name: Painter_Name # Custom asset attribute to represent the name of the artist who created the painting.
            type: string

    - name: Loyalty #Asset name
      type: token #Asset type
      standard: erc1155+   # Token standard
      events: true # Supports event code generation for non-GET methods
 
      anatomy:
          type: fungible # Token type
          unit: fractional  #Token unit
       
      behavior: # Token behaviors
        - divisible:
              decimal: 2
        - mintable:                  
            max_mint_quantity: 100000
        - transferable               
        - burnable
        - roles:
            minter_role_name: minter

      properties:
          - name: Token_Name # Custom attribute to represent the token name.
            type: string
           
          - name: Token_to_Currency_Ratio # Custom attribute to specify the token to currency ratio. This attribute is helpful for exchanging the tokens with fiat currency.
            type: number

customMethods:
    - executeQuery
    - "post(token_id: string, selling_price: number)" # Post the non-fungible token for selling in the marketplace
    - "buyWithEthCoin(from_org_id: string, from_user_id: string, to_org_id: string, to_user_id: string, nft_id: string[], loyalty_id: string[], eth_qty: number[], loyalty_reward_quantity: number[])"  # Buy the non-fungible token after paying the amount using Eth Coin and receive loyalty points in return