3. Core Concepts

Understanding the fundamental concepts of the Amadeus Protocol SDK.

Keypairs

Amadeus Protocol uses BLS12-381 cryptography for all cryptographic operations. Each account has a public/private keypair.

Generating Keypairs

import { generateKeypair } from '@amadeus-protocol/sdk'

// Generate a new keypair
const keypair = generateKeypair()

console.log('Public Key:', keypair.publicKey) // Base58 encoded
console.log('Private Key:', keypair.privateKey) // Base58 encoded seed (64 bytes)

Keypair Structure

  • Public Key: 48-byte BLS12-381 public key, Base58-encoded

  • Private Key: 64-byte seed, Base58-encoded (also called "Seed64")

Deriving Public Keys

import { derivePublicKeyFromSeedBase58 } from '@amadeus-protocol/sdk'

// Derive public key from existing seed
const publicKey = derivePublicKeyFromSeedBase58('5Kd3N...')
console.log('Public Key:', publicKey)

Addresses

In Amadeus Protocol, public keys serve as addresses. They are Base58-encoded 48-byte BLS12-381 public keys.

Address Format

Address Characteristics

  • Length: Typically 87-88 characters (Base58 encoded)

  • Format: Base58-encoded public key

  • Uniqueness: Each keypair has a unique address

  • Public: Safe to share publicly (it's your public key)

Address Validation

Transactions

Transactions are the primary way to interact with the Amadeus blockchain. They must be:

  1. Built with proper structure

  2. Signed with the sender's private key

  3. Serialized (packed) into binary format

  4. Submitted to a node

Transaction Structure

Transaction Lifecycle

Transaction Nonces

Nonces are automatically generated using timestamps:

For high-frequency transactions, ensure sufficient time between transactions to avoid nonce collisions.

Amounts

AMA tokens use 9 decimal places. Always use atomic units for transactions.

Converting Amounts

Amount Precision

Always use toAtomicAma when building transactions:

Serialization

The SDK uses VecPack canonical serialization for deterministic encoding of transaction data.

Encoding

Decoding

Supported Types

  • null

  • boolean

  • number / bigint

  • string

  • Uint8Array

  • Arrays

  • Objects / Maps

Signing

Transactions are signed using BLS12-381 signatures over the transaction hash.

Signing Process

  1. Build transaction structure

  2. Serialize transaction (canonical encoding)

  3. Hash the serialized transaction (SHA-256)

  4. Sign the hash with private key (BLS12-381)

  5. Pack transaction with signature

Encoding Formats

Base58

Used for addresses, keys, and transaction hashes:

Base64

Used for encrypted data and binary payloads:

Encryption

The SDK provides password-based encryption for securing sensitive data.

Encrypting Data

Decrypting Data

Security Features

  • AES-GCM encryption with 256-bit keys

  • PBKDF2 key derivation with 100,000 iterations

  • Unique salt and IV for each encryption

  • Authenticated encryption (prevents tampering)

API Client

The SDK provides a unified API client for interacting with Amadeus nodes.

Initialization

API Modules

  • sdk.chain - Chain queries (tip, stats, entries)

  • sdk.wallet - Wallet operations (balances, transactions)

  • sdk.transaction - Transaction submission

  • sdk.contract - Contract interactions

  • sdk.epoch - Epoch and validator data

  • sdk.peer - Network peer information

  • sdk.proof - Validator proofs

Error Handling

All SDK errors are instances of AmadeusSDKError:

Next Steps

Now that you understand the core concepts:

Last updated