Storage Program class for creating and managing key-value storage on Demos Network

Features:

  • Deterministic address derivation (stor-{sha256})
  • Key-value storage with 128KB limit
  • Access control (private, public, restricted, deployer-only)
  • Nested data structures (max 64 levels)
import { StorageProgram } from '@kynesyslabs/demosdk'

// Derive storage address
const address = StorageProgram.deriveStorageAddress(
'myDeployerAddress',
'myAppConfig',
'randomSalt123'
)

// Create storage program
const payload = StorageProgram.createStorageProgram(
'myDeployerAddress',
'myAppConfig',
{ apiKey: 'secret', endpoint: 'https://api.example.com' },
'public',
'randomSalt123'
)

Constructors

Methods

  • Create a new Storage Program

    Parameters

    • deployerAddress: string

      Address creating the storage program (will be the deployer)

    • programName: string

      Name of the storage program

    • initialData: Record<string, any>

      Initial key-value data to store

    • accessControl: StorageProgramAccessControl = "private"

      Access control mode (default: 'private')

    • Optionalsalt: string

      Optional random salt for address derivation

    • OptionalallowedAddresses: string[]

      List of allowed addresses (for 'restricted' mode)

    Returns StorageProgramPayload

    StorageProgramPayload for transaction creation

    const payload = StorageProgram.createStorageProgram(
    'demos1abc...',
    'userPreferences',
    { theme: 'dark', language: 'en' },
    'private'
    )
  • Delete an entire Storage Program (deployer only)

    WARNING: This operation is irreversible and will delete all stored data.

    Parameters

    • storageAddress: string

      The storage program address to delete

    Returns StorageProgramPayload

    StorageProgramPayload for transaction creation

    const payload = StorageProgram.deleteStorageProgram('stor-7a8b9c...')
    
  • Derive a deterministic storage program address

    Parameters

    • deployerAddress: string

      Address of the program deployer

    • programName: string

      Name of the storage program

    • salt: string = ""

      Optional random salt for uniqueness (default: empty string)

    Returns string

    Storage address in format: stor-{first 40 chars of sha256}

    const address = StorageProgram.deriveStorageAddress(
    'demos1abc...',
    'myConfig',
    'salt123'
    )
    // Returns: 'stor-7a8b9c...' (40 chars after prefix)
  • Get the size of data in bytes

    Parameters

    • data: Record<string, any>

      The data object to measure

    Returns number

    Size in bytes

    const size = StorageProgram.getDataSize({ key: 'value' })
    console.log(`Data size: ${size} bytes`)
  • Read data from a Storage Program (query operation, not a transaction)

    Note: This creates a payload for validation purposes. Actual reads should use RPC endpoints like GET /storage-program/:address

    Parameters

    • storageAddress: string

      The storage program address to read from

    Returns StorageProgramPayload

    StorageProgramPayload for validation

    // For transaction validation (not typical usage)
    const payload = StorageProgram.readStorage('stor-7a8b9c...')

    // Typical usage: Use RPC endpoint
    // fetch(`${rpcUrl}/storage-program/${storageAddress}`)
  • Update access control settings for a Storage Program (deployer only)

    Parameters

    • storageAddress: string

      The storage program address

    • accessControl: StorageProgramAccessControl

      New access control mode

    • OptionalallowedAddresses: string[]

      Updated list of allowed addresses (for 'restricted' mode)

    Returns StorageProgramPayload

    StorageProgramPayload for transaction creation

    // Change from private to public
    const payload = StorageProgram.updateAccessControl(
    'stor-7a8b9c...',
    'public'
    )

    // Set restricted access with allowlist
    const payload = StorageProgram.updateAccessControl(
    'stor-7a8b9c...',
    'restricted',
    ['demos1user1...', 'demos1user2...']
    )
  • Validate nesting depth (max 64 levels)

    Parameters

    • data: any

      The data object to validate

    • maxDepth: number = 64

      Maximum allowed nesting depth (default: 64)

    Returns boolean

    true if nesting depth is within limit

    const data = { level1: { level2: { level3: 'value' } } }
    if (StorageProgram.validateNestingDepth(data)) {
    // Safe nesting depth
    }
  • Validate storage size against 128KB limit

    Parameters

    • data: Record<string, any>

      The data object to validate

    Returns boolean

    true if size is within limit, false otherwise

    const data = { key: 'value', nested: { data: 'here' } }
    if (StorageProgram.validateSize(data)) {
    // Safe to store
    }
  • Write or update key-value data in a Storage Program

    Parameters

    • storageAddress: string

      The storage program address (stor-{hash})

    • data: Record<string, any>

      Key-value data to write/update

    Returns StorageProgramPayload

    StorageProgramPayload for transaction creation

    const payload = StorageProgram.writeStorage(
    'stor-7a8b9c...',
    { newKey: 'value', existingKey: 'updatedValue' }
    )