Numbers Protocol
  • 📓Introduction
    • Numbers Protocol
      • Defining Web3 Assets
        • Assetization Process
        • Numbers ID (Nid)
        • Non-Fungible Tokens
        • Commit
        • AssetTree
          • integrityCid
          • digitalSourceType
          • miningPreference
          • nftRecord
        • Commit and AssetTree example
      • Glossary
      • Solution Stack
      • Use Cases
      • Roadmap & Milestones
      • Principles & Standards
    • Whitepaper
    • NUM Token
      • Get NUM
      • Bridge to Multiple Chains
      • Stake NUM
      • Liquidity Providers
      • NUM Utility
      • Token Allocation
      • Deflationary Token Economy
      • Audit Report
      • Distribution and Other Activities
      • Manage your NUM in Cold Wallet
      • 🛠️Developer Tools
    • NumbersDAO
      • Roles & Responsibilities
      • Become A DAO Member
      • Governance & Voting Rules - v2.0
      • [Deprecated] Governance Rules v1.0
    • Weekly Summary
      • 2023
        • 13 Jan 2023
        • 20 Jan 2023
        • 27 Jan 2023
        • 3 Feb 2023
        • 10 Feb 2023
        • 17 Feb 2023
        • 24 Feb 2023
        • 3 Mar 2023
        • 10 March 2023
        • 17 Mar 2023
        • 24 Mar 2023
        • 31 Mar 2023
        • 7 Apr 2023
        • 14 Apr 2023
        • 21 Apr 2023
        • 28 Apr 2023
        • 5 May 2023
        • 12 May 2023
        • 19 May 2023
        • 26 May 2023
        • 2 June 2023
        • 9 June 2023
        • 16 June 2023
        • 23 June 2023
        • 30 June 2023
        • 7 July 2023
        • 14 July 2023
        • 21 July 2023
        • 28 July 2023
        • 4 Aug 2023
        • 11 Aug 2023
        • 18 Aug 2023
        • 25 Aug 2023
        • 01 Sep 2023
        • 08 Sep 2023
        • 15 Sep 2023
        • 22 Sep 2023
        • 29 Sep 2023
        • 6 Oct 2023
        • 13 Oct 2023
        • 20 Oct 2023
        • 27 Oct 2023
        • 3 Nov 2023
        • 10 Nov 2023
        • 17 Nov 2023
        • 24 Nov 2023
        • 1 Dec 2023
        • 8 Dec 2023
        • 15 Dec 2023
        • 22 Dec 2023
        • 29 Dec 2023
      • 2024
        • 5 Jan 2024
        • 12 Jan 2024
        • 19 Jan 2024
        • 26 Jan 2024
        • 2 Feb 2024
        • 9 Feb 2024
        • 16 Feb 2024
        • 23 Feb 2024
        • 1 Mar 2024
        • 8 Mar 2024
        • 15 Mar 2024
        • 22 Mar 2024
        • 29 Mar 2024
        • 5 Apr 2024
        • 12 Apr 2024
        • 19 Apr 2024
        • 26 Apr 2024
        • 3 May 2024
        • 10 May 2024
        • 17 May 2024
        • 24 May 2024
        • 31 May 2024
        • 7 June 2024
        • 14 June 2024
        • 21 June 2024
        • 28 June 2024
        • 5 July 2024
        • 12 July 2024
        • 19 July 2024
        • 26 July 2024
        • 2 Aug 2024
        • 9 Aug 2024
        • 16 Aug 2024
        • 23 Aug 2024
        • 30 Aug 2024
        • 6 Sep 2024
        • 13 Sep 2024
        • 20 Sep 2024
        • 27 Sep 2024
        • 4 Oct 2024
        • 11 Oct 2024
        • 18 Oct 2024
        • 25 Oct 2024
        • 1 Nov 2024
        • 8 Nov 2024
        • 15 Nov 2024
        • 22 Nov 2024
        • 29 Nov 2024
        • 6 Dec 2024
        • 13 Dec 2024
        • 20 Dec 2024
        • 27 Dec 2024
      • 2025
        • 3 Jan 2025
        • 10 Jan 2025
        • 17 Jan 2025
        • 24 Jan 2025
        • 31 Jan 2025
        • 7 Feb 2025
        • 14 Feb 2025
        • 21 Feb 2025
        • 28 Feb 2025
        • 7 Mar 2025
        • 14 Mar 2025
        • 21 Mar 2025
        • 28 Mar 2025
        • 4 Apr 2025
        • 11 Apr 2025
    • Community Wiki
    • FAQ
      • What is provenance and how does it work?
      • What is C2PA and why do we need it?
      • What's the role of Numbers in AI?
      • What's the difference between Numbers and NFT
      • What's the difference between Numbers and C2PA
      • How can Numbers assist songwriters and artists?
      • Why Numbers needs its own blockchain?
      • Why Numbers Mainnet is permissioned?
      • Does Numbers support other blockchain?
      • How is the Nid generated?
      • Should I mint NFT or commit with "license-to" action?
      • Environmental impact of Numbers Mainnet
      • How do I get or bridge Mainnet/BEP-20/ERC-20 NUM?
      • What is Numbers Protocol's role in the AI space?
    • Partnership Programs
      • Creative Origins
      • Creative Innovators
      • Provenance Pioneers
  • 🌐Applications
    • User Tutorials
    • Verify Engine
      • Support Status
      • Search UI Interface
      • Asset Profile
      • Advanced Search & URL Parameters
    • Capture
  • 🛠️Developers
    • Numbers Blockchain
      • Testnet (Snow)
        • Testnet Launch PR
      • Mainnet (Jade)
      • Contract Overview
      • Commit Contract
        • How Commit Contract Works
        • assetTree File
        • On-chain Commit Logs
        • When Should You Use Commit Contract?
      • NFT Contract
    • Initial Asset Registration
    • Verify Engine API
      • Asset Search
      • NFT Search
      • Theft Detection
      • Support Status
    • Nit - Git for Media Files
      • Getting Started
      • Nit Bubble Plugin
    • Read Asset History
      • Read commits with Asset Profile
        • Embed social media into asset profile
      • Read commits via API
      • Read commits via nit module
      • Read commits via Bubble plugin
      • Get the merged AssetTree
    • Commit Asset History
      • Support Status
      • Commit via API
      • Commit via Nit module
      • Commit via Bubble plugin
    • More Tools
      • [NUM] Fetch NUM balance
      • [NUM] Transfer NUM from Custodial Wallet
      • [NUM] Check Staked Amount
      • [IPFS] Cat metadata from Nid/Cid
      • [IPFS] Create Metadata on IPFS
      • [IPFS] Check Nid/Cid on IPFS
      • [IPFS] Unpin Nid/Cid from IPFS
      • XMP parser
    • Working With Us
      • Job Opportunity
      • Reporting Security Vulnerability
Powered by GitBook
On this page
  • Prepare nit config
  • Create Commit
  • Commit with NFT Records
  1. Developers
  2. Commit Asset History

Commit via Nit module

PreviousCommit via APINextCommit via Bubble plugin

Last updated 1 year ago

Using the nit module to create asset commits is free, but there will still be a gas fee associated with the transaction. To ensure that the transaction can be completed, it is important to have Mainnet NUM or Testnet NUM in the wallet being used.

Before starting, make sure in your working environment. Here are the basic steps to commit via the nit module.

  1. Prepare nit config

  2. Generate AssetTree

  3. Create commit

Prepare nit config

In order to commit via nit module, you need to complete the following steps:

  • Follow and acquire YOUR_INFURA_PROJECT_ID and YOUR_INFURA_PROJECT_SECRET

  • Create a wallet and set up YOUR_PRIVATE_KEY in order to commit and create transactions. This wallet will appear as the committer in the .

  • Make sure there are Mainnet NUM in the wallet

  • [Option] Make sure there are Testnet NUM in the wallet

const config = {
    "defaultNetwork": "jade",
    "provider": "bafkreigrt5tepycewppysdwcjccdkdvvc2ztelqv64idgautq52g3vfh4i",
    "infura": {
        "projectId": YOUR_INFURA_PROJECT_ID,
        "projectSecret": YOUR_INFURA_PROJECT_SECRET
    },
    "network": {
        "jade": {
          "url": "https://mainnetrpc.num.network",
         "chainId": 10507,
         "accounts": [
           YOUR_PRIVATE_KEY
          ],
          "contract": "0x7EC2F14ABE8b0Ea2F657bBb62b6fEfDe161c9001",
          "explorerBaseUrl": "https://mainnet.num.network/tx"
        },
        "snow": {
          "url": "https://testnetrpc.num.network",
          "chainId": 10508,
          "accounts": [
            YOUR_PRIVATE_KEY
          ],
          "contract": "0x02eFA51b583d03342687b585417e5A62cd8273a4",
          "explorerBaseUrl": "https://testnet.num.network/tx"
        },
    }
};
//Set defaultNetwork to snow if testnet is enabled
if(testnet === true){
    config.defaultNetwork = "snow"
}

Create Commit

import ipfs from "@numbersprotocol/nit/lib/ipfs.js";
import nit from "@numbersprotocol/nit/lib/nit.js";

async function main(inputData, config) {
    const blockchainInfo = await nit.loadBlockchain(config);
    console.log(blockchainInfo)

    //create the basic assetTree
    await ipfs.initInfura(config.infura.projectId, config.infura.projectSecret);
    let assetTree = await nit.createAssetTreeInitialRegister(
          inputData.assetCid,
          inputData.assetSha256,
          inputData.encodingFormat,
          inputData.assetTimestampCreated,
          inputData.assetCreator,
    );
    //Set asset abstract
    if (inputData.abstract) {
          assetTree.abstract = inputData.abstract;
    }
    //Set asset headline
    if (inputData.headline) {
          assetTree.headline = inputData.headline;
    }
    //check license and set it as null if no license is assigned
    if (inputData.licenseName) {
          assetTree.license.name = inputData.licenseName;
    } else {
          assetTree.license.name = null;
    }
    if (inputData.licenseDocument) {
          assetTree.license.document = inputData.licenseDocument;
    } else {
          assetTree.license.document = null;
    }
    //if there are custom fields, add to assetTree
    if (inputData.custom !== null) {
          assetTree = await nit.updateAssetTree(assetTree, JSON.parse(inputData.custom));
    }

    let author;
    if (inputData.author) {
            author = steps.trigger.event.body.author;
    } else {
            author = blockchainInfo.signer.address;
    }
    //Initialize nit
    const commit = await nit.createCommitInitialRegister(
          blockchainInfo.signer,
          assetTree,
          author,
          config.provider
    );
    const commitResult = await nit.commit(inputData.assetCid, JSON.stringify(commit), blockchainInfo);
    return({
      "txHash": commitResult.hash,
      "assetCid": assetTree.assetCid,
      "assetTreeCid": commit.assetTreeCid,
      "explorer": config.network[config.defaultNetwork].explorerBaseUrl
    })
}

Please replace the "YOUR_PRIVATE_KEY" with your own private key in the config. The following is the package.json used by this example:

{
    "dependencies": {
        "@numbersprotocol/nit": "^1.2.6"
    }
}

Commit with NFT Records

//Update NFT related data
if (inputData.nftChainID !== null) {
    const nftRecord = {
        "network": inputData.nftChainID,
        "contractAddress": inputData.nftContractAddress,
        "tokenId": inputData.nftTokenID,
    };
    const nftRecordBytes = Buffer.from(JSON.stringify([nftRecord], null, 2));
    assetTree.nftRecord = await ipfs.infuraIpfsAddBytes(nftRecordBytes);
}

The following example is an example to create a commit for the asset on Numbers Mainnet using nit library. Before you start, follow the to prepare the information for your asset and put them in the inputData.

If your asset has been minted as NFTs and you wish to include NFT records in the , please follow the specifications outlined in the to prepare the nftRecord file. Then, add the following code to your AssetTree preparation process.

🛠️
nit is installed
Infura document
Commit
AssetTree spec
AssetTree
nftRecord documentation