2.0.3 • Published 2 months ago
@ultraos/ultra-ledger-lib v2.0.3
Ultra Antelope Ledger Lib
Provides a simple way to integrate Ledger into Node Environments for Antelope Based Chains.
Requirements
Must be used in a Chrome or Firefox web page.
Built with Node 18+
Does not work with Node Directly
Usage
Basic Response Interface
When working with this tool, you will get a response and a status message.
type Response = { status: boolean; data: any };
Connection & Get Public Key
async function start() {
// This will wait until the ledger app is open and connected.
// Tries roughly for 30s before giving up.
const ledgerApi = await connect();
if (!ledgerApi) {
throw new Error("Failed to connect to ledger device");
}
const pubKey = await ledgerApi.getPublicKey({ ledgerIndex: 0 });
if (!pubKey) {
throw new Error("Could not get public key on index 0")
}
console.log(pubKey);
}
Sign Transaction
async function start() {
// This will wait until the ledger app is open and connected.
// Tries roughly for 30s before giving up.
const ledgerApi = await connect();
if (!ledgerApi) {
throw new Error("Failed to connect to ledger device");
}
const transactionWithHeaders = await someTransactionBuilderHere(); // @wharfkit/antelope OR @ultraos/ultra-signer-lib
const chain_id = await someChainIdFetch(); // @wharfkit/antelope OR @ultraos/ultra-signer-lib
const ledgerIndex = 0;
const result = await ledgerApi.signTransaction(JSON.parse(JSON.stringify(transactionWithHeaders)), chain_id, ledgerIndex);
if (!result || !result.data) {
throw new Error(result.data)
}
// txid -> result.response
console.log(result.data);
}
Buffer Issues / Errors
If you are using this in a Web Application what you will need to do is setup Vite
with polyfill for Buffer
.
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { nodePolyfills } from 'vite-plugin-node-polyfills';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(), nodePolyfills({ protocolImports: true })],
optimizeDeps: {
esbuildOptions: {
define: {
global: "globalThis",
},
},
},
})