@luffalab/luffa-endless-sdk
Version:
luffa endless ts sdk
252 lines (196 loc) • 5.36 kB
Markdown
# 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
```bash
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
```ts
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
```ts
const jssdk = new EndlessLuffaSdk({
network: 'testnet', // or 'mainnet'
});
```
## Wallet Connection
### Connect Wallet
```ts
const res = await jssdk.connect();
if (res.status === UserResponseStatus.APPROVED) {
console.log('Account:', res.args.account);
}
```
### Disconnect Wallet
```ts
jssdk.disconnect();
console.log('Disconnect success');
```
### Get Current Account
```ts
const res = await jssdk.getAccount();
if (res.status === UserResponseStatus.APPROVED) {
console.log('Current account:', res.args.account);
}
```
## Signing Features
### Sign Message
```ts
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: 1
```
Return structure:
```ts
interface EndlessSignMessageOutput {
address: string;
application: string;
chainId: number;
fullMessage: string;
message: string;
nonce: string;
prefix: string;
signature: string;
}
```
## Transaction Features
### Sign and Submit Transaction
```ts
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
```ts
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-sdk` to construct transactions.
* Do not use `BigInt` types — use `string` instead.
* You must provide `typeArguments` explicitly.
Example:
```ts
const txData: EndlessSignAndSubmitTransactionInput = {
payload: {
function: '0x1::endless_account::transfer',
functionArguments: [
toAccountAddress, // string
String(transferAmount * 1e8) // also string
],
typeArguments: ['address', 'u128'],
},
};
```
### Sign Only (without Submit)
```ts
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
```ts
jssdk.changeNetwork({
network: Network.MAINNET,
});
```
## Event Listeners
```ts
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.