1.0.4 • Published 6 months ago
@endlesslab/endless-web3-sdk v1.0.4
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
, andtransferAmount
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
fromlocalStorage
before callingsetWalletColorMode()
.
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' });