1.0.4 • Published 6 months ago

@endlesslab/endless-web3-sdk v1.0.4

Weekly downloads
-
License
ISC
Repository
github
Last release
6 months ago

Endless Web Wallet SDK Usage Guide

Installation

npm install @endlesslab/endless-ts-sdk
npm install @endlesslab/endless-web3-sdk

Import Modules

import {
  Network,
  EntryFunctionABI,
  TypeTagAddress,
  TypeTagU128,
  AccountAddress,
  EndlessConfig,
  Endless,
  AccountAuthenticator,
  Hex,
  Deserializer,
  AccountAuthenticator
} from '@endlesslab/endless-ts-sdk';

import {
  EndlessJsSdk,
  UserResponseStatus,
  EndlessSignAndSubmitTransactionInput,
  EndlessWalletTransactionType,
  EndLessSDKEvent,
} from '@endlesslab/endless-web3-sdk';

SDK Initialization

const jssdk = new EndlessJsSdk({
  // optional: Network.MAINNET
  network: Network.TESTNET,
  // optional: 'dark' | 'light'
  colorMode: 'dark'
});

Wallet Connection

Connect Wallet

const res = await jssdk.connect();
if (res.status === UserResponseStatus.APPROVED) {
  console.log('Account:', res.args.account);
}

Disconnect Wallet

await 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 signMessage = 'Endless';
const res = await jssdk.signMessage({ message: signMessage });
if (res.status === UserResponseStatus.APPROVED) {
  console.log(res.args.signature.toString());
}

Sign and Submit Transaction

const toAccountAddress = 'xxx';
const transferAmount = 1;
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);
}

With Generic Type (typeArguments Required)

If the function uses generics, typeArguments must be provided:

const coinAddress = 'xxx';
const txData: EndlessSignAndSubmitTransactionInput = {
  payload: {
    function: '0x1::endless_account::transfer_coins',
    functionArguments: [
      AccountAddress.fromBs58String(toAccountAddress),
      new BigNumber(transferAmount).multipliedBy(1e8).toNumber(),
      coinAddress,
    ],
    typeArguments: ['0x1::fungible_asset::Metadata'],
  },
};

const res = await jssdk.signAndSubmitTransaction(txData);
console.log('transactionRes:', res);

Sign Transaction Only (Without Submit)

const config = new EndlessConfig({ network: Network.TESTNET });
const endless = new Endless(config);

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 txn = await endless.transaction.build.simple({
  sender: accountAddress,
  data: txData.payload,
});

const res = await jssdk.signTransaction(txn, 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,
});

Change Color Mode (Dark / Light)

jssdk.setWalletColorMode({ colorMode: 'dark' });
jssdk.setWalletColorMode({ colorMode: 'light' });

Event Listeners

jssdk.on(EndLessSDKEvent.CONNECT, (res) => {
  console.log('Wallet connected:', res);
});

jssdk.on(EndLessSDKEvent.DISCONNECT, (res) => {
  console.log('Wallet disconnected:', res);
});

jssdk.on(EndLessSDKEvent.ACCOUNT_CHANGE, (res) => {
  if (res.account) {
    console.log('Account changed:', res);
  }
});

jssdk.on(EndLessSDKEvent.NETWORK_CHANGE, (networkInfo) => {
  console.log('Network changed:', networkInfo);
});

jssdk.on(EndLessSDKEvent.COLOR_MODE_CHANGE, (res) => {
  console.log('Color Mode Change:', res);
});

Optional: UI Panel Open/Close Events

const openHandler = () => {};
jssdk.on(EndLessSDKEvent.OPEN, openHandler);
jssdk.off(EndLessSDKEvent.OPEN, openHandler);

const closeHandler = () => {};
jssdk.on(EndLessSDKEvent.CLOSE, closeHandler);
jssdk.off(EndLessSDKEvent.CLOSE, closeHandler);

Notes

  • All amounts are assumed to be in smallest unit (e.g., 1 EDS = 1e8 units).
  • If ABI is not passed, the SDK will try to auto-resolve it. But if the contract function uses generics, you must pass typeArguments manually.
  • Make sure accountAddress, toAccountAddress, and transferAmount are correctly set before performing transactions.
  • The SDK supports multiple wallet events and operations; use .on() and .off() to bind/unbind custom handlers.
  • Color mode can be configured at initialization or dynamically via setWalletColorMode().
  • To override a user-customized color mode, remove the ENDLESS_WALLET_WEB3_SDK_ENABLETHEME_TOGGLE_KEY from localStorage before calling setWalletColorMode().
import { ENDLESS_WALLET_WEB3_SDK_ENABLETHEME_TOGGLE_KEY } from '@endlesslab/endless-web3-sdk';

localStorage.removeItem(ENDLESS_WALLET_WEB3_SDK_ENABLETHEME_TOGGLE_KEY);
jssdk.setWalletColorMode({ colorMode: 'light' });
1.0.4

6 months ago

1.0.3

6 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago