Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
28100c7
feat(onramp): start with onramp
heyllog Mar 2, 2026
e9aa58b
Merge branch 'main' into feat/TON-240-onramp
heyllog Mar 3, 2026
5d720d6
feat(onramp): add mercuryo
heyllog Mar 4, 2026
8365ce6
feat(onramp): start onramp widget
heyllog Apr 7, 2026
014bcdd
Merge branch 'main' into feat/TON-622-onramp-design
heyllog Apr 7, 2026
e0e4c33
feat(onramp): reword design
heyllog Apr 7, 2026
3e3d288
feat(onramp): add resize for input
heyllog Apr 7, 2026
db174a4
feat(onramp): create centered amount input
heyllog Apr 7, 2026
7ddf526
feat(onramp): cleanup
heyllog Apr 7, 2026
d28b3f7
feat(swap): cleanup
heyllog Apr 7, 2026
f300f59
feat(onramp): i18n
heyllog Apr 8, 2026
3795663
feat(onramp): add sections in list
heyllog Apr 8, 2026
99bf962
feat(onramp): add sections in currencies list
heyllog Apr 8, 2026
765e343
feat(onramp): draft crypto onramp
heyllog Apr 13, 2026
5ed90a3
Merge branch 'feat/TON-376-swap-design' into feat/TON-622-onramp-design
heyllog Apr 17, 2026
bb69304
Merge branch feat/TON-240-onramp into feat/TON-622-onramp-design
heyllog Apr 17, 2026
5719b1d
feat(onramp): draft connect
heyllog Apr 17, 2026
ec41a6d
Merge branch feat/TON-729-staking-ui into feat/TON-622-onramp-design
heyllog Apr 17, 2026
10cdd6e
feat(onramp): draft tonpay
heyllog Apr 17, 2026
475e91a
Merge branch 'feat/TON-729-staking-ui' into feat/TON-622-onramp-design
heyllog Apr 20, 2026
cd3ecb5
feat(onramp): add tonpay widget in appkit-minter
heyllog Apr 20, 2026
d3c5194
Merge branch 'feat/TON-729-staking-ui' into feat/TON-622-onramp-design
heyllog Apr 20, 2026
e9545a9
Merge branch 'feat/TON-729-staking-ui' into feat/TON-622-onramp-design
heyllog Apr 20, 2026
731e4fd
Merge branch feat/TON-622-onramp-design into feat/TON-622-crypto-onra…
heyllog Apr 21, 2026
83f6b38
feat(crypto-onramp): add crypto onramp manager/provider
heyllog Apr 21, 2026
63b3a2b
feat(crypto-onramp): add swaps.xyz
heyllog Apr 21, 2026
1820014
feat(crypto-onramp): add some crypto onramp hooks
heyllog Apr 21, 2026
fcdefe9
feat(crypto-onramp): add swaps.xyz
heyllog Apr 21, 2026
3614105
feat(crypto-onramp): add debounce
heyllog Apr 21, 2026
930b2a4
feat(crypto-onramp): handle errors
heyllog Apr 21, 2026
423976b
feat(crypto-onramp): add info section
heyllog Apr 21, 2026
9be2217
feat(crypto-onramp): ui adjustments
heyllog Apr 21, 2026
6099d23
feat(crypto-onramp): reset quote on modal closing
heyllog Apr 21, 2026
e5e9f4f
feat(crypto-onramp): add status checking
heyllog Apr 21, 2026
0c95bd6
feat(crypto-onramp): add refund address support
heyllog Apr 21, 2026
89dd20a
feat(crypto-onramp): integrate Layerswap provider and enhance balance…
TrueCarry Apr 21, 2026
3ea59a6
feat(crypto-onramp): rework balance row in modal
heyllog Apr 22, 2026
9f0af47
feat(swap): fix fiatSymbol
heyllog Apr 22, 2026
47d7ce1
feat(appkit): replace function with const
heyllog Apr 22, 2026
e0780e6
feat(appkit): add refetch intervals for balances in widgets
heyllog Apr 22, 2026
9faf581
Merge branch feat/TON-729-staking-ui into feat/TON-622-crypto-onramp-…
heyllog May 1, 2026
364bd68
feat(crypto-onramp): polishing
heyllog May 4, 2026
62353f0
feat(crypto-onramp): add crypto onramp actions/hooks to get providers
heyllog May 4, 2026
6a0f0df
feat(crypto-onramp): add factory functions
heyllog May 4, 2026
c489795
feat(crypto-onramp): update docs, rework addresses logic
heyllog May 4, 2026
68ba584
feat(crypto-onramp): add requiresRefundAddress flag
heyllog May 4, 2026
f1ec9bd
feat(crypto-onramp): rework refund address logic
heyllog May 5, 2026
d6badd1
feat(crypto-onramp): add isReversedAmountSupported flag
heyllog May 5, 2026
2003f79
feat(crypto-onramp): small fixes in providers
heyllog May 5, 2026
37f8731
feat(crypto-onramp): rework chains
heyllog May 6, 2026
7eddc59
Merge branch feat/TON-729-staking-ui into feat/TON-622-crypto-onramp-…
heyllog May 7, 2026
b18933f
feat(appkit-react): replace components
heyllog May 7, 2026
cab129c
feat(appkit-react): add missing stories
heyllog May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ packages/walletkit-android-bridge/*.sh

release-artifacts
*.tgz
apps/appkit-minter/Caddyfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { useWatchBalance, useWatchTransactions, useWatchJettons } from '@ton/appkit-react';
import { toast } from 'sonner';

import { MinterPage, StakingPage, SwapPage, SignMessagePage } from '@/pages';
import { MinterPage, StakingPage, SwapPage, OnrampPage, SignMessagePage } from '@/pages';

export const AppRouter: React.FC = () => {
// Enable global real-time balance updates
Expand Down Expand Up @@ -52,6 +52,7 @@ export const AppRouter: React.FC = () => {
<Route path="/" element={<MinterPage />} />
<Route path="/swap" element={<SwapPage />} />
<Route path="/staking" element={<StakingPage />} />
<Route path="/onramp" element={<OnrampPage />} />
<Route path="/sign" element={<SignMessagePage />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

import type React from 'react';
import { Coins, ArrowLeftRight, Sparkles, BookOpen, Github, PenLine } from 'lucide-react';
import { Coins, ArrowLeftRight, Sparkles, BookOpen, Github, PenLine, CreditCard } from 'lucide-react';
import { Link, NavLink } from 'react-router-dom';

import { AppLogo } from '../app-logo';
Expand All @@ -31,6 +31,7 @@ const NAV_LINKS: readonly { to: string; label: string; icon: React.ComponentType
{ to: '/', label: 'Mint', icon: Sparkles },
{ to: '/swap', label: 'Swap', icon: ArrowLeftRight },
{ to: '/staking', label: 'Staking', icon: Coins },
{ to: '/onramp', label: 'Buy', icon: CreditCard },
{ to: '/sign', label: 'Sign Message', icon: PenLine },
];

Expand Down
2 changes: 1 addition & 1 deletion apps/appkit-minter/src/core/components/layout/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const Layout: React.FC<LayoutProps> = ({ title, children }) => {

<main className="flex-1 w-full max-w-3xl mx-auto px-4 py-4">{children}</main>

<footer className="text-center py-2 text-xs text-muted-foreground">
<footer className="text-center pt-2 pb-4 text-xs text-muted-foreground">
<p>Powered by AppKit & TonConnect</p>
</footer>
</SidebarInset>
Expand Down
8 changes: 7 additions & 1 deletion apps/appkit-minter/src/core/configs/app-kit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
import { createDeDustProvider } from '@ton/appkit/swap/dedust';
import { createOmnistonProvider } from '@ton/appkit/swap/omniston';
import { createTonstakersProvider } from '@ton/appkit/staking/tonstakers';
import { createLayerswapProvider } from '@ton/appkit/crypto-onramp/layerswap';

import { ENV_TON_API_KEY_TESTNET, ENV_TON_API_KEY_MAINNET } from '@/core/configs/env';

Expand Down Expand Up @@ -48,7 +49,12 @@ export const appKit = new AppKit({
},
}),
],
providers: [createOmnistonProvider(), createDeDustProvider(), createTonstakersProvider()],
providers: [
createOmnistonProvider(),
createDeDustProvider(),
createTonstakersProvider(),
createLayerswapProvider(),
],
});

// TODO: replace in normal config
Expand Down
1 change: 1 addition & 0 deletions apps/appkit-minter/src/pages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
export { MinterPage } from './minter-page';
export { SwapPage } from './swap-page';
export { StakingPage } from './staking-page';
export { OnrampPage } from './onramp-page';
export { SignMessagePage } from './sign-message-page';
81 changes: 81 additions & 0 deletions apps/appkit-minter/src/pages/onramp-page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/**
* Copyright (c) TonTech.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

import type React from 'react';
import { CryptoOnrampWidget } from '@ton/appkit-react';
import type { CryptoOnrampToken, CryptoPaymentMethod } from '@ton/appkit-react';

import { Card, Layout } from '@/core/components';

const TOKENS: CryptoOnrampToken[] = [
// {
// id: 'ton',
// symbol: 'TON',
// name: 'Toncoin',
// decimals: 9,
// address: '0x0000000000000000000000000000000000000000',
// logo: 'https://asset.ston.fi/img/EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c/c8d21a3d93f9b574381e0a8d8f16d48b325dd8f54ce172f599c1e9d6c62f03f7',
// },
{
id: 'usdt-ton',
symbol: 'USDT',
name: 'Tether USD',
decimals: 6,
address: 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs',
logo: 'https://asset.ston.fi/img/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs/1a87edfee9a28b05578853952e5effb8cc30af1e0fb90043aa2ce19dce490849',
},
];

const PAYMENT_METHODS: CryptoPaymentMethod[] = [
// {
// id: 'usdc-base',
// symbol: 'USDC',
// name: 'USD Coin',
// network: 'Base',
// networkId: '8453',
// decimals: 6,
// address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
// logo: 'https://assets.coingecko.com/coins/images/6319/standard/USDC.png?1769615602',
// networkLogo: 'https://avatars.githubusercontent.com/u/108554348?s=280&v=4',
// },
// {
// id: 'usdt-bsc',
// symbol: 'USDT',
// name: 'Tether',
// network: 'BSC',
// networkId: '56',
// decimals: 18,
// address: '0x55d398326f99059fF775485246999027B3197955',
// logo: 'https://asset.ston.fi/img/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs/1a87edfee9a28b05578853952e5effb8cc30af1e0fb90043aa2ce19dce490849',
// networkLogo: 'https://assets.coingecko.com/coins/images/825/standard/bnb-icon2_2x.png',
// },
{
id: 'usdt0-arbitrum',
symbol: 'USDT0',
name: 'Tether USD0',
chain: 'eip155:42161',
decimals: 6,
address: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9',
logo: 'https://cdn.layerswap.io/layerswap/currencies/usdt0.png',
},
];

export const OnrampPage: React.FC = () => {
return (
<Layout title="Buy">
<Card className="w-full max-w-[422px] mx-auto">
<CryptoOnrampWidget
tokens={TOKENS}
defaultTokenId="usdt-ton"
paymentMethods={PAYMENT_METHODS}
defaultMethodId="usdc-base"
/>
</Card>
</Layout>
);
};
11 changes: 10 additions & 1 deletion apps/appkit-minter/src/pages/swap-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { Card, Layout } from '@/core/components';

const TOKENS: AppkitUIToken[] = [
{
id: 'ton',
symbol: 'TON',
name: 'Toncoin',
decimals: 9,
Expand All @@ -23,6 +24,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c/c8d21a3d93f9b574381e0a8d8f16d48b325dd8f54ce172f599c1e9d6c62f03f7',
},
{
id: 'usdt',
symbol: 'USD₮',
name: 'Tether USD',
decimals: 6,
Expand All @@ -32,6 +34,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs/1a87edfee9a28b05578853952e5effb8cc30af1e0fb90043aa2ce19dce490849',
},
{
id: 'ston',
symbol: 'STON',
name: 'STON',
decimals: 9,
Expand All @@ -40,6 +43,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO/7c9798ce1e64707fb4cb8f025d4060f66b386ed381b50498e3b88731cedeffe8',
},
{
id: 'xaut',
symbol: 'XAUt0',
name: 'Tether Gold',
decimals: 6,
Expand All @@ -48,6 +52,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQA1R_LuQCLHlMgOo1S4G7Y7W1cd0FrAkbA10Zq7rddKxi9k/4aaaa7c30d7811bced81ded6bc116dcc82a78c6aea53d6012fd586a5826963ad',
},
{
id: 'usde',
symbol: 'USDe',
name: 'Ethena USDe',
decimals: 6,
Expand All @@ -57,6 +62,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQAIb6KmdfdDR7CN1GBqVJuP25iCnLKCvBlJ07Evuu2dzP5f/dbcc67993cd4aad4845a97a4a9722c6cb618123997c8112c29d4932b2739c4cd',
},
{
id: 'tston',
symbol: 'tsTON',
name: 'Tonstakers TON',
decimals: 9,
Expand All @@ -65,6 +71,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQC98_qAmNEptUtPc7W6xdHh_ZHrBUFpw5Ft_IzNU20QAJav/38f530facb209e4696b8aef17af51df94d16bd879926c517b07d25841da287b7',
},
{
id: 'gemston',
symbol: 'GEMSTON',
name: 'GEMSTON',
decimals: 9,
Expand All @@ -73,6 +80,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa/c6ab1e58e3b9b58a7429d38b7feab731afae2f66dc301a6c42041fdf7e9d7c9c',
},
{
id: 'utya',
symbol: 'UTYA',
name: 'Utya',
decimals: 9,
Expand All @@ -81,6 +89,7 @@ const TOKENS: AppkitUIToken[] = [
logo: 'https://asset.ston.fi/img/EQBaCgUwOoc6gHCNln_oJzb0mVs79YG7wYoavh-o1ItaneLA/727e6cc971afdfa8ed9c698d0909eee9de344a0b6766ff5e4ddcc3323449d6f6',
},
{
id: 'weth',
symbol: 'WETH',
name: 'Wrapped Ether',
decimals: 18,
Expand All @@ -99,7 +108,7 @@ export const SwapPage: React.FC = () => {
network={Network.mainnet()}
fiatSymbol="$"
defaultFromSymbol="TON"
defaultToSymbol="USD₮"
defaultToSymbol="USDT"
/>
</Card>
</Layout>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export const TokenListSheet: FC<TokenListSheetProps> = ({ isOpen, onClose, onSel
</ActiveTouchAction>
</View>

<ActiveTouchAction onPress={handleSelectTon} style={styles.tokenItem}>
<ActiveTouchAction onPress={handleSelectTon} style={styles.currencyItem}>
<View style={styles.tokenInfo}>
<AppLogo />
<View style={styles.tokenDetails}>
Expand All @@ -89,7 +89,7 @@ export const TokenListSheet: FC<TokenListSheetProps> = ({ isOpen, onClose, onSel
<ActiveTouchAction
key={address}
onPress={() => handleSelectJetton(jetton)}
style={styles.tokenItem}
style={styles.currencyItem}
>
<View style={styles.tokenInfo}>
{image ? (
Expand Down Expand Up @@ -143,7 +143,7 @@ const styles = StyleSheet.create(({ sizes, colors }, runtime) => ({
top: 0,
right: 12,
},
tokenItem: {
currencyItem: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
Expand Down
26 changes: 26 additions & 0 deletions demo/examples/src/appkit/actions/onramp/build-onramp-url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* Copyright (c) TonTech.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

import type { AppKit } from '@ton/appkit';
import { buildOnrampUrl, getOnrampQuote } from '@ton/appkit/onramp';

export const buildOnrampUrlExample = async (appKit: AppKit) => {
// SAMPLE_START: BUILD_ONRAMP_URL
const quote = await getOnrampQuote(appKit, {
fiatCurrency: 'USD',
cryptoCurrency: 'TON',
amount: '100',
});

const url = await buildOnrampUrl(appKit, {
quote,
userAddress: 'UQ...wallet-address...',
});
console.log('Onramp URL:', url);
// SAMPLE_END: BUILD_ONRAMP_URL
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* Copyright (c) TonTech.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

import type { AppKit } from '@ton/appkit';
import { getCryptoOnrampProvider } from '@ton/appkit';

export const getCryptoOnrampProviderExample = (appKit: AppKit) => {
// SAMPLE_START: GET_CRYPTO_ONRAMP_PROVIDER
const provider = getCryptoOnrampProvider(appKit, { id: 'layerswap' });
console.log('Crypto onramp provider:', provider.providerId);
// SAMPLE_END: GET_CRYPTO_ONRAMP_PROVIDER
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* Copyright (c) TonTech.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

import type { AppKit } from '@ton/appkit';
import { getCryptoOnrampProviders } from '@ton/appkit';

export const getCryptoOnrampProvidersExample = (appKit: AppKit) => {
// SAMPLE_START: GET_CRYPTO_ONRAMP_PROVIDERS
const providers = getCryptoOnrampProviders(appKit);
console.log(
'Registered crypto onramp providers:',
providers.map((p) => p.providerId),
);
// SAMPLE_END: GET_CRYPTO_ONRAMP_PROVIDERS
};
22 changes: 22 additions & 0 deletions demo/examples/src/appkit/actions/onramp/get-onramp-quote.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright (c) TonTech.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

import type { AppKit } from '@ton/appkit';
import { getOnrampQuote } from '@ton/appkit/onramp';

export const getOnrampQuoteExample = async (appKit: AppKit) => {
// SAMPLE_START: GET_ONRAMP_QUOTE
const quote = await getOnrampQuote(appKit, {
fiatCurrency: 'USD',
cryptoCurrency: 'TON',
amount: '100',
isFiatAmount: true,
});
console.log('Onramp Quote:', quote);
// SAMPLE_END: GET_ONRAMP_QUOTE
};
Loading
Loading