/ src / components / Wallet / useCkBtcLedger.tsx
useCkBtcLedger.tsx
 1  import { IcrcLedgerCanister, IcrcTokenMetadataResponse } from "@dfinity/ledger";
 2  import { useCallback, useEffect, useState } from "react";
 3  import { Principal } from "@dfinity/principal";
 4  import useAuth from "../../auth/hooks/useAuth";
 5  
 6  const useCkBtcLedger = () => {
 7    const { identity, agent } = useAuth();
 8    const [ledgerActor, setLedgerActor] = useState<IcrcLedgerCanister | undefined>();
 9    const [metadata, setMetadata] = useState<IcrcTokenMetadataResponse>();
10    const [balance, setBalance] = useState<bigint | null>();
11  
12    useEffect(()=> {
13      if(identity && agent) {
14        console.log("Found identity in useCkbtc ledger hook");
15      }
16    })
17  
18    const getMetadata = useCallback(async () => {
19      if (!ledgerActor) {
20        throw new Error("LedgerCanister not initialized");
21      }
22      setMetadata(await ledgerActor.metadata({ certified: false }));
23    }, [ledgerActor]);
24  
25    const getBalance = useCallback(async () => {
26      if (!ledgerActor || !identity) {
27        return null;
28      }
29      setBalance(
30        await ledgerActor.balance({
31          owner: identity.getPrincipal(),
32          certified: false,
33        })
34      );
35    }, [ledgerActor, identity]);
36  
37    useEffect(() => {
38      if (!identity || !agent || metadata || balance) return;
39      const init = async () => {
40        const ledgerActor = IcrcLedgerCanister.create({
41          agent,
42          canisterId: Principal.fromText(
43            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
44            process.env.MY_LEDGER_CANISTER_ID!
45          ),
46        });
47        setLedgerActor(ledgerActor);
48        await getMetadata();
49        await getBalance();
50      };
51      init();
52    }, [identity, agent, getBalance, getMetadata, metadata, balance]);
53  
54    return {
55      ledgerActor,
56      getMetadata,
57      getBalance,
58      metadata, 
59      balance 
60    };
61  }
62  
63  export default useCkBtcLedger;