UNPKG

@slide-computer/signer-agent

Version:

Initiate transactions with signers on the Internet Computer

116 lines (88 loc) 2.66 kB
# @slide-computer/signer-agent Initiate transactions with signers on the Internet Computer. --- ## Installation Using SignerAgent: ``` npm i --save @slide-computer/signer-agent ``` ## In the browser: ``` import { SignerAgent } from "@slide-computer/signer-agent"; ``` To get started with the signerAgent, run ```js const accounts = await signer.accounts(); const agent = await SignerAgent.create({ signer, account: accounts[0].owner }); ``` The signerAgent can initiate a transaction with ```js import {IcrcLedgerCanister} from "@dfinity/ledger-icrc"; const icpLedger = IcrcLedgerCanister.create({ agent, canisterId: ICP_LEDGER_CANISTER_ID, }); const blockIndex = await icpLedger.transfer({ to: TARGET_ACCOUNT, amount: 100_000_000 }); ``` The signerAgent can automatically batch calls with ```js import {IcrcLedgerCanister} from "@dfinity/ledger-icrc"; const icpLedger = IcrcLedgerCanister.create({ agent, canisterId: ICP_LEDGER_CANISTER_ID, }); const ckBtcLedger = IcrcLedgerCanister.create({ agent, canisterId: CK_BTC_LEDGER_CANISTER_ID, }); // If a signer does not support batch calls, signerAgent will // automatically fallback to executing the calls one by one. const [icpBlockIndex, ckBtcBlockIndex] = await Promise.all([ icpLedger.approve({ spender: TARGET_ACCOUNT, amount: 70_000_000 }), ckBtcLedger.approve({ spender: TARGET_ACCOUNT, amount: 1_000_000 }) ]); ``` For more advanced use cases, the signerAgent can also manually batch calls with ```js import {IcrcLedgerCanister} from "@dfinity/ledger-icrc"; const icpLedger = IcrcLedgerCanister.create({ agent, canisterId: ICP_LEDGER_CANISTER_ID, }); const ckBtcLedger = IcrcLedgerCanister.create({ agent, canisterId: CK_BTC_LEDGER_CANISTER_ID, }); agent.batch(); // Below execution of calls needs to be triggered manually const icpBlockIndexPromise = icpLedger.approve({ spender: TARGET_ACCOUNT, amount: 70_000_000 }); const ckBtcBlockIndexPromise = ckBtcLedger.approve({ spender: TARGET_ACCOUNT, amount: 1_000_000 }); agent.batch() // Indicate that below calls should be executed by the signer after the above const swapResultPromise = backendActor.swapTokens(swapId); // Trigger execution of all the above scheduled calls // // If a signer does not support batch calls, signerAgent will // automatically fallback to executing the calls one by one. await agent.execute(); // Get individual results const icpBlockIndex = await icpBlockIndexPromise; const ckBtcBlockIndex = await ckBtcBlockIndexPromise; const swapResult = await swapResultPromise; ```