hublet
v0.1.0
Published
A lightweight TypeScript wallet library for SourceHub. Built with Web Crypto API and secp256r1 for secure key management and transaction signing.
Readme
Hublet
A lightweight TypeScript wallet library for SourceHub. Built with Web Crypto API and secp256r1 for secure key management and transaction signing.
Features
- Secure Key Generation: Uses Web Crypto API for secp256r1 key pair generation
- Transaction Signing: Sign and broadcast Cosmos SDK transactions
- Address Derivation: Generate bech32 addresses from public keys
- Session Storage: Secure storage of wallet data using IndexedDB
- DID Support: Generate and manage Decentralized Identifiers (DIDs)
Installation
npm install hublet
# or
yarn add hubletQuick Start
Creating a New Wallet
import { createNewSigner } from 'hublet';
const apiUrl = 'http://localhost:1317';
const signer = await createNewSigner(apiUrl);
// Get wallet address
const address = await signer.getAddress();
console.log('Wallet address:', address);
// Get public key
const publicKey = await signer.getCompressedPubkey();
console.log('Public key:', Buffer.from(publicKey).toString('hex'));Sending Transactions
import { sendTokens } from 'hublet';
const result = await sendTokens({
apiUrl: 'http://localhost:1317',
chainId: 'sourcehub-dev',
fromAddress: 'source1...',
toAddress: 'source1...',
amount: '1000000',
denom: 'uopen',
sequence: 1,
accountNumber: 1,
publicKeyCompressed: signer.getCompressedPubkey(),
privateKey: signer.getPrivateKey()
});
console.log('Transaction result:', result);Storing and Loading Wallets
import { createAndStoreSigner, loadStoredSigner } from 'hublet';
// Create and store a new wallet
const signer = await createAndStoreSigner('http://localhost:1317');
const address = await signer.getAddress();
// Later, load the stored wallet
const loadedSigner = await loadStoredSigner(
Buffer.from(await signer.getCompressedPubkey()).toString('hex'),
'http://localhost:1317'
);API Reference
Core Classes
WebCryptoHubletSigner
Main signer class that implements the HubletSigner interface.
interface HubletSigner {
getAddress(): Promise<string>;
getPubkey(): Promise<Uint8Array>;
getCompressedPubkey(): Promise<Uint8Array>;
getPrivateKey(): Promise<CryptoKey>;
getAccountInfo(): Promise<{ accountNumber: number; sequence: number }>;
}Factory Functions
createNewSigner(apiUrl: string)
Creates a new signer with a fresh key pair.
createAndStoreSigner(apiUrl: string)
Creates a new signer and stores it in session storage.
loadStoredSigner(storageKey: string, apiUrl: string)
Loads a previously stored signer from session storage.
Transaction Functions
sendTokens(args: SendTokensArgs)
Sends tokens to another address.
signAndBroadcastR1Tx(args: SignAndBroadcastR1TxArgs)
Signs and broadcasts a transaction with custom messages.
Utility Functions
deriveSecp256r1SdkAddress(pubkey: Uint8Array, prefix?: string)
Derives a bech32 address from a compressed public key.
didKeyFromP256PubKey(uncompressedPubKey: Uint8Array)
Generates a DID key from a P256 public key.
Development
Prerequisites
- Node.js 18+
- Yarn (recommended) or npm
Setup
# Install dependencies
yarn install
# Generate protobuf files
./generate-proto.sh
# Run tests
yarn test
# Build the library
yarn buildTesting
yarn test