fix(contract): use BigInt arithmetic in MeshMarketplaceContract.purchaseAsset
Replaces float-based lovelace arithmetic with BigInt throughout purchaseAsset to avoid silent precision loss for NFT prices above Number.MAX_SAFE_INTEGER (~9,007,199 ADA). The previous `as number` casts were TypeScript-only lies that caused a TypeError at runtime; converting via Number() fixed the crash but introduced silent rounding errors for large prices. Changes: - All fee and seller-payment calculations now use BigInt operators; quantities are only converted to string at the txOut boundary. - Ceiling division implemented as (a * b + 9999n) / 10000n instead of Math.ceil(float), which is exact and matches the on-chain semantics. - 1-ADA minimum fee floor is now guarded by priceBig > 0n so free listings (price = 0) no longer incur a spurious mandatory fee. - lovelaceEntry guard replaces the !.quantity non-null assertion with a descriptive error instead of an opaque TypeError. - Constructor validates feePercentageBasisPoint is in [0, 10000] and throws early rather than silently producing unbalanceable transactions. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>