The Hyperchain SDK provides a modular and comprehensive interface for interacting with hyperchains(blockchains built using HyperSDK). It is designed to facilitate developers with functions ranging from network configurations to transaction management and complex warp operations.
v20.0.0
or later (for building from source)v1.22.0
or later (for building from source)Feature | Status |
---|---|
Transaction Management | ✅ |
Continuous Block Monitoring | ✅ |
Fee Calculation | ✅ |
Auth | ✅ |
WebSocket | ✅ |
Creation of Custom Actions | ✅ |
State Management | ✅ |
RPC Services | ✅ |
Multi-Sig Support | 🚧 |
Cross-Chain Operations | 🚧 |
WASM-Based Programs | 🚧 |
✅ - Complete, 🚧 - In Progress
npm install @nuklai/hyperchain-sdk
# or
yarn add @nuklai/hyperchain-sdk
For building from source:
git clone https://github.com/nuklai/hyperchain-sdk.git
cd hyperchain-sdk
yarn
yarn build
npm publish --access public
import { HyperchainSDK } from '@nuklai/hyperchain-sdk'
const sdk = new HyperchainSDK({
baseApiUrl: 'https://api-devnet.nuklaivm-dev.net:9650',
blockchainId: 'JopL8T69GBW1orW4ZkJ1TBRzF97KXaY8e64atDA1v2M12SNqm'
})
Checking node health:
const healthStatus = await sdk.rpcService.ping()
console.log('Node Ping:', JSON.stringify(healthStatus, null, 2))
Fetching network information:
const networkInfo = await sdk.rpcService.getNetworkInfo()
console.log('Network Info:', JSON.stringify(networkInfo, null, 2))
Generating key pairs:
import { HyperchainSDK, auth } from '@nuklai/hyperchain-sdk'
const { privateKey, publicKey } = auth.BLSFactory.generateKeyPair()
console.log('Generated BLS Private Key:', auth.BLSFactory.privateKeyToHex(privateKey))
console.log('Generated BLS Public Key:', auth.BLS.publicKeyToHex(publicKey))
Submitting a transaction:
import { HyperchainSDK, actions, auth, codec, consts, utils } from '@nuklai/hyperchain-sdk'
// Initialize SDK
const sdk = new HyperchainSDK({
baseApiUrl: 'https://api-devnet.nuklaivm-dev.net:9650',
blockchainId: 'JopL8T69GBW1orW4ZkJ1TBRzF97KXaY8e64atDA1v2M12SNqm'
})
// Create auth factory
const authFactory = auth.getAuthFactory(
'ed25519',
'323b1d8f4eed5f0da9da93071b034f2dce9d2d22692c172f3cb252a64ddfafd01b057de320297c29ad0c1f589ea216869cf1938d88c9fbd70d6748323dbf2fa7'
)
// Create transfer action
const transfer = new actions.Transfer(
'nuklai1qqydg3pvjx5f9n8rytn5swyznftupw8lkc240l6apzqdxy4hsgmgkmzazes',
'NAI',
utils.parseBalance(0.0001, 9),
'Test Memo'
)
// Set up genesis info and registries
const genesisInfo = {
baseUnits: 1,
storageKeyReadUnits: 5,
storageValueReadUnits: 2,
storageKeyAllocateUnits: 20,
storageValueAllocateUnits: 5,
storageKeyWriteUnits: 10,
storageValueWriteUnits: 3,
validityWindow: 60000
}
const actionRegistry = new codec.TypeParser()
actionRegistry.register(consts.TRANSFER_ID, actions.Transfer.fromBytesCodec, false)
const authRegistry = new codec.TypeParser()
authRegistry.register(consts.BLS_ID, auth.BLS.fromBytesCodec, false)
authRegistry.register(consts.ED25519_ID, auth.ED25519.fromBytesCodec, false)
authRegistry.register(consts.SECP256R1_ID, auth.SECP256R1.fromBytesCodec, false)
// Generate and submit transaction
const { submit, txSigned, err } = await sdk.rpcService.generateTransaction(
genesisInfo,
actionRegistry,
authRegistry,
[transfer],
authFactory
)
if (err) {
throw err
}
await submit()
console.log('Transaction ID:', txSigned.id().toString())
import { HyperchainSDK } from '@nuklai/hyperchain-sdk'
async function listenForBlocks() {
const sdk = new HyperchainSDK({
baseApiUrl: 'https://api-devnet.nuklaivm-dev.net:9650',
blockchainId: 'JopL8T69GBW1orW4ZkJ1TBRzF97KXaY8e64atDA1v2M12SNqm'
})
try {
await sdk.wsService.connect()
const err = await sdk.wsService.registerBlocks()
if (err) {
console.error("Failed to register blocks:", err)
return
}
while (true) {
try {
const { block, results, prices, err } = await sdk.wsService.listenBlock(
sdk.actionRegistry,
sdk.authRegistry
)
if (err) {
console.error('Failed to listen for blocks:', err)
continue
}
console.log('Incoming block:', block.toJSON())
console.log('Results:', results)
console.log('Prices:', prices)
} catch (error) {
console.error('Error:', error)
}
}
} catch (error) {
console.error('Error connecting to WebSocket:', error)
} finally {
await sdk.wsService.close()
}
}
listenForBlocks().catch(console.error)
The examples directory contains various example code to interact with the Hyperchain SDK.
chain/transaction.ts
)The Transaction
class covers the structure and behavior of transactions.
Key methods:
sign(factory: AuthFactory, actionRegistry: ActionRegistry, authRegistry: AuthRegistry): [Transaction, Error?]
toBytes(): [Uint8Array, Error?]
fromBytes(bytes: Uint8Array, actionRegistry: ActionRegistry, authRegistry: AuthRegistry): [Transaction, Error?]
chain/block.ts
)The StatefulBlock
class represents a block in the blockchain.
Key methods:
id(): Promise<Id>
toBytes(): [Uint8Array, Error?]
fromBytes(bytes: Uint8Array, actionRegistry: ActionRegistry, authRegistry: AuthRegistry): [StatefulBlock, Error?]
chain/fees.ts
)The estimateUnits
function calculates transaction fees based on resource usage:
function estimateUnits(
genesisInfo: Genesis,
actions: Action[],
authFactory: AuthFactory
): Dimension
auth/auth.ts
, auth/provider.ts
)Key interfaces:
Auth
AuthFactory
Key function:
function getAuthFactory(
authType: AuthType,
privateKeyString: string
): AuthFactory
websocket.ts
)The WebSocketService
class provides real-time communication with any HyperSDK based blockchains.
Key methods:
connect(): Promise<void>
listenBlock(actionRegistry: ActionRegistry, authRegistry: AuthRegistry): Promise<{ block: StatefulBlock; results: Array<Result>; prices: Dimension; err: Error | undefined; }>
close(): Promise<void>
To implement a custom action:
Action
interface.toBytes()
, fromBytes()
, and other required methods.ActionRegistry
.Most methods in the SDK return a tuple [result, error]
. Always check for errors before using the result:
const [result, error] = await someSDKMethod()
if (error) {
console.error('An error occurred:', error)
// Handle error
} else {
// Use the result
}
Common issues and their solutions:
For further assistance, please reach out to kiran.pachhai@nukl.ai
or say@nukl.ai
, or create an issue in this repository.
Contributions to the Hyperchain SDK are welcome! Please ensure that your code adheres to the existing style and include tests for new features.
This SDK is released under the MIT License.