diff --git a/src/lib/hooks/use-quiz.ts b/src/lib/hooks/use-quiz.ts index 14e8471..362986b 100644 --- a/src/lib/hooks/use-quiz.ts +++ b/src/lib/hooks/use-quiz.ts @@ -12,7 +12,10 @@ export function useQuiz(courseId: string) { const [error, setError] = useState(null); useEffect(() => { - if (!courseId) return; + if (!courseId) { + setLoading(false); + return; + } setLoading(true); getQuiz(courseId, jwt ?? undefined) .then(setQuiz) diff --git a/src/lib/stellar/contracts.ts b/src/lib/stellar/contracts.ts index 287c915..713c600 100644 --- a/src/lib/stellar/contracts.ts +++ b/src/lib/stellar/contracts.ts @@ -1,7 +1,7 @@ import type { NetworkType } from "./wallet"; import { simulateContractCall, signAndSubmitTransaction } from "./transactions"; import type { TransactionResult } from "@/types/stellar"; -import { scval } from "@stellar/stellar-sdk"; +import { xdr, scValToNative } from "@stellar/stellar-sdk"; // Validate required environment variables at startup function validateEnvironmentVariables() { @@ -69,7 +69,10 @@ export async function readRewardBalance( throw new Error("Invalid simulation result"); } - const resultArray = simResult.results || simResult; + const resultArray = + "results" in simResult && Array.isArray((simResult as Record).results) + ? (simResult as Record).results + : simResult; if (!Array.isArray(resultArray) || resultArray.length === 0) { throw new Error("No results in simulation response"); } @@ -79,7 +82,7 @@ export async function readRewardBalance( throw new Error("Missing XDR in simulation result"); } - const scVal = scval.native.fromXDR(result.xdr, "base64"); + const scVal = scValToNative(xdr.ScVal.fromXDR(result.xdr, "base64")); const balance = scVal as unknown as bigint | number | string; return String(balance); } diff --git a/src/lib/stellar/transactions.ts b/src/lib/stellar/transactions.ts index 95f8fe1..15169ba 100644 --- a/src/lib/stellar/transactions.ts +++ b/src/lib/stellar/transactions.ts @@ -1,5 +1,5 @@ import freighterApi from "@stellar/freighter-api"; -import { Contract, Address, TransactionBuilder, xdr } from "@stellar/stellar-sdk"; +import { Contract, Account, TransactionBuilder, nativeToScVal } from "@stellar/stellar-sdk"; import type { NetworkType } from "./wallet"; import { getNetworkPassphrase, getRpcUrl } from "./wallet"; import type { TransactionResult } from "@/types/stellar"; @@ -81,21 +81,14 @@ export async function simulateContractCall( const contract = new Contract(contractAddress); const txBuilder = new TransactionBuilder( - new Address(contractAddress), + new Account(contractAddress, "0"), { fee: "100", networkPassphrase: passphrase, } ); - const sorobanArgs = args.map((arg) => { - if (typeof arg === "string") return xdr.ScVal.scvString(arg); - if (typeof arg === "number") return xdr.ScVal.scvU32(arg); - if (typeof arg === "bigint") return xdr.ScVal.scvU64(arg); - if (typeof arg === "boolean") return xdr.ScVal.scvBool(arg); - if (arg instanceof Uint8Array) return xdr.ScVal.scvBytes(arg); - return xdr.ScVal.scvString(JSON.stringify(arg)); - }); + const sorobanArgs = args.map((arg) => nativeToScVal(arg)); const tx = txBuilder .addOperation(contract.call(method, ...sorobanArgs))