@luffalab/luffa-endless-sdk
v1.1.9
Published
luffa endless ts sdk
Downloads
100
Readme
Luffa Wallet Endless SDK Usage Guide
This document is intended for integrating Luffa Wallet into web-based DApps or embedded WebView pages within mini-programs using @luffalab/luffa-endless-sdk and @endlesslab/endless-ts-sdk.
Installation
npm install @luffalab/luffa-endless-sdk
npm install @endlesslab/endless-ts-sdk⚠️ For mini-programs: after installing
@luffalab/luffa-endless-sdk, use the mini-program developer tool to compile the npm package.
Import Modules
import {
Network,
EntryFunctionABI,
TypeTagAddress,
TypeTagU128,
AccountAddress,
EndlessConfig,
Endless,
AccountAuthenticator,
Hex,
Deserializer,
} from '@endlesslab/endless-ts-sdk';
import {
EndlessLuffaSdk,
UserResponseStatus,
EndlessSignAndSubmitTransactionInput,
EndlessWalletTransactionType,
EndLessSDKEvent,
} from '@luffalab/luffa-endless-sdk';SDK Initialization
const jssdk = new EndlessLuffaSdk({
network: 'testnet', // or 'mainnet'
});Wallet Connection
Connect Wallet
const res = await jssdk.connect();
if (res.status === UserResponseStatus.APPROVED) {
console.log('Account:', res.args.account);
}Disconnect Wallet
jssdk.disconnect();
console.log('Disconnect success');Get Current Account
const res = await jssdk.getAccount();
if (res.status === UserResponseStatus.APPROVED) {
console.log('Current account:', res.args.account);
}Signing Features
Sign Message
const res = await jssdk.signMessage({
address: false,
application: false,
chainId: false,
message: 'Welcome to dapp!',
nonce: '1',
});
if (res.status === UserResponseStatus.APPROVED) {
console.log(res.args);
}Message format:
Endless::Message
message: Welcome to dapp!
nonce: 1Return structure:
interface EndlessSignMessageOutput {
address: string;
application: string;
chainId: number;
fullMessage: string;
message: string;
nonce: string;
prefix: string;
signature: string;
}Transaction Features
Sign and Submit Transaction
const abi: EntryFunctionABI = {
typeParameters: [],
parameters: [new TypeTagAddress(), new TypeTagU128()],
};
const txData: EndlessSignAndSubmitTransactionInput = {
payload: {
function: '0x1::endless_account::transfer',
functionArguments: [
AccountAddress.fromBs58String(toAccountAddress),
BigInt(Number(transferAmount) * 1e8),
],
abi,
},
};
const res = await jssdk.signAndSubmitTransaction(txData);
if (res.status === UserResponseStatus.APPROVED) {
console.log('Transaction submitted:', res);
}Generic Transaction with typeArguments
const txData: EndlessSignAndSubmitTransactionInput = {
payload: {
function: '0x1::endless_account::transfer_coins',
functionArguments: [
AccountAddress.fromBs58String(toAccountAddress),
BigInt(Number(transferAmount) * 1e8),
coinAddress,
],
typeArguments: ['0x1::fungible_asset::Metadata'],
},
};Mini-program Usage Notes
When using Luffa SDK inside a mini-program:
- Do not use
@endlesslab/endless-ts-sdkto construct transactions. - Do not use
BigInttypes — usestringinstead. - You must provide
typeArgumentsexplicitly.
Example:
const txData: EndlessSignAndSubmitTransactionInput = {
payload: {
function: '0x1::endless_account::transfer',
functionArguments: [
toAccountAddress, // string
String(transferAmount * 1e8) // also string
],
typeArguments: ['address', 'u128'],
},
};Sign Only (without Submit)
const config = new EndlessConfig({ network: Network.TESTNET });
const endless = new Endless(config);
const txn = await endless.transaction.build.simple({
sender: accountAddress,
data: txData.payload,
});
const hexTxn = txn.bcsToHex().toString();
const res = await jssdk.signTransaction(hexTxn, EndlessWalletTransactionType.SIMPLE);
if (res.status === UserResponseStatus.APPROVED) {
const data = Hex.fromHexString(res.args.data).toUint8Array();
const deserializer = new Deserializer(data);
const auth = AccountAuthenticator.deserialize(deserializer);
console.log('AccountAuthenticator:', auth);
}Change Network
jssdk.changeNetwork({
network: Network.MAINNET,
});Event Listeners
jssdk.on(EndLessSDKEvent.CONNECT, (res) => {
console.log('Wallet connected:', res);
});
jssdk.on(EndLessSDKEvent.DISCONNECT, () => {
console.log('Wallet disconnected');
});
jssdk.on(EndLessSDKEvent.ACCOUNT_CHANGE, (res) => {
console.log('Account changed:', res);
});
jssdk.on(EndLessSDKEvent.NETWORK_CHANGE, (networkInfo) => {
console.log('Network changed:', networkInfo);
});Notes
- All amounts are in the smallest unit (e.g., 1 EDS = 1e8).
- For generic ABI functions, make sure to manually provide
typeArguments. - It is recommended to always use SDK methods for transactions instead of crafting them manually.
For additional features or technical support, please contact the Luffa team.
