Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 158 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Nuvo Documentation

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Get Started

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Developer Guide

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

How to mint

Overview

Introduction

The NuvoSphere Inscription Platform is designed for seamless interactions with EVM-compatible blockchains. It integrates key components including a blockchain event indexer, a user-friendly frontend, and a comprehensive REST API, making it an all-encompassing platform for managing blockchain transactions.

Objective

Aiming to provide a streamlined experience, the platform simplifies various blockchain operations like token deployment, minting inscriptions, and transaction management. It is tailored to cater to a wide range of users, from beginners to experienced developers, ensuring accessibility and efficiency.

Nuscriptions

Spot

Step 1 - Connect account

  1. Click "Connect Wallet"

  1. Select Connect Wallet through Nuvo or Metamask

    (You are recommended to connect via Nuvo as your referral and transaction activities will be tracked through your Nuvo account, and you may be eligible for fee rebates and other benefits)

  1. (Through Nuvo)Choose to login either through email, google account and more

  1. (Through Metamask)Enter credential of your Metamask plugin and approve metamask permissions to login through Metamask.

Feedback and Notifications

Feedback and Notifications

Real-Time Transaction Feedback

Overview

API Overview

Base URL

Get Deployment Details

Get Deployment Details

Path

Progress Indicators: When a transaction is initiated (deploy, mint, transfer), the interface displays a progress indicator.

  • Confirmation Messages: Upon successful completion of a transaction, a confirmation message is displayed.

  • Error Handling and Alerts

    • Error Notifications: The interface provides clear error messages for failed transactions or issues.

    • Guidance: Suggestions for corrective actions in case of errors are provided.

    Status Updates

    • Transaction Status: Updates on transaction status (pending, confirmed, failed) are displayed.

    • Wallet Connectivity: Notifications regarding wallet connection status are shown.

    The API is accessible at https://nip-api.nuvosphere.io.

    Authentication

    • Currently, the API does not require authentication. This may change in future updates.

    Usage Guidelines

    • The API is designed for efficient interaction with blockchain data.

    • Users should respect rate limits to ensure service stability.

    • Requests should be properly formatted according to the specifications of each endpoint.

    Hotfix1

    Jan 19: Due to an error in the smart contract, we need to override the contract address of NUVOGENESIS by replacing "0x6c38B96C3417D46431906744B0D2D605dEA30fd3" with "0x213675a2BdF53F910972E43166165a08f1AD4489" when indexing block 11097263

    Derivatives

    Coming soon ......

    NuvoOne_Campaign

    49MB
    NuvoOne_Campaign.mp4
    Open

    NuvoMe_Claim event badge

    20MB
    NuvoMe_Claim event badge.mp4
    Open

    NuvoOne_Login

    16MB
    NuvoOne_Login.mp4
    Open

    Marketplace

    User APIs

    NuvoOne_Manage Distribution

    26MB
    NuvoOne_Manage_Distribution.mp4
    Open

    NuvoOne_Introduction

    15MB
    NuvoOne_ Build atop a better platform to create apps and community without reinventing the wheel.mp4
    Open

    Step by Step guide to Issue Nuvo Badge

    In this guide we describe step-by-step guide to develop, test and deploy a Nuvo badge project. The main steps are

    • Access Nuvo One test environment

    • Create a new application

    • Issue Nuvo Badge

    • Test Nuvo Badge on testnet

    • Deploy Nuvo Badge project on main net

    NuvoID_Introduction

    25MB
    NuvoID_ Quick Demo.mp4
    Open

    Wallet APIs

    Quick Guide

    NuvoOne_Deploy Badge

    43MB
    NuvoOne_Deploy_Badge.mp4
    Open

    Nuvosphere

    Demo videos

    Token Transfer

    NFT Badge Deploy

    <Note> It may take time for the process, there will be a slight delay in API queries related to NFT transactions

    Auction

    Coming soon ......

    GET /deployment/:ticker

    Description

    • Retrieves deployment details for a given ticker, such as contract address and deployment parameters.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the ticker has not been deployed.

    • 500 Internal Server Error: For server-related issues.

    GET /deployment/ETH
    {
      "deployment": {
        "contractAddress": "0x789ghi...",
        "maxAmount": 1000,
        "mintLimit": 100,
        // ... other deployment details
      }
    }

    API

    API Documentation

    The REST API of the NuvoSphere Inscription Platform provides programmatic access to blockchain operations. This section documents each endpoint, detailing request formats, responses, and examples.

    Overview

    • Describes the base URL, authentication methods (if any), and general usage guidelines.

    Endpoint Details

    Each endpoint is documented with:

    • Path: The URL path of the endpoint.

    • Method: HTTP method (GET, POST, etc.).

    • Parameters: Required and optional parameters.

    • Request Example: Sample request format.

    Sample Endpoints

    • Get Next ID for Minting

      • Path: /:ticker/nextid

      • Method: GET

      • ...

    Usage Examples

    • Code snippets or example requests to demonstrate how to interact with each endpoint.

    Error Handling

    • Information on how the API communicates errors and how to interpret th

    CheckID Availability

    Check ID Availability

    Path

    • GET /:ticker/checkid

    Description

    • Determines if a specific ID is available for minting under the given ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • id: The ID to check for availability (query parameter).

    Request Example

    Response Example

    Error Responses

    • 400 Bad Request: If the ID is invalid or not provided.

    • 404 Not Found: If the specified ticker does not exist.

    • 500 Internal Server Error: For server-related issues.

    Get Delegation Amount

    Get Delegation amount information

    Path

    • GET /:address/:ticker/:target/delegation

    Description

    • Return delegation amount of a ticker from address to a target address before a maximum height.

    Parameters

    • address: The address to delegate from (path parameter).

    • ticker: Ticker symbol (path parameter).

    • target: The address to delegate to (path parameter)

    • height: Maximum revoke height (Optional query parameter)

    Request Example

    Response Example

    Error Responses

    • 500 Server Error: For server-related issues.

    Deploy the Nuvo Badge Project on Testnet

    Once all information is filled, we can now deploy Nuvo Badge project on testnet.

    Get Status of an Transaction

    Get Status of an Transaction

    Path

    • GET /:tx_hash/status

    Description

    • Return the status of an inscription transaction

    Parameters

    • tx_hash: Transaction hash(path parameter).

    Request Example

    Response Example

    Get Next ID for Minting

    Endpoint Details: Get Next ID for Minting

    Path

    • GET /:ticker/nextid

    Description

    • Retrieves the next available ID for minting a new inscription for the specified ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the specified ticker does not exist.

    • 500 Internal Server Error: For server-related issues.

    Get Number of Holders for Ticker

    Path

    • GET /holder/:ticker

    Description

    • Get number of holders for a ticker

    Parameters

    • tick: Ticker symbol (query parameter)

    Request Example

    Response Example

    Construct Transfer Message

    Construct Transfer Message

    Path

    • GET /message/transfer/:ticker/:id

    Description

    • Generates a transfer message for a given ticker and ID.

    Parameters

    • ticker: Ticker symbol (path parameter).

    • id: Token ID (path parameter).

    Request Example

    Response Example

    Navigate to NuvoBadge Claim

    https://badge.nuvosphere.io/

    You can navigate to NuvoBadge Claim by the URL directly or you can find the link in NuvoMe

    <Figure 1.1> Click NuvoBadge Claim

    How to Claim the Badge

    Once you have completed the requirements and are eligible to claim the badges, you can navigate to NuvoBadge Claim. If the badge is distributed by QR code, you can scan the QR code and claim the badge. Else the badge is distributed by redemption code or whitelist, you can navigate to the CLAIM page and claim the badge with your redemption code provided by the Dapp owner and wallet address directly.

    <Figure 1.1> NuvoBadge Claim Page

    Distribute Nuvo Badge

    We recommend reading How to issue NFT Badge and set up the campaign for more detailed description on setting up Badge campaign. For distribution method, we recommend using "mass distribution with 1 QR code", which is currently the most well-supported method.

    How to create a dapp

    Dapp

    The Dapp developers can create an application through the Nuvo platform and get the API Key for future development. To create a New App we will need you to enter with App Name, User Support Email, choose your App Logo, Dapp URL link, Dapp Authorized Domain, Dapp Permission, and Developer information.

    When your first Dapp is created then you can find the Dapp Key and Id on the Dapp Credentials. This credential is required when you are using API to call the Dapp.

    Step4 - Check my account

    1. When signed in, click wallet address

    2. Click “My account”

    3. You may now view your total asset, NuvoBadge status, RP, rebate, and more.

    List All Minted Inscriptions

    List All Minted Inscriptions

    Path

    List Owned Tokens

    List Owned Tokens

    Path

    Step-by-Step Instructions

    Step-by-Step Instructions for Frontend Usage

    Connecting a Wallet

    Construct Mint Message

    Construct Mint Message

    Path

    How does Reputation Power work

    How does it work?

    Reputation Power (or RP) is accrued by performing actions on-chain. Each action has its own RP value set by projects, allowing projects to reward community members and Dapp users for valued achievements and milestones. For example, a DEX might value governance voting more heavily than trade executions, as an action that helps the project shape the future of its design; therefore, the project can award more RP for voting than trading on the DEX.

    RP accrual is a bit like earning XP in a video game. Similar to a game, individuals can earn RP to level up and gain benefits like the ability to mint nontransferable NFT Badges on their Nuvo profile, representing milestone achievements on-chain. NFT Badges are issued by Nuvo or other Dapp on Andromeda and are tied to a user’s wallet address on the Nuvo network. Individuals will be able to build their own profiles, check out new RP features, and look up profiles for other users and DACs. Long-term community engagement is empowered, even adding a social element for communities to uniquely reward users for their engagement and contributions.

    Indexer

    Indexer Logic

    The Indexer in the NuvoSphere Inscription Platform is a sophisticated component designed to interact with EVM-compatible blockchains, processing direct operations and contract-emitted events.

    Functionality

    Get Dapp info

    Get Dapp info

    GET /api/v1/oauth2/applications/get_app_info

    How to design an NFT badge

    👋 Hi! Welcome to Nuvo. This guide will teach you the principle of optimizing your NFT badge design.

    🪄NFT Badge Composition

    The NFT badge comprises a pattern (image) and badge shell. The Dapp's / NFT badge issuer is responsible for designing the pattern (image). The badge shell's color depends on the Reputation Power(RP) you set. The design will then be combined with the badge shell to form a unique NFT badge.

    Access Nuvo One test environment

    Nuvo provides a ready-to-use sandbox environment for badge issuers. Simply go to one.staging.nuvosphere.io to access this sandbox enviroment. There are many ways to register or login to the environment, in this guide we use metamask as an example.

    Click the Metamask icon and bring up Metamask approval page

    Click "Sign" button to login to the sandbox environment.

    Reputation Power Web 3.0 for Dapp Owners

    Reputation Power Web 3.0 for Dapp Owners

    There is an important discussion around Web 3.0 about the ability to manage the identity and reputation of each user that joins the platform. Reputation is very important in our physical world that helps financial processes perform without any issues. To prove the trustworthiness and reliability of the new Web platform, Dapp owners must consider reputation power when using Web 3.0 features.

    NuvoOne_Web2 integrated with Nuvo

    Step 3 - Check owned tokens

    If mint is successful, user will be automatically redirected to the "owned token" page. You can exam your owned tokens here.

    API List

    Create a new application

    One logged into the Nuvo One dashboard, we first need to create an application associated with the Nuvo Badge. To do this, click the "Application" menu item on the left menu bar, and click "Create" button (or click "Create New App" tab).

    Fill in all the requried field of the application and click "save"

    NuvoOne_Create Dapp

    Navigate to NuvoMe

    https://me.nuvosphere.io/

    Dashboard

    You may want to check your personal wallet detail information such as Wallet Address, Token Distribution, and Transaction Records. Here you can grab the information you need on the platform.

    Repeat The Process on Nuvosphere Production Environment

    Once your Nuvo Badge is live on test environment, and got tested well, we will be ready to deploy it on production environment! Simply go to one.nuvosphere.io and repeat the previous process. Note to select Metis mainnet (Andromeda) instead of testnet.

    Finally, this is a quick step-by-step guide to get new user of Nuvosphere start quickly. For more comprehensive documentation, please refer to for more details.

    Get Token Owner

    Get Token Owner

    Path

    Step 2 - Mint

    1. Search token name via search bar or through the list

    2. Click the selected token

    3. (On the right hand side) enter the amount you wish to mint. It can not be more than the amount limit per mint

    Get Tokens

    Path

    • GET /token/gettokens

    Get user info

    Get user info

    GET /api/v1/oauth2/user/userinfo

    Inscription Existence Verification (tx_hash)

    Transaction Existence Verification

    Path

    Response Example: Example of the expected response.

  • Error Responses: Common error codes and their meanings.

  • Check ID Availability

    • Path: /:ticker/checkid

    • Method: GET

    • ...

  • Transfer Ownership

    • Path: /message/transfer/:ticker/:id

    • Method: GET

    • ...

  • Access Wallet Connection: Click on the 'Connect Wallet' button.

  • Select Wallet: Choose your wallet from the list provided by the Web3Modal.

  • Authorize Access: Confirm the connection in your wallet.

  • Deploying a Token

    1. Navigate to Deploy Tab: Select the 'Deploy' tab in the interface.

    2. Enter Details: Fill in the token ticker, max amount, and mint limit.

    3. Deploy: Click the 'Deploy Token' button and confirm the transaction in your wallet.

    Minting Tokens

    1. Select Mint Tab: Go to the 'Mint' tab.

    2. Input Details: Provide the ticker, amount, and recipient address.

    3. Mint Token: Click 'Mint Token' and confirm the transaction.

    Transferring Tokens

    1. Access Owned Tokens: Switch to the 'Owned Tokens' tab.

    2. Initiate Transfer: For the chosen token, enter the recipient's address.

    3. Confirm Transfer: Click the 'Transfer' button and approve the transaction in your wallet.

    Reputation Power will be rolled out as

    1. Nuvo Power System: The Nuvo backend which empowers every Andromeda Dapp to deploy and issue their own NFT Badges as well as the Nuvo Power which is the frontend user portal for interacting with all things RP.

    2. NFT Badges: As the first integration of Reputation Power, the Nuvo team and projects on the network will release the first wave of RP NFT Badges. NFT Badges will be issued to eligible users based on multiple categories such as early usage of Andromeda or governance voting.

    Event Listening: Continuously monitors blockchain events.

  • Data Indexing: Indexes data from events for efficient retrieval and processing.

  • Processing Operations

    • Deploy, Mint, and Transfer: Processes these operations based on predefined message formats.

    • Ownership Tracking: Maintains a record of token ownership from minting through subsequent transfers.

    Event Handling

    • Parses and processes events related to token deployment, minting, and transfer.

    • Contract Events: Additionally handles specific contract-emitted events that allow for token transfers, enhancing the platform's integration with smart contracts.

    Validation and Error Handling

    • Robust validation mechanisms ensure data integrity and correct operation.

    • Error handling manages parsing errors, invalid data, and communication issues with the blockchain.

    26MB
    NuvoOne_How can web2 application Integrate with Nuvo .mp4
    Open
    93MB
    NuvoOne_Create_Dapp.mp4
    Open
    Product Guides
    <Figure 1.2> NuvoBadge Claim Page

    Product Guides

    Nuvosphere appears to provide a suite of four different platforms to serve the needs of web2 and web3 users. Here is some more information about each platform:

    NuvoOne -

    This is a middleware that developers can use to build decentralized applications (dapps), smart contracts, and NFT badges. Providing a common set of services that multiple applications can use. NuvoOne provides developers with tools and services to create decentralized applications that can interact with the blockchain.

    NuvoMe -

    This is an end-user platform that allows users to own transaction wallets and personal profiles. This platform enables users to securely manage their digital assets, interact with dapps, and control their own data. With NuvoMe, users can also access and manage their NFT badges.

    NuvoID -

    This is a platform that allows end-users to mint their own web3 avatar. An avatar is a digital representation of a user in the virtual world. NuvoID enables users to create a unique and personalized avatar that can be used in different applications and platforms across the web3 ecosystem.

    NuvoBadge Claim -

    This platform enables end-users to claim NuvoBadge. A badge is a digital credential that represents an achievement or a skill. NuvoBadge enables users to earn and claim badges for their accomplishments, which can be used to showcase their skills and knowledge to others.

    What's different

    Unique Features of the NuvoSphere Inscription Platform

    The NuvoSphere Inscription Platform stands out with several unique features:

    1. Customizable Minting Process:

      • Deployers can specify contracts to refine controls over the minting process, offering flexibility and enhanced security.

    2. Unique Sequencing for Minting:

      • While global uniqueness isn’t enforced, the platform ensures a unique sequence in the minting process, making it fairer and more manageable.

    3. Integration with Nuvo Platform:

      • Fully integrated with the Nuvo platform, providing a range of login methods backed by industry-leading MPC wallet technology.

    4. Marketplace with Derivative Support:

      • An upcoming marketplace feature will allow easy operation and support for derivatives, broadening the platform’s capabilities.

    5. Snapshot Features for Token Balances:

      • Periodic on-chain snapshots of token balances are taken, ensuring permanence and reliability of data without the worry of data purges.

    These features make the NuvoSphere Inscription Platform a comprehensive, secure, and user-friendly environment for blockchain interactions.

    Frontend

    Frontend Usage

    The NuvoSphere Inscription Platform's frontend is designed for ease of use and accessibility, enabling users to interact with the blockchain efficiently.

    Interface Overview

    • User-Friendly Design: A clear and intuitive interface for all user interactions.

    • Functionality Access: Easy access to key features like token deployment, minting, and transferring.

    Navigating the Frontend

    • Detailed instructions on navigating the interface, accessing different functionalities, and performing key operations.

    User Guide

    • Step-by-Step Instructions: Walkthroughs for common tasks such as connecting a wallet, deploying a token, minting, and transferring tokens.

    • Feedback and Notifications: Information on how the interface provides transaction feedback and status updates.

    Badge APIs

    What are NFT Badges?

    All Dapp owners can design NFT badges and they help developers trace every user’s credibility within the Web 3.0 ecosystem. An NFT badge is a great approach for Dapps that provides an opportunity to encompass the achievements and acknowledgments of a member.

    A social resume in Web 3.0 can be built on the activity of members and their interactions in the ecosystem. This way, members can mint a unique social NFT which will store all their interactions. Thus, a reputation power factor will be created by performing actions in the Web 3.0 ecosystem.

    What is Reputation Power and Why Do We Need It?

    Nuvo provides you with an active and live environment and everyone can mint NFT badges and get reputation power according to contributions to the Nuvo ecosystem.

    Nuvo works to give everyone reliable information using the Nuvo RP system and it helps everyone get full insight into members’ social credibility.

    As a Web 3.0 enthusiast or Nuvo developer, you can sign up on the Nuvo RP system and help yourself with designing your unique social NFT and enhancing your reputation power.

    Starting a social NFT is an opening to get a range of capabilities and fulfill Web 3.0 transactions without any issues.

    Singing up on the platform is as easy as ABC and you can deploy NFT badges following a few steps.

    Where to Get Started with
    GET /holder/NUVOGENESIS?tick=NUVOGENESIS

    GET /mints/:ticker

    Description

    • Retrieves all minted inscriptions (identified by transaction hash) for a specific ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If no minted inscriptions are found for the given ticker.

    • 500 Internal Server Error: For server-related issues.

    GET /tokens/ownedBy

    Description

    • Retrieves a list of tokens owned by a specified wallet address.

    Parameters

    • address: The wallet address of the user (query parameter).

    Request Example

    Response Example

    Error Responses

    • 400 Bad Request: If the wallet address is not provided or invalid.

    • 500 Internal Server Error: For server-related issues.

    GET /message/mint/:ticker/:id/:amount

    Description

    • Creates a mint message for a specific ticker, ID, and amount.

    Parameters

    • ticker: Ticker symbol (path parameter).

    • id: Token ID (path parameter).

    • amount: Amount to mint (path parameter).

    Request Example

    Response Example

    GET /owner/:ticker/:txhash

    Description

    • Determines the current owner of a specific token, identified by its ticker and transaction hash.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • txhash: The hash of the transaction to trace ownership (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the ticker or transaction hash does not correspond to an existing token.

    • 500 Internal Server Error: For server-related issues.

    Description
    • Get all the tokens deployed on the network.

    Parameters

    • page: Ticker symbol (path parameter). Optional, default=1

    • pageSize: Token ID (path parameter). Optional, default=5000

    Request Example

    Response Example

    GET /:ticker/:tx_hash/exist

    Description

    • Verifies the existence of a specific minted inscription for a given ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • tx_hash: The hash of the transaction that minted the inscription to verify (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the ticker or transaction hash does not exist.

    • 500 Internal Server Error: For server-related issues.

    GET /NUVOGENESIS/checkid?id=2000000
    {
      "isAvailable": true
    }
    GET /0xf9a3020c71Ba4F62364c624242D54a1229f3125F/NUVOGENESIS/0x213675a2BdF53F910972E43166165a08f1AD4489/delegation
    {
        "delegation": null
    }
    GET /0xd8e6e275831070677851bef893f9203254a63a3d6852fe9d951d5c2966642a98/status
    {"status":"success"}
    GET /NUVOGENESIS/nextid
    {"nextId":1013465,"tokenType":"nip-20","contract":"0x213675a2BdF53F910972E43166165a08f1AD4489"}
    "11939"
    GET /message/transfer/ETH/1
    {
      "message": "data:,{\"p\":\"nip-20\", \"op\":\"tsf\", \"tick\":\"ETH\", \"id\":\"1\"}"
    }
    GET /mints/ETH
    jsonCopy code{
      "mints": [
        {
          "tx_hash": "0x789abc...",
          "amount": 50,
          // ... other mint details
        },
        // ... more minted inscriptions
      ]
    }
    GET /tokens/ownedBy?address=0x456def...
    {
      "ownedTokens": [
        {
          "tokenId": "0x123abc...",
          "ticker": "ETH",
          "amount": 100
        },
        // ... more tokens
      ]
    }
    GET /message/mint/ETH/1/100
    {
      "message": "data:,{\"p\":\"nip-20\", \"op\":\"mint\", \"tick\":\"ETH\", \"id\":\"1\", \"amt\":\"100\"}"
    }
    GET /owner/ETH/0xabc123...
    {
      "owner": "0x123ownerAddress..."
    }
    GET /token/gettokens?page=2&pageSize=1
    {
       "tokens":[
                    {
                    "ticker":"10",
                    "maxamount":"1000",
                    "mint_limit":"10",
                    "data":"data:,{
                                    \"p\":\"nip-20\",
                                    \"op\":\"deploy\",
                                    \"tick\":\"10\",
                                    \"max\":1000,
                                    \"lim\":10,
                                    \"contract\":\"0xDe1499B52DAF275F9DcE6630881c93A59Da0224b\",
                                    \"cmint\":1,
                                    \"dataurl\":\"\",
                                    \"of\":\"data:,{
                                                    \\\"p\\\":\\\"nip-20\\\",
                                                    \\\"op\\\":\\\"deploy\\\",
                                                    \\\"tick\\\":\\\"NUVO\\\",
                                                    \\\"max\\\":\\\"10000\\\",
                                                    \\\"lim\\\":\\\"50\\\"}\"}",
                    "block_number":"11128992"}
         ]
    }
    GET /ETH/0x1234abcd.../exist
    {
      "exists": true
    }
    <Figure 1.4> Dapp Credentials

    <Figure 1.1> Create New Dapp
    <Figure 1.2> Create New Dapp
    <Figure 1.3> Create New Dapp
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "dapp_permission": 0,
            "domains": [
                "localhost:1024"
            ],
            "home_page_link":
    

    👁️‍🗨️ Color scheme for NFT badge shell

    The color of the NFT Badge shell will change automatically based on the Reputation Power(RP) you determine for that badge. Please refer to the below table for the range of each color.

    NFT badge image checklist

    Please refer to the below checklist before uploading your image.

    🤗 Required:

    • Ensure the image is in either of the format: .jpg, png, webp, or SVG.

    • Ensure the image size is equal to or below 2M.

    🌟Recommended:

    • It is recommended to upload 600*600 px bitmaps or 1:1 equal scale vector images.

    • Icon with Alpha transparent layer is better for the badge.

    • Using a pattern with a contrasting color to the badge shell can make the badge more eye-catching and unique.

    Account Security

    In Nuvo, we are aware of the security issues and aim to provide a well-secure environment for our users to engage with. We have provided

    1. 2FA Security Verification

    You can enhance your security by enabling Email Verification and either Google Authentication or SMS Verification

    <Figure 1.2> 2FA Security Verification

    2. Wallet Password

    Setup another wallet password can also enhance your wallet’s security

    <Figure 1.3> Wallet Password Setting

    3. Anti-Phishing Code

    By enabling this functionality, you can set up personal email sentences every time you receive an email from Nuvo

    <Figure 1.4> Email Anti-Phishing Code

    4. IP and Devices Logs

    By checking the login device's IP address and the browser you are using, we can cross-confirm the login credentials

    <Figure 1.5> IP and Devices Logs
    <Figure 1.5> IP and Devices Logs

    5. IP Address Verification

    By enabling this functionality, you can make sure the account is logged, in through one single IP address at a time

    <Figure 1.6> IP Address Verification
    <Figure 1.1> Dashboard
    Make sure the recipient address is accurate
  • Click Mint token. You will need to have sufficient Metis token as gas fee to proceed

    1. The following dialog will display in order to proceed, click "Accept"

    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "avatar": "https://metis-middleware-us-east-2.s3.amazonaws.com/057a151e83f948d587f0fd10f0e68525",
            "display_name": "display name",
            "email": "[email protected]",
    

    Get Balance of an Inscription for an address

    Get Balance of an Inscription for an Address

    Path

    • GET /:address/:ticker/balanceb

    Description

    • Return the balance of an inscriptoion for an address.

    Parameters

    • address: The wallet address of the user (path parameter).

    • ticker: Ticker symbol (path parameter).

    Request Example

    Response Example

    Navigate to NuvoID

    https://pass.nuvosphere.io/views/myProfile

    You can navigate to NuvoPass by the URL directly or you can find the link in NuvoMe

    <Figure 1.1> Click NuvoPass

    Badge Display Wall

    Navigate to NuvoID you will see the personal NuvoID information. Click EXPLORE the displaying badges are all the projects launched in Nuvo and issued with NFT badges.

    Mint NuvoID

    The first thing first is to mint your NuvoID in Nuvo! Smash the Mascot and navigate to the NuvoID Minting page. Give your avatar a name and pay with a few Gas Fees (Metis token), and you are all set. The avatar is minted by random so be excited about what your unique avatar will look like!

    <Figure 1.2> Unique NuvoPass avatar

    Ranking Board

    How do you know which is the best engaging Dapp and the most popular Badges in the web3? Nuvo has provided a Ranking Board for your easy reference to browse through the whole list. There are three types of ranking categories.

    1. Dapp Ranking

    You will see the Top ranking Dapps with the information on how many NFT Badges have been issued, and how many users have claimed the badges.

    2. User Ranking

    You will see the most engaged user list with the amount of how many NFT Badges they have claimed and how many RP values they have.

    3. NFT Badges Ranking

    You will see the NFT Badges top ranking list according to the amount of the minted NFT. The more NFTs being minted the more users get engaged.

    My NFT Badge Collection and NP

    To check my personal NFT badge collection and RP value, by clicking on the NuvoID avatar you can see your current Total Reputation Power, Joined Days, Total Badges, and the list of your claimed Dapp list.

    Navigate to NuvoOne

    https://one.nuvosphere.io/

    NuvoOne is a place for developers to dive in and create Domain, Dapps, smart contract, and issue the Nuvo Badge. Check out below to find out more

    Dashboard

    In Nuvo One Dashboard you can grab the information of all your Dapps and get an idea of the Active users, and API calls based on the different periods of time.

    <Figure 4.1> Dashboard

    Domain

    Domain management can let you create a unique domain and associate the domain with the smart contract deployed on multiple chains. Each chain has unique specifications, and contracts on multiple chains have different addresses. Nuvo helps to achieve the feature with Domain management.

    A contract associated with a decentralized application can be deployed on multiple chains. Our job is to provide a unique identifier of the contract on any number to manage multiple domains from one central place. Nuvo helps you achieve this feature with domain management options.

    • Dapp developers can create a unique domain and associate the domain with a smart contract that has been deployed on multiple domains.

    • The created domain can be simply updated to point to a new contract address.

    • Other smart contracts can call methods based on the created domain.

    • Users can trade domains on the domain marketplace.

    1. Searching Global Domain

    Global domains are here to help you with APIs and you can use them on the Nuvo platform. You can use global domains to create a decentralized application using the Nuvo dashboard. Global domains are ready to use and provide quick deployment for decentralized apps. Type a keyword in the search box to access the global domain you want in no time.

    2. Creating or Editing Domain

    Nuvo allows you to create a new domain associated with specific smart contracts. Sign up and log in to your Nuvo account and go to the Domain management section to create a new one.

    You can create a new domain by clicking on “Create New Domains” and giving the required information to manage everything in Nuvo. The domain name can be anything and you can set the chain ID and the contract address as well.

    There is an option to edit each domain, delete the domain, and apply more settings if needed.

    Smart Contract

    Developers can use the “Smart Contract” section on the Nuvo platform to manage their smart contracts and register new ones. Here you have two options that you can use to register a new template or search for created templates.

    1. Register New Templates

    You need your smart contract code and some information to register a new template. Click on the “Register” icon to proceed. You can register your template in the new window by providing the template name, source code, and some other information.

    Query Smart Contracts

    Querying smart contracts can be done in the “Smart Contract” section. Use the “template name” box to set a name and click on the “Query” icon to proceed.

    You can use the “Review Details” button to check the template’s information and customize it to deploy on a specific domain created before.

    Oauth2 Authorization

    Production Env

    https://api.nuvosphere.io

    Staging Env

    https://api.staging.nuvosphere.io

    Step1 - Initiate authorization

    Request for log in

    description

    Step2 - Receive authorized code

    After initiating authorization, Nuvo will return_url and code

    The developer will receive url(https://demo.dapp.com/callback), keep the code for the access token use

    Step3 - Request Access Token

    Request access token

    GET /api/v1/oauth2/access_token

    Query String: ?appid={appid}&code={code}

    code: the code kept from step2

    appid: app id that can be acquired from Nuvo One

    Request Body

    Name
    Type
    Description

    How to issue NFT Badge and set up the campaign

    Issue Nuvo Badge

    Once we have created Dapp, the next step is to deploy NFT Badges! Navigate to the Deploy NFT, enter the NFT Name, select the Dapp that you just created, start/end date, define 1-5 levels of your badges, and the last step is to upload the image of your badges.

    <Figure 1.1> Issue Nuvo Badge

    You can find your deployed NFT badge list on the collections and feel free to adjust the information such as NFT badge name, start/end time, badge image, and also Run Promotion for all of the badges.

    <Figure 1.2> Check issued Badge

    Set up the Campaign

    Once you have created Dapp and successfully deploy NFT Badges, you can keep moving on to set up the campaign for the Badge.

    There are three different distribution ways for you to choose from

    1. Issue Redemption Code - By choosing this option you will be able to get a series number, you can provide the serial number to your eligible users to go and claim the badges. Figure 1.5

    2. Issue Unique Link with QR Code - By choosing this option you will be able to get a QR Code, you can provide the QR Code to your eligible users to go and claim the badges. Figure 1.6

    3. White List(wallet address) - By choosing this option you will be able to provide the whitelist through a txt file or manually input the address, eligible users can claim the badges accordingly. Figure 1.7

    Get Eth Address with NuvoID

    Get Eth Address with NuvoID

    GET /api/v1/oauth2/user/nuvoId/<nuvoId>

    Path Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Get Transaction History of a Token

    Get Transaction History of a Token

    Path

    • GET /transactions/:ticker/:txhash

    Description

    • Retrieves the full transaction history for a given ticker and transaction hash.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • txhash: The hash of the transaction (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If no transaction history is found for the given ticker and transaction hash.

    • 500 Internal Server Error: For server-related issues.

    Get Dapp list

    Get Dapp list

    GET /api/v1/oauth2/applications/selects

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Get Eth Address with Name

    Get Eth Address

    GET /api/v1/oauth2/user/<name>

    Path Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Get balance

    Get balance

    POST /api/v1/oauth2/balance

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Get chain URL

    Get chain URL

    GET /api/v1/oauth2/chainurl

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Issue Nuvo Badge

    Once we have created an application, we are now ready to issue a Nuvo Badge. Simple go to "NuvoBadge Issuer" menu item on the left navigation menu, and click "+ Issue NuvoBadge".

    Now we need to fill in information related to the badge.

    • DApp - this is the application that we just created which is going to be associated with the NuvoBadge project, simply select it from the drop-down box.

    • Chain - In this case we'll leave the default Goerli test net chain. Note that in production deployment, we should use Metis mainnet (Andromeda).

    • Badge levels - You can design a badge and RP scheme to suite your project needs. Please refer to for detailed guide.

    • Badge image - upload your badge image (one for each badge level)

    Verify wallet pwd

    Verify wallet pwd

    POST /api/v1/oauth2/verify_wallet_pwd

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Get latest price

    Get latest price

    GET /api/v1/cryptocurrency/quotes/<symbol>

    Headers

    Name
    Type
    Description

    Where to Get Started with

    In this session, we will show you how to first use our platform and get started with the web3 decentralized world

    Congratulations on joining Nuvo Power!

    Our innovative solution helps brands improve user and employee retention, engagement, and loyalty through gamified rewards. Users are in control of their own data and credentials and gain reputation power through actions and contributions.

    Get SDK transaction record

    Get transfer list

    GET /api/v1/oauth2/wallet/sdk/txlist

    Save token transfer info

    Save token transfer info

    POST api/v1/oauth2/wallet/save_token_tx

    Get transaction info

    This api will retrieve receiver, return eth_address for transaction, and calculate initial gas at the same time

    Get transaction info

    POST api/v1/oauth2/wallet/token_tx_info

    Confirm transaction

    Confirm transaction

    POST /api/v1/oauth2/confirm_tx

    Who are our customers

    Customer Segments

    Segment #1: Web3 Users

    Segment #2: Web2 Users

    Segment #3: Web2 Businesses

    Segment #4: Web3 Businesses

    Segment #5: Developers/Partners

    Construct Deployment Message

    Construct Deployment Message

    Path

    `${host}/#/oauth2-login?switch_account=${switchAccount}&app_id=${appId}&return_url=${encodeURIComponent(returnUrl)}`
    switch_account:  switch user account
    app_id        :  Nuvo middleware app id
    return_url    :  Nuvo middleware Authorized Domains
    "https://polis-test.metis.io/"
    ,
    "logo": "",
    "name": "appname",
    "privacy_policy_link": "https://polis-test.metis.io/",
    "tos_link": "https://polis-test.metis.io/"
    },
    "message": "",
    "msg": "",
    "msgTitle": null
    }
    "eth_address": "0x14A30580CC7555F1DBE4A36E8B79582e85c4B330",
    "last_login_time": 1666285419898,
    "openid": "04bf5e8e7b7a4f9b9905984d0fdfdf7f",
    "update_time": 1663867028266,
    "user_type": "discord",
    "username": "username",
    "wallet_type": "POLIS"
    },
    "message": "",
    "msg": "",
    "msgTitle": null
    }
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    Request Body

    Name
    Type
    Description

    chainid*

    String

    chainid

    {
        "code": 200,
        "data": "0.1",
        "message": "",
        "msg": "",
        "msgTitle": null
    }
    Key benefits for each of the Customer Segments:

    Segment #1: Web3 Users:

    • Integrate the full spectrum of decentralized ID solutions in a single Self-Sovereign Identity, accessible through a single, multichain login, across all platforms.

    • Regain ownership of data and privacy from the corporations that have repeatedly violated user trust, along with sophisticated data management capabilities to wield unprecedented control over your own data.

    • Augment and authenticate your digital reputation power, blending your crypto and DeFi accounts, NFT collections, credentials and achievements, and more, through a single metric

    Segment #2: Web2 Users

    • Access the power and possibility of Web 3, without any noticeable change in the user experience, from a single account.

    • Quit worrying about data breaches or privacy infringement from the tech giants that have repeatedly violated user trust, with ownership of all your own data.

    • Assimilate your personal information, verified credentials, social clout, and more, within a single Reputation Power metric, derived from your merit, and authenticating your achievements

    Segment #3: Web2 Businesses

    • Retain the benefits of user data access, without the liability of customer data protection, the cost of expensive and unreliable data protection processes, and the stress of hacking and data breach concerns.

    • Easily deploy the power of Web 3 to give customers the benefits of an innovative, secure, and thriving ecosystem, without intimidating, overwhelming, or forcing them outside their technological comfort zone.

    • Help users grow their digital reputation with verifiable NFT badges, and enable your business to certify their identity, achievements, finances, and more, with an unprecedented, gamified reputation power system.

    Segment #4: Web3 Businesses

    • Remove the liability of customer data protection, eliminate expensive and unreliable data protection processes, and eliminate hacking and data breach concerns.

    • Simply deploy Nuvo’s framework for Web3 users, without the need to internally master blockchain technology, and build decentralized data infrastructure.

    • Extend the benefits of a growing and thriving ecosystem of dApps to customers without removing them from the brand’s current user experience.

    • Give users the ability to grow their reputation, and verify their achievements, skills, and digital prestige, with an unprecedented, gamified reputation power system.

    Segment #5: Developers/Partners

    • Nuvo’s framework forefronts interoperability and cooperation, allowing partners to focus on perfecting the functionality and capability of their product/service, without having to rebuild the underlying infrastructure.

    • Reduce the operating overhead and time commitment for your apps and data infrastructure, with an easy-to-maintain framework free of difficult databases.

    • Nuvo’s collaborative approach to ecosystem building, rather than cutthroat competition, create a ‘sum greater than the parts’ synthesis of products, services, and platforms, instead of siloed market segments disrupting the user experience.

    <Figure 1.1> Domain Management
    <Figure 1.2> Creating New Domains
    <Figure 1.3> Register New Templates
    <Figure 1.4> Query existing templates
    <Figure 1.5> Binding with templates
    <Figure 1.3> Campaign Information
    <Figure 1.4> Distribution Methods
    <Figure 1.5> Redemption Code
    <Figure 1.6> QR Code
    <Figure 1.7> Whitelist
    How to design an NFT badge

    <nuvoid>*

    String

    nuvo id

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": [
            {
                "address": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
                "nuvoId": "NUVO3768633"
            },
            {
                "address": "0xa27Dc025431642386B8c15A6941f2943ee2c768c",
                "nuvoId": "NUVO3625167"
            },
    }

    name*

    String

    page_no*

    String

    page_size*

    String

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": [
            {
                "id": "64358e2c6d81a80a8f79a2a1",
                "logo": "https://metis-middleware-us-east-2.s3.amazonaws.com/e53448d326ec57649525e9260ffc831e",
                "name": "TEST2"
            },
            {
                "id": "64358d856d81a80a8f79a29f",
                "logo": "https://metis-middleware-us-east-2.s3.amazonaws.com/ffb88cab7d2059de9adb6c7ac27dd542",
                "name": "DEVTEST"
            },
            {
                "id": "60ed992bb520d95b454c4e88",
                "logo": "https://metis-middleware-us-east-2.s3.amazonaws.com/e92579713eca593b89bb6a25e12bf583",
                "name": "TEST22"
            }
        ],
        "msg": ""
    }
    

    name*

    String

    user name

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": [
            {
                "address": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
                "id": "64358c626d81a80a8f79a29a",
                "username": "xiqing"
            },
            {
                "address": null,
                "id": "6438192b6d81a8859af0affd",
                "username": "xiqing1_gmail_com"
            },
            {
                "address": "0x831ecAe20AF356Be0D5c04DaEAE409Cc43E8B805",
                "id": "6441427f6d81a8afa72cf75e",
                "username": "xiqing1_qq_com"
            }
        ],
        "msg": ""
    }

    Access-Token*

    String

    access token

    chainid*

    String

    chainid

    {
        "code": 200,
        "data": "0.1",
        "message": "",
        "msg": "",
        "msgTitle": null
    }

    Access-Token*

    String

    access token

    chainid*

    String

    chainid

    {
        "code": 200,
        "data": {
            "name": "rinkeby",
            "symbol": "ETH",
            "url": "https://eth-rinkeby.alchemyapi.io/v2/NX86HrTZc6caDu_urojNoCF42rQWZzLf"
        },
        "message": "",
        "msg": "",
        "msgTitle": null
    }

    Access-Token*

    String

    access token

    wallet_pwd*

    String

    RSA Public-key

    {
        "code": 200,
        "data": "OK",
        "message": "",
        "msg": "",
        "msgTitle": null
    }

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "percent_change_24h": "0.52024893", //24hr 0.52%
            "price:": "1817.680321619358"    //latest USD price
        },
        "msg": ""
    }

    code*

    String

    the code kept from step2

    appid*

    String

    Nuvo middleware app id

    GET /message/deploy/:ticker

    Description

    • Generates a deployment message for a given ticker.

    Parameters

    • ticker: Ticker symbol of the token (path parameter).

    Request Example

    Response Example

    GET /0xf9a3020c71Ba4F62364c624242D54a1229f3125F/NUVOGENESIS/balanceb
    {"balance":0}
    https://demo.dapp.com/callback?code=xxxxxxx
    {
        "code": 200,
        "data": {
            "accessToken": "a7f4216020364aa79d77e18d4965cf2f", //authorized token,use this token to access related api
            "appId": "60ed992bb520d95b454c4e88",
            "expiresIn": 43200, //valid for 12 hours
            "refreshToken": "aab3accb1180410fbe9341fd0db95d94", //Refresh time 30 days
            "wcSession": null
        },
        "msg": ""
    }
    GET /transactions/ETH/0x123456...
    {
      "transactions": [
        {
          "tx_hash": "0x123456...",
          "sender": "0xSenderAddress...",
          "recipient": "0xRecipientAddress...",
          "amount": 100,
          "op": "tsf",
          "tick": "ETH",
          // ... other transaction details
        },
        // ... more transactions
      ]
    }
    GET /message/deploy/ETH
    {
      "message": "data:,{\"p\":\"nip-20\", \"op\":\"deploy\", \"tick\":\"ETH\"}"
    }
    Login methods

    Getting started with Reputation Power(RP) is easy. Our production environment which runs on Nuvo is intuitive and user-friendly. With just a few steps you can create your own Dapp, NFT badges, and campaigns to start engaging with your users. If you are the developer please navigate to the NuvoOne or if you are the user please navigate to the NuvoMe

    <Figure 1.1> Sign up on NuvoOne with your email, a Web3 wallet, mobile phone number or Google account.

    There are three different ways for you to choose from.

    1. Email Login

    By entering your email address and getting verification right away, there is no need to remember passwords because we have already taken care of it.

    • Once you navigate back to Nuvo, you may need to enter your User Name, Display Name, and choose the Storing Methods of your Private Keys. Figure 1.7, 1.8

    • Choosing self-custody of the PKeys means that you will have complete control over the wallet and must keep the PKeys safely on your own. In the meantime, you can import a wallet from others or create a new one. Figure 1.9

    • Choosing Nuvo custody of the PKeys means the key is not stored on your own but Nuvo takes the PKeys on your behalf.

    2. Metamask

    If you are familiar with the web3 wallet, you can use the popular Metamask wallet to log in.

    3. Wallet Connect

    If the Metamask wall is not your daily drive web3 tool, you can connect with other web3 wallets.

    4. Discord

    If you are already registered with the Discord community, by verifying the address, you can log in to Nuvo through it.

    <Figure 1.3> Login with Email <Figure 1.4> Login with Metamask

    <Figure 1.5> Login with WalletConnect <Figure 1.6> Login with Discord

    <Figure 1.7> Enter the name <Figure 1.8> The PKeys storing methods

    Nuvo continues to enable more integrations by adding more login methods such as mobile phone login, Google account login and integrate with Bitget etc.

    Query Parameters
    Name
    Type
    Description

    page_no*

    String

    page number

    page_size*

    String

    size of the page

    Headers

    Name
    Type
    Description

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "data": [
                {
                    "app_id": "64358e2c6d81a80a8f79a2a1",
                    "app_name": "TEST2",
    
    
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    Request Body

    Name
    Type
    Description

    from*

    String

    0xdF58ae1438620EA9E0A7584e6bF23dE505682B21

    to*

    String

    0x2dF58ae1438620EA9E0A7584e6bF23dE505682B21

    amount*

    String

    100

    symbol*

    String

    Metis

    {
        "code": 200,
        "data": "Ok",
        "msg": ""
    }
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    Request Body

    Name
    Type
    Description

    receiver*

    String

    user name

    chainid*

    String

    chainid

    amount*

    String

    amount

    symbol*

    String

    token name

    {
        "code": 200,
        "data": {
            "amount": "10000000000000000",
            "chain_url": "https://goerli.gateway.metisdevops.link",
            "from": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
    

    Protocol

    Protocol-Level Operations

    Understanding protocol-level operations is key for interacting with the blockchain. This section explains how deploy, mint, and transfer messages function, including where they are sent.

    GENESIS BLOCK: 11097263

    General Rule:

    All operations, whether they are part of the tx.data or as emitted contract events, are processed based on the order of the blocknumber and tx_index within the block in a deterministic manner. Future operations will not ever change the outcome of the past events.

    Sending Messages

    • Messages are sent as transaction data to the blockchain.

    • Any data that conforms with the open dataURL format are recognized as an inscription. For example: 'data:,{"p":"nip-20", "op":"deploy", "tick":"<TICKER>" '

    • However, the validity of the message are determined according to the following rules

    Deploy Operation

    • Message: {"p":"nip-20", "op":"deploy", "tick":"<TICKER>", "max":<MAXAMOUNT>, "lim":<MINT_LIMIT>, "contract":<optional:ADDRESS>, "cmint":<optional:bool>}

    • Recipient: Can be sent to any address.

    • Validation:

    Mint Operation

    • Message: {"p":"nip-20", "op":"mint", "tick":"<TICKER>", "id":"<ID>", "amt":"<AMOUNT>"}

    • Recipient: The address receiving the newly minted token.

    • Validation:

    Transfer Operation

    • Message: {"p":"nip-20", "op":"tsf", "tick":"<TICKER>", "id":"<ID>"}

    • Recipient: The new owner of the token.

    • Validation:

    The following operations will be enabled in the future update:

    Split Operation - split one inscribed token into two smaller amounts

    • Message: {"p":"nip-20", "op":"split", "tick":<TICKER>, "id":<ID>, "amt1":<AMOUNT1>, "amt2":<AMOUNT2> }

    • Recipient: The owner of the two splited inscriptions.

    • Validation: Confirms TICKER and ID, the tx.hash where the inscription happened,existence, checks sender's ownership. Amount1 + Amount2 should equal to the original minted mount of this ID. two new inscriptions will be minted as a result. the original inscription will be burned.

    Burn Operation - destroy an inscription

    • Message: {"p":"nip-20", "op":"list", "tick":"<TICKER>", "id":"<ID>"}

    • Recipient: must be the owner itself

    • Validation:

    List Operation - list the inscription for a price

    • Message: {"p":"nip-20", "op":"list", "tick":"<TICKER>", "id":"<ID>", "price":<number>, "unit":<UNIT>}

    • Recipient: must be the owner itself

    • Validation:

    UnList Operation - unlist the inscription for a price

    • Message: {"p":"nip-20", "op":"ulist", "tick":"<TICKER>", "id":"<ID>"}

    • Recipient: must be the owner itself

    • Validation:

    Exchange Operation - exchange for the inscription by paying a price

    • Message: {"p":"nip-20", "op":"ex", "tick":"<TICKER>", "id":"<ID>"}

    • Recipient: must be the owner of the listed inscription.

    • Validation:

    Contract Events:

    'NIP20TokenEvent_transfer(address,address,bytes32,bytes32)' - transfer from sender to recipient with ticker and id

    'NIP20TokenEvent_mint(address,address,bytes32,uint256,uint256)' - mint from sender to recipient of ticker with mint id and amount. Note: require contract address set in the deployment of the token. events emitted from other contracts are ignored.

    'NIP20TokenEvent_bridgeIn(address,address,address,bytes32,uint256,uint256)' - bridge erc20 in to mint a inscription

    'NIP20TokenEvent_bridgeOut(address,address,address,bytes32,uint256,uint256)' - bridge inscription out for an erc20 token

    Ownership Determination

    • Ownership of a token is tracked from minting. Transfer operations update ownership, with the latest valid transfer indicating the current owner.

    Get token transfer list

    Get token transfer list

    GET /api/v1/oauth2/wallet/tokens?chainid=1088

    QueryString:?chainid=1088

    Headers

    Name
    Type
    Description

    Inscription Existence Verification (id)

    Inscription Existence Verification

    Path

    • GET /:ticker/:id/exist

    Description

    • Checks if a inscription with a given hash exists for a specific ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • id: The hash of the transaction that minted the inscription (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the id or ticker does not exist.

    • 500 Internal Server Error: For server-related issues.

    Get transfer list

    Get transfer list

    GET api/v1/oauth2/wallet/token_tx_list?page_no=1&page_size=10

    Deploy NFT Badge

    Deploy the NFT badge with start date, end date, NFT name, and contract name

    Deploy NFT Badge

    POST /api/v1/oauth2/nft/deploy

    Get Mint Amount

    Get Mint Amount

    Path

    Checks for the uniqueness of the TICKER. No duplicate is allowed.
  • The ticker has a maximum 10 character limit. and should only contain english characters and numbers. no special character allowed.

  • When contract address is provided, static nip20_allowMint() method of this contract address will be called when validating a mint operation.

  • When the contract address is provided, only this contract can mint the inscriptions through smart contract events. Regular mints may still be allowed depending on other configurations.

  • MINT_LIMIT must be greater than 0.

  • MAX_AMOUNT must be greater than MINT_LIMIT

  • Reserved ticker such as "METIS" or "NUVO" can only be deployed by the Nuvo Team to ensure smooth operation.

  • if cmint is set to true, mints can be done via the contract only. Regular mints in messages are disallowed.

  • Ensures TICKER exists and already deployed and ID is unique.
  • ID does not need to be sequential but must be globally unique.

  • The amount must obey the MAX_AMOUNT and MINT_LIMIT of the deployed token.

  • Confirms TICKER and ID, the tx.hash where the inscription happened,exists
  • Sender must be the owner of this inscription.

  • The inscription is currently not listed for sale.

  • Confirms TICKER and ID, the tx.hash where the inscription was minted,exists
  • Sender must be the owner.

  • Confirms TICKER and ID, the tx.hash where the inscription happened,exists
  • Sender must be the owner.

  • UNIT needs to be one of the accepted unit on the deployed network. Please refer to network's page for more info. Price must be a whole number.

  • Confirms TICKER and ID, the tx.hash where the inscription happened,exists
  • Sender has listed the inscription.

  • Confirms TICKER and ID, the tx.hash where the inscription happened,exists
  • Sender must own enough <UNIT> to pay the price. UNIT needs to be one of the accepted unit on the deployed network. Please refer to network's page for more info. Price must be a whole number.

  • The inscription was listed by the recipient.

  • "args": [],
    "bls_address": null,
    "chainid": 599,
    "created": 1681887368547,
    "domain_name": "",
    "fee": "0.00000206472",
    "function": "",
    "id": "644001086d81a82e3dbe00d9",
    "status": "IN_PROGRESS",
    "tx_hash": "0x4180b3001a37cce55723ae984f18a4a7f516c3cf2b8527f8db705627b9fe62b8",
    "updated": 1681887368547,
    "use_bls_submit": null
    },
    {
    "app_id": "64358e2c6d81a80a8f79a2a1",
    "app_name": "TEST2",
    "args": [],
    "bls_address": null,
    "chainid": 599,
    "created": 1681887115787,
    "domain_name": "",
    "fee": "0.00000126",
    "function": "",
    "id": "6440000b6d81a82e3dbe00d7",
    "status": "IN_PROGRESS",
    "tx_hash": "0xe91f1f16d54b70eb70fea3f1557a0de1fd05c7792af25c5f9481751ae7fec775",
    "updated": 1681887115787,
    "use_bls_submit": null
    }
    ],
    "page_no": 1,
    "page_size": 10,
    "total": 12
    },
    "msg": ""
    }
    ```
    "gas_limit": 58300,
    "gas_price": 60000000,
    "is_main_token": true, //If main token
    "is_metamask": false,
    "is_thirdwallet": false,
    "nonce": 17,
    "to": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
    "tokenAddress": "",  //token contract address
    "trans_func_abi": "", //token tx method
    "wallet_pwd_state": 1,
    "wallet_type": "POLIS" //wallet type
    },
    "msg": ""
    }

    txhash*

    String

    0x3058af7f32be1b23799bb539f7b4705ad82cb19f7e862cd7f747da41952dccf8

    chainid*

    String

    599

    receiver*

    String

    user name

    gas*

    String

    21210

    gasprice*

    String

    6000

    nonce*

    String

    17

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "tokens": [
                {
                    "color": "#57BEB7",
                    "icon": "https://s2.coinmarketcap.com/static/img/coins/64x64/9640.png",
                    "is_main": true,
                    "token": "METIS",
                    "usd": 0,
                    "value": 0
                },
                {
                    "address": "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC",
                    "color": "#5798BE",
                    "decimals": 18,
                    "icon": "https://s2.coinmarketcap.com/static/img/coins/64x64/825.png",
                    "is_main": false,
                    "token": "USDT",
                    "usd": 0,
                    "value": 0
                },
                {
                    "address": "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21",
                    "color": "#6FBE57",
                    "decimals": 18,
                    "icon": "https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png",
                    "is_main": false,
                    "token": "USDC",
                    "usd": 0,
                    "value": 0
                },
                {
                    "address": "0x5CE34d9abe4bF239cbc08B89287c87f4CD6d80B7",
                    "color": "#F1CA5F",
                    "decimals": 18,
                    "icon": "https://s2.coinmarketcap.com/static/img/coins/64x64/8605.png",
                    "is_main": false,
                    "token": "WOW",
                    "usd": 0,
                    "value": 0
                }
            ],
            "total_usd": 0
        },
        "msg": ""
    }

    Dapp APIs

    Domain Transaction

    GET /mint-amount/:ticker/:txhash

    Description

    • Retrieves the amount of a token minted in a specific transaction for the given ticker.

    Parameters

    • ticker: The ticker symbol of the token (path parameter).

    • txhash: The hash of the minting transaction (path parameter).

    Request Example

    Response Example

    Error Responses

    • 404 Not Found: If the ticker or transaction hash does not exist.

    • 500 Internal Server Error: For server-related issues.

    GET /NUVOGENESIS/0x123abc.../exist
    {
      "exists": true
    }
    GET /mint-amount/ETH/0x987xyz...
    {
      "amount": 200
    }
    Query Parameters
    Name
    Type
    Description

    page_no*

    String

    page number

    page_size*

    String

    size of the page

    Headers

    Name
    Type
    Description

    Access-Token*

    String

    access token

    {
        "code": 200,
        "data": {
            "data": [
                {
                    "amount": "0.01",
                    "chainid": 599,
    
    
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access_token

    Request Body

    Name
    Type
    Description

    contract_name*

    String

    contract name

    nft_name*

    String

    nft name

    app_id*

    Int

    appid

    levels*

    String[]

    {

    "rp": 10,

    // Must be image base64 content

    badge_url": "data:image/png;base64,",

    "internal_note": "internal note"

    }

    {
      "code": 200,
      "data": {
        "tx_hash": "0x6e53dcb3f24d2ad000ed1c45c60fe14b44c2bf3122283464554971840b7496ae",
        // -1: In progress, 0: failed, 1: succeed
        "status": -1,
        "contract_address":
    

    Initiate transaction

    Initiate transaction

    POST /api/v1/oauth2/send_tx

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Badge favourite

    Badge collection

    POST /api/v1/oauth2/user/favorite_badge

    For user used wallet mint transaction

    "created": 1686031885720,
    "direction": "SEND",
    "fee": "0.0000012726",
    "id": "647f3e8d6d81a8cd82fa93f1",
    "nonce": 15,
    "receiver": "64358c626d81a80a8f79a29a",
    "receiver_address": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
    "receiver_name": "xiqing",
    "sender": "64358c626d81a80a8f79a29a",
    "sender_address": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
    "sender_name": "xiqing",
    "status": "SUCCEED",
    "symbol": "METIS",
    "tx": "0x6c52eacc4c6b768173a6005cd6210745c75d78fa78fe72caacc92ea997158473",
    "updated": 1686031885720
    },
    {
    "amount": "0.01",
    "chainid": 599,
    "created": 1681202161096,
    "direction": "RECEIVE",
    "fee": "0.000003498",
    "id": "64358c716d81a80a8f79a29c",
    "nonce": 2161,
    "receiver": "64358c626d81a80a8f79a29a",
    "receiver_address": "0xdF58ae1438620EA9E0A7584e6bF23dE505682B21",
    "receiver_name": "xiqing",
    "sender": "60d2736bac31e33b70bd7492",
    "sender_address": "0x3AaacEa03247A4CA2480244658d0EF86C1354B6D",
    "sender_name": "init",
    "status": "IN_PROGRESS",
    "symbol": "METIS",
    "tx": "0xd7e1b39fab39ec7d3f0fa045d5d04adfcf0f339d9e9a9dceee94f452a68d9c29",
    "updated": 1681202161096
    }
    ],
    "page_no": 1,
    "page_size": 10,
    "total": 2
    },
    "msg": ""
    }javas
    ""
    },
    "message": "",
    "msg": "",
    "msgTitle": null
    }
    "code": 200,
    "data": {
    "tx_hash": "0x6e53dcb3f24d2ad000ed1c45c60fe14b44c2bf3122283464554971840b7496ae",
    // -1: In progress, 0: failed, 1: succeed
    "status": 1,
    "contract_address": "0xa2CbE4d7f1cF33A5E383aF887f00eF7456888948"
    },
    "message": "",
    "msg": "",
    "msgTitle": null
    }

    start_date_ts*

    String

    Seconds timestamp, 0: Not Limit

    expiry_date*

    String

    Seconds timestamp, 0: Not Limit

    time_zone*

    String

    Format must be: +/-HH:mm

    Access-Token*

    String

    access token

    chainid*

    String

    chainid

    domain*

    String

    domain

    function*

    String

    function

    args*

    String[]

    {
        "code": 200,
        "data": {
            "act": "SUCCESS",
            "args": [],
            "chainid": 599,
            "contract_address": "0xa0D214158643676DeBb42A2c44E361EB9E248B04",
            "data": "ok",
            "domain": "domain1",
            "eth_address": "0x14A30580CC7555FFDBE4A36E8B79582e85c4B332",
            "function": "functionName",
            "nonce": 0,
            "result": "result"
        },
        "message": "",
        "msg": "",
        "msgTitle": null
    }
    {
        "code": 200,
        "data": {
            "act": "SIGN",
            "args": [],
            "chainid": 599,
            "contract_address": "0xa0D214158643676DeBb42A2c44E361EB9E248B04",
            "data": "ok",
            "domain": "domain1",
            "eth_address": "0x14A30580CC7555FFDBE4A36E8B79582e85c4B332",
            "function": "functionName",
            "nonce": 0,
            "result": "ok",
            "func_abi_sign": "xxxxxxxx",
            "wallet": "wallet name",
            "nonce": 0,
            "args": [],
            "gas": 0.00001,
            "gas_price": "10wei",
            "gas_price_num": 2,
            "fee": "0.000001ETH",
            "fee_num": 1
        },
        "message": "",
        "msg": "",
        "msgTitle": null
    }
    Headers
    Name
    Type
    Description

    Access-Token*

    String

    access token

    Request Body

    Name
    Type
    Description

    contract_address*

    String

    badge contract address

    favorite

    Boolean

    default =true false when you want to cancel the collection

    {
        "code": 200,
        "data": "favorite success",
        "msg": ""
    }

    Get user badge collection list

    GET /api/v1/oauth2/user/favorite_badge

    For ex: "http://me.nuvosphere.io/#/claim-badge?code=0x88f8ff6c7259031303c146cb7caa3a24055cdbb7,0ca2e6b4f2be922270dda4e95dcc3c03" The code before "," is the badge address. While after"," is the code address

    Query Parameters

    Name
    Type
    Description

    page_size*

    String

    page_no*

    String

    Headers

    Name
    Type
    Description

    Access-Token*

    String

    access token

    check badge collection status

    POST /api/v1/oauth2/user/badge/check_favorite

    Headers

    Name
    Type
    Description

    Access-Token*

    String

    access token

    Request Body

    Name
    Type
    Description

    contract_address*

    String/Array

    badge conract

    {
        "code": 200,
        "data": {
            "data": [
                {
                    "badges_logo": "https://metis.memosync.org:6083/matrix-test/c80f9830fdb24dee9df772027aa74f24.png",
                    "contract_address": "0xce79bdf26e0640e29b3e465a37da3082bdc2a27f",
                    "dapp_id": "64358e2c6d81a80a8f79a2a1",
                    "levels": [
                        {
                            "badge_glass_uri": "",
                            "badge_glass_url": "",
                            "badge_no_glass_uri": "",
                            "badge_no_glass_url": "",
                            "badge_uri": "c80f9830fdb24dee9df772027aa74f24.png",
                            "badge_url": "https://metis.memosync.org:6083/matrix-test/c80f9830fdb24dee9df772027aa74f24.png",
                            "desc": "",
                            "glass_open": 0,
                            "internal_note": "",
                            "level": 1,
                            "min_rp": 1,
                            "name": "Test11",
                            "rp": 10
                        }
                    ],
                    "nft_name": "Test11",
                    "quest_list": [
                        {
                            "issueMethod": "QR code/url",
                            "quest": "111",
                            "rp": "111"
                        },
                        {
                            "issueMethod": "QR code/url",
                            "quest": "22",
                            "rp": "22"
                        },
                        {
                            "issueMethod": "QR code/url",
                            "quest": "33",
                            "rp": "33"
                        }
                    ],
                    "version": "V2"
                }
            ],
            "page_no": 1,
            "page_size": 10,
            "total": 1
        },
        "msg": ""
    }
    {
        "code": 200,
        "data": {
            "0x88f8ff6c7259031303c146cb7caa3a24055cdbb7": true,
            "0xbc3443409e992b8c379b7971e48e925ab2eb3ebc": true,
            "0xce79bdf26e0640e29b3e465a37da3082bdc2a27f": true
        },
        "msg": ""
    }

    Badge claim

    Get claimed badge proof

    GET /api/v1/oauth2/badge/claiminfo

    For user used wallet mint transaction

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Scan and claim

    POST /api/v1/oauth2/badge/scan_mint

    For ex: "" The code before "," is the badge address. While after"," is the code address

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Get task status and result

    GET /api/v1/oauth2/task/result

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Badge info

    Get badge info

    GET /api/v1/oauth2/badge/detail

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Get badge quest list

    GET /api/v1/oauth2/badge/quest_list

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    white_code*

    String

    white code

    claim_type

    Number

    default =1

    Access-Token*

    String

    access token

    Access-Token*

    String

    access token

    contract_address*

    String

    badge contract address

    code*

    String

    claimed code

    wait

    Boolean

    default =true false then will base on the return task ID and search the result.

    task_id*

    String

    task id

    Access-Token*

    String

    access token

    http://me.nuvosphere.io/#/claim-badge?code=0x88f8ff6c7259031303c146cb7caa3a24055cdbb7,0ca2e6b4f2be922270dda4e95dcc3c03
    {
        "code": 200,
        "data": [
            {
                "code": "0f70662562ec52699a922f85ba308924",
                "contract_name": "TATEEWAA",
                "dapp_name": "MMTest",
                "is_claim_start": true, //whether start or not
                "is_upgrade_start": false,//not yet 
                "issue_type": 1,
                "level": 1,
                "nft_address": "0xdf58C11e624565ea718672A78134352f3e2cF31B",
                "nft_logo": "https://metis.memosync.org:6083/matrix-test/689c57ebcc184958876577730924c170.png",
                "nft_name": "TATEEWAA",
                /*proof for badge request parameter
                 *reference:https://github.com/nuvosphere/RP2/blob/master/packages/cUtils/polisClient.ts#LL227C12-L227C12
                 * tx = await contract.claimByCode(code,proof,data);
                 */
                "proof": [
                    "0xfa7ed0f7bdf82b1fe2608a8a80c2b0f3293d078e366a6243aeca87ab0167a320",
                    "0x4ec5738617a571d260dcff0e945bbfa9ecdcd2371d5758c4e5bedd29532b0aa7",
                    "0x38efb985b1bb9f53b0d69d1a60e841feaef1649246ce27c98077c6fb8c4f0098",
                    "0x574cefb33df41467ab296ef28acfce8cfba84333238c8fcc95e267339b6657a5"
                ], 
                "rp": 1
            }
        ],
        "msg": ""
    }

    contract_address*

    String

    Badge contract address

    Access-Token*

    String

    access token

    Access-Token*

    String

    access token

    contract_address*

    Array

    badge contrct address with array

    {
        "code": 200,
        "data": {
            "badges_logo": "https://metis.memosync.org:6083/matrix-test/689c57ebcc184958876577730924c170.png",
            "banner": "https://metis-middleware-us-east-2.s3.amazonaws.com/7f41ff77055f41eb9df973624dcfe535",
            "chain_id": 599,
            "claim": "43243\n432\n432\n432", //how to claim content
            "claimed": 0,
            "contract_address": "0xdf58C11e624565ea718672A78134352f3e2cF31B",
            "contract_id": "6441237e6d81a897ea453c5a",
            "contract_name": "TATEEWAA",
            "dapp_id": "64366b5f6d81a823acdb7aab",
            "dapp_logo": "https://metis-middleware-us-east-2.s3.amazonaws.com/3a51f3d67fa559abbcd044ed1106bbe3",
            "dapp_name": "MMTest",
            "discord_url": null,
            "eligibility": "32323",
            "event_url": "https://matrix-nft-cliam.preview.staging.metisdevops.link/views/nft?nid=0xdf58C11e624565ea718672A78134352f3e2cF31B",
            "introduction": "232323232",
            "levels": [
                {
                    "badge_glass_uri": "",
                    "badge_glass_url": "",
                    "badge_no_glass_uri": "",
                    "badge_no_glass_url": "",
                    "badge_uri": "689c57ebcc184958876577730924c170.png",
                    "badge_url": "https://metis.memosync.org:6083/matrix-test/689c57ebcc184958876577730924c170.png",
                    "desc": "",
                    "glass_open": 0,
                    "internal_note": "",
                    "level": 1,
                    "min_rp": 1,
                    "name": "TATEEWAA",
                    "rp": 34
                },
                {
                    "badge_glass_uri": "",
                    "badge_glass_url": "",
                    "badge_no_glass_uri": "",
                    "badge_no_glass_url": "",
                    "badge_uri": "22253c3dc0464efa8dca9ee4c0ca7b4b.png",
                    "badge_url": "https://metis.memosync.org:6083/matrix-test/22253c3dc0464efa8dca9ee4c0ca7b4b.png",
                    "desc": "",
                    "glass_open": 0,
                    "internal_note": "",
                    "level": 2,
                    "min_rp": 35,
                    "name": "TATEEWAA",
                    "rp": 45
                }
            ],
            "mb_banner": "https://metis-middleware-us-east-2.s3.amazonaws.com/7578cc3d2e0f4dc7b2dcfccb910200a0",
            "mint_start_date": "",
            "mint_start_date_ts": 0,
            "nft_name": "TATEEWAA",
            "pc_banner": "https://metis-middleware-us-east-2.s3.amazonaws.com/83f8aa57cd6148f9b4c7ec76caa37dea",
            "quest_list": [
                {
                    "issueMethod": "QR code/url",
                    "quest": "11",
                    "rp": "1"
                }
            ],
            "rp": 1,
            "telegram_url": null,
            "total_supply": 0,
            "twitter_url": null,
            "version": "V2"
        },
        "msg": ""
    }
    {
        "code": 200,
        "data": {
            "badge_logo": "https://metis.memosync.org:6083/matrix-test/c80f9830fdb24dee9df772027aa74f24.png",
            "is_upgrade": false
        },
        "msg": ""
    }
    // wait=false
    {
        "code": 200,
        "data": {
            "task_id": "2b9b947596bc5652a035fa009eb9588e" //task id
        },
        "msg": ""
    }
    {
        "code": 200,
        "data": {  //task result
            "code": 500,
            "msg": {
                "code": -32000,
                "message": "execution reverted: address had minted."
            },
            "status": 2 //task status. 2-failure 1-succeed 0-porcessing
        },
        "msg": ""
    }
    {
        "code": 200,
        "data": [
            {
                "contract_address": "0x4726a8732a64f1ba73f67b2b00378869ab399d08",
                "quest_list": []
            },
            {
                "contract_address": "0xbc3443409e992b8c379b7971e48e925ab2eb3ebc",
                "quest_list": [
                    {
                        "issueMethod": "QR code/url",
                        "quest": "121",
                        "rp": "1"
                    },
                    {
                        "issueMethod": "QR code/url",
                        "quest": "21",
                        "rp": "3"
                    }
                ]
            },
            {
                "contract_address": "0xce79bdf26e0640e29b3e465a37da3082bdc2a27f",
                "quest_list": [
                    {
                        "issueMethod": "QR code/url",
                        "quest": "111",
                        "rp": "111"
                    },
                    {
                        "issueMethod": "QR code/url",
                        "quest": "22",
                        "rp": "22"
                    },
                    {
                        "issueMethod": "QR code/url",
                        "quest": "33",
                        "rp": "33"
                    }
                ]
            }
        ],
        "msg": ""
    }