0.2.7 • Published 1 year ago

@nuklai/nuklai-sdk v0.2.7

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Nuklai SDK

šŸ“¦ Installation

npm install @nuklai/nuklai-sdk
# or
yarn add @nuklai/nuklai-sdk

šŸš€ Quick Start

import { NuklaiSDK } from "@nuklai/nuklai-sdk";

const sdk = new NuklaiSDK("http://127.0.0.1:9650");
const healthStatus = await sdk.rpcService.validateConnection();

✨ Core Features

  • šŸ’° Asset Management (Fungible/Non-Fungible Tokens)
  • šŸ“Š Dataset Creation and Management
  • šŸŖ Marketplace Operations
  • šŸ’³ Transaction Management
  • šŸ” Network Status and Health Checks
  • šŸ›ļø Validator Management
  • šŸ“ˆ Staking Operations

šŸ“– Basic Usage

Initialization

import { NuklaiSDK } from "@nuklai/nuklai-sdk";

const sdk = new NuklaiSDK({
  baseApiUrl: "http://127.0.0.1:9650",
});

// Set the signer for transactions
sdk.rpcService.setSigner("your-private-key-here");

Wallet Generation

// Create SDK instance
const sdk = new NuklaiSDK();

// Create a new random wallet
const wallet = sdk.createWallet();
console.log("Wallet address:", wallet.getAddress());

// Get wallet's private key
const privateKey = wallet.getPrivateKey();
console.log("Private key:", privateKey); // Returns the 128-character private key string

// Or import an existing wallet
const importedWallet = sdk.importWalletFromPrivateKey("your-private-key-hex");

// Check wallet connection
if (sdk.isWalletConnected()) {
    // Use wallet features
    const address = sdk.getAddress();
}

Signer

// Using a private key string (old way)
await sdk.rpcService.setSigner(privateKeyString);

// Using a wallet's signer (new way)
await sdk.rpcService.setSigner(wallet.getSigner());

// Using any custom signer that implements SignerIface
await sdk.rpcService.setSigner(customSigner);

Asset Management

// Create a fungible token
const ftResult = await sdk.rpcService.createFTAsset(
  "Test Token",
  "TEST",
  9,
  "metadata",
  BigInt("1000000000000000000"), // Max supply
  "owner-address",
  "admin-address",
  "admin-address",
  "admin-address"
);

// Create an NFT collection
const nftResult = await sdk.rpcService.createNFTAsset(
  "Test NFT",
  "TNFT",
  "metadata",
  BigInt(1000), // Max supply
  "owner-address",
  "admin-address",
  "admin-address",
  "admin-address"
);

Token Operations

// Mint fungible tokens
const mintAmount = BigInt("1000000000000000000"); // 1 token
const mintResult = await sdk.rpcService.mintFTAsset(
  "receiver-address",
  "token-address",
  mintAmount
);

// Mint NFT
const nftMintResult = await sdk.rpcService.mintNFTAsset(
  "nft-collection-address",
  JSON.stringify({
    name: "Test NFT #1",
    description: "First NFT",
    attributes: [],
  }),
  "receiver-address"
);

// Transfer tokens
const transferAmount = BigInt("100000000000000000"); // 0.1 token
const transferResult = await sdk.rpcService.transfer(
  "recipient-address",
  "token-address",
  transferAmount,
  "Transfer memo"
);

Check Address Balance

// Get native NAI token balance
const nativeBalance = await sdk.rpcService.getBalance("address");

// Get any asset balance by passing asset address
const assetBalance = await sdk.rpcService.getBalance("address", "assetAddress");

NOTE: Balance is returned as raw strings without decimal formatting. Use asset decimals info from getAssetInfo() to correctly format & display the balance corectly.

Dataset Operations

// Create a dataset
const result = await sdk.rpcService.createDataset(
  "asset-address",
  "Test Dataset",
  "Description",
  "AI,Testing",
  "MIT",
  "MIT",
  "https://opensource.org/licenses/MIT",
  "metadata",
  true // isCommunityDataset
);

šŸ› ļø Development

Build from source:

yarn
yarn build

Run tests:

yarn test

šŸ“ Examples

The examples/ directory contains sample implementations:

examples/
ā”œā”€ā”€ datasets.ts            # Dataset creation and management
ā”œā”€ā”€ fungible-tokens.ts     # Fungible Token operations
ā”œā”€ā”€ non-fungible-tokens.ts # Non-Fungible Token operations
└── marketplace.ts         # Marketplace interactions

You can run all examples at once using:

yarn examples

Or run individual examples:

ts-node --esm examples/fungible-tokens.ts
ts-node --esm examples/non-fungible-tokens.ts

šŸ“š API Reference

All methods are accessible through the sdk.rpcService instance. Below is a comprehensive reference of available methods grouped by their functionality.

Network Operations

MethodDescriptionParametersReturns
validateConnection()Checks node connectivityNonePromise<boolean>
getEmissionInfo()Retrieves emission statisticsNonePromise<ActionOutput>
getAllValidators()Lists all validatorsNonePromise<ActionOutput>
getStakedValidators()Lists validators with stakeNonePromise<ActionOutput>
getValidatorStake(nodeID)Gets specific validator stakenodeID: stringPromise<ActionOutput>

Asset Management

Fungible Token Methods

MethodDescriptionParametersReturns
createFTAsset()Creates a new Fungible Token- name: string- symbol: string- decimals: number- metadata: string- maxSupply: bigint- mintAdmin: string- pauseAdmin: string- freezeAdmin: string- kycAdmin: stringPromise<TxResult>
mintFTAsset()Mints Fungible Tokens- to: string- assetAddress: string- amount: bigintPromise<TxResult>
transfer()Transfers tokens- to: string- assetAddress: string- value: bigint- memo: stringPromise<TxResult>

Non-Fungible Token Methods

MethodDescriptionParametersReturns
createNFTAsset()Creates an NFT collection- name: string- symbol: string- metadata: string- maxSupply: bigint- mintAdmin: string- pauseAdmin: string- freezeAdmin: string- kycAdmin: stringPromise<TxResult>
mintNFTAsset()Mints a new NFT- assetAddress: string- metadata: string- to: stringPromise<TxResult>

Dataset & Marketplace Operations

Dataset Methods

MethodDescriptionParametersReturns
createDataset()Creates a new dataset- assetAddress: string- name: string- description: string- categories: string- licenseName: string- licenseSymbol: string- licenseURL: string- metadata: string- isCommunityDataset: booleanPromise<TxResult>
updateDataset()Updates dataset info- datasetAddress: string- name: string- description: string- categories: string- licenseName: string- licenseSymbol: string- licenseURL: string- isCommunityDataset: booleanPromise<TxResult>
getDatasetInfo()Gets dataset detailsdatasetID: stringPromise<ActionOutput>

Marketplace Methods

MethodDescriptionParametersReturns
publishDatasetToMarketplace()Lists dataset on marketplace- datasetAddress: string- paymentAssetAddress: string- datasetPricePerBlock: numberPromise<TxResult>
subscribeDatasetMarketplace()Subscribes to dataset- marketplaceAssetAddress: string- paymentAssetAddress: string- numBlocksToSubscribe: numberPromise<TxResult>
claimMarketplacePayment()Claims marketplace earnings- marketplaceAssetAddress: string- paymentAssetAddress: stringPromise<TxResult>

Query Methods

MethodDescriptionParametersReturns
getBalance()Get's address balanceaddress: stringPromise<string>
getAssetInfo()Get's asset detailsassetAddress: stringPromise<ActionOutput>
getDatasetBalance()Get's dataset balance- address: string- assetID: stringPromise<ActionOutput>
getDatasetNFTInfo()Get's NFT detailsnftID: stringPromise<ActionOutput>
getPendingContributions()Lists pending contributionsdatasetID: stringPromise<ActionOutput>
getPrivateKey()Get's wallet's private keyNonestring
getAddress()Get's wallet's addressNonestring
getPublicKey()Get's wallet's public keyNonestring

Usage Example

Creating and minting a fungible token

// Create a FT
const ftResult = await sdk.rpcService.createFTAsset(
  "Test Token",
  "TEST",
  9,
  "metadata",
  BigInt("1000000000000000000"),
  "owner-address",
  "admin-address",
  "admin-address",
  "admin-address"
);

// After creation, mint some tokens
const mintResult = await sdk.rpcService.mintFTAsset(
  "receiver-address",
  ftResult.result[0].asset_address,
  BigInt("1000000000000000000")
);

šŸ“„ License

MIT License - see LICENSE for details.

0.2.7

1 year ago

0.2.6

1 year ago

0.2.5

1 year ago

0.2.4

1 year ago

0.2.3

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago