Core Components
<AnySpend>
The primary interface component for token-to-token exchanges and fiat onramps.
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpend.tsx
import { AnySpend } from "@b3dotfun/sdk/anyspend/react";
<AnySpend
mode="modal"
defaultActiveTab="crypto"
destinationTokenAddress="0x..."
destinationTokenChainId={8333}
recipientAddress="0x..."
hideTransactionHistoryButton={false}
/>;
Props
mode
'modal' | 'page'
default:"'modal'"
Display as modal overlay or full page
defaultActiveTab
'crypto' | 'fiat'
default:"'crypto'"
Initial payment method tab
Target token address for buy mode
Chain ID of destination token
hideTransactionHistoryButton
Hide transaction history access
Load specific order by ID
Usage Examples
Basic Token Swap
Fiat-to-Crypto Onramp
<AnySpend
mode="page"
recipientAddress={userWalletAddress}
/>
A streamlined button component for NFT purchases with built-in payment handling.
import { AnySpendNFTButton } from "@b3dotfun/sdk/anyspend/react";
<AnySpendNFTButton nftContract={nftContractDetails} recipientAddress="0x..." />;
Props
NFT contract configuration object
Wallet address to receive the NFT
NFTContract Interface
interface NFTContract {
chainId: number; // Blockchain network ID
contractAddress: string; // NFT contract address
price: string; // Price in wei
priceFormatted: string; // Human-readable price
currency: {
chainId: number;
address: string; // Token contract (0x0 for native ETH)
name: string;
symbol: string;
decimals: number;
metadata: {
logoURI: string;
};
};
name: string; // NFT collection name
description: string; // NFT description
imageUrl: string; // Preview image URL
tokenId: number | null; // Token ID (null for ERC721, specific ID for ERC1155)
type: "erc721" | "erc1155"; // NFT contract type
}
Usage Example
const coolNFT = {
chainId: 8333,
contractAddress: "0x9c275ff1634519E9B5449ec79cd939B5F900564d",
price: "500000000000000000", // 0.5 ETH
priceFormatted: "0.5",
currency: {
chainId: 8333,
address: "0x0000000000000000000000000000000000000000",
name: "Ether",
symbol: "ETH",
decimals: 18,
metadata: {
logoURI: "https://assets.coingecko.com/coins/images/279/standard/ethereum.png?1696501628",
},
},
name: "Cool Art Collection",
description: "Unique digital artwork",
imageUrl: "https://example.com/nft-preview.png",
tokenId: null,
type: "erc721",
};
<AnySpendNFTButton nftContract={coolNFT} recipientAddress={userAddress} />;
<AnySpendCustom>
The most flexible component for custom smart contract interactions, including gaming, staking, and DeFi operations.
Custom Contract Interaction
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpendCustom.tsx
import { AnySpendCustom } from "@b3dotfun/sdk/anyspend/react";
<AnySpendCustom
orderType="custom"
dstChainId={8333}
dstToken={tokenDetails}
dstAmount="1000000000000000000"
contractAddress="0x..."
encodedData="0x..."
spenderAddress="0x..."
metadata={customMetadata}
header={CustomHeaderComponent}
onSuccess={txHash => console.log("Custom action completed", txHash)}
/>;
Props
Target blockchain network
Token being used for payment
Amount in wei/smallest unit
Target smart contract address
Encoded function call data
Optional token spender address
Custom metadata for tracking
onSuccess
(txHash?: string) => void
Success callback with transaction hash
Usage Example - Staking
// Encode staking function call
const stakeAmount = "1000000000000000000"; // 1 token
const stakingCalldata = encodeFunctionData({
abi: stakingABI,
functionName: "stake",
args: [stakeAmount, 30], // 30 days
});
<AnySpendCustom
orderType="custom"
dstChainId={8333}
dstToken={stakingToken}
dstAmount={stakeAmount}
contractAddress="0xStakingContract..."
encodedData={stakingCalldata}
metadata={{
action: "stake",
duration: 30,
expectedRewards: "5.2%",
}}
header={({ anyspendPrice, isLoadingAnyspendPrice }) => (
<div className="staking-header">
<h2>Stake Tokens</h2>
<p>Duration: 30 days</p>
<p>Expected APY: 5.2%</p>
{!isLoadingAnyspendPrice && <p>Total Cost: ${anyspendPrice?.usdPrice}</p>}
</div>
)}
/>;
Specialized Components
<AnySpendNFT>
Enhanced NFT component with additional marketplace features.
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpendNFT.tsx
<AnySpendNFT nftContract={nftDetails} recipientAddress="0x..." showMetadata={true} showPriceHistory={true} />
<AnySpendStakeB3>
Pre-configured component for B3 token staking.
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpendStakeB3.tsx
<AnySpendStakeB3 stakeAmount="1000000000000000000" stakingDuration={30} recipientAddress="0x..." />
<AnySpendBuySpin>
Gaming-specific component for purchasing spin wheels or lottery tickets.
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpendBuySpin.tsx
<AnySpendBuySpin gameContract="0x..." spinPrice="100000000000000000" recipientAddress="0x..." />
<AnySpendTournament>
Tournament entry payment component.
// https://github.com/b3-fun/b3/blob/main/packages/sdk/src/anyspend/react/components/AnySpendTournament.tsx
<AnySpendTournament tournamentId="tournament-123" entryFee="500000000000000000" recipientAddress="0x..." />
Component Styling
All components come with default styling that can be customized using CSS variables:
/* Override default styles */
.anyspend-modal {
--anyspend-primary: #6366f1;
--anyspend-secondary: #f3f4f6;
--anyspend-border-radius: 12px;
}
Component | React Web | React Native |
---|
AnySpend | ✅ | ✅ |
AnySpendNFTButton | ✅ | ✅ |
AnySpendCustom | ✅ | ✅ |
AnySpendNFT | ✅ | ✅ |
Fiat onramp features | ✅ | ❌ |
Next Steps