Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -5,6 +5,7 @@ dist/
dists/
dist-web/
dist-dweb/
public/miniapps/
tmp/
.tmp/
.chat/
Expand Down
1 change: 1 addition & 0 deletions deno.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 35 additions & 6 deletions miniapps/forge/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -219,25 +219,52 @@ export default function App() {
setRechargeStep('confirm');
};

const externalDecimals =
typeof selectedOption?.externalInfo.decimals === 'number' && Number.isFinite(selectedOption.externalInfo.decimals)
? selectedOption.externalInfo.decimals
: undefined;
const externalTokenAddress = selectedOption?.externalInfo.contract?.trim();
const externalDecimalsFallback = externalTokenAddress
? (() => {
switch (selectedOption?.externalChain) {
case 'ETH':
case 'BSC':
return 18;
case 'TRON':
return 6;
default:
return undefined;
}
})()
: undefined;
const resolvedExternalDecimals = externalDecimals ?? externalDecimalsFallback;
const usingFallbackDecimals =
Boolean(externalTokenAddress) && externalDecimals === undefined && resolvedExternalDecimals !== undefined;

const handleConfirm = useCallback(async () => {
if (!externalAccount || !internalAccount || !selectedOption) return;
const tokenAddress = selectedOption.externalInfo.contract?.trim();
if (tokenAddress && resolvedExternalDecimals === undefined) {
setError(t('error.missingDecimals'));
return;
}

setError(null);
setRechargeStep('processing');

await forgeHook.forge({
externalChain: selectedOption.externalChain,
externalAsset: selectedOption.externalAsset,
externalDecimals: selectedOption.externalInfo.decimals,
externalDecimals: resolvedExternalDecimals,
depositAddress: selectedOption.externalInfo.depositAddress,
externalContract: selectedOption.externalInfo.contract,
externalContract: tokenAddress,
amount,
externalAccount,
internalChain: selectedOption.internalChain,
internalAsset: selectedOption.internalAsset,
internalAccount,
});
}, [externalAccount, internalAccount, selectedOption, amount, forgeHook]);
}, [externalAccount, internalAccount, selectedOption, amount, forgeHook, resolvedExternalDecimals, t]);

const handleReset = useCallback(() => {
setRechargeStep('swap');
Expand All @@ -257,7 +284,6 @@ export default function App() {
return groups;
}, [forgeOptions]);

const externalDecimals = selectedOption?.externalInfo.decimals;
const contractAddress = selectedOption?.externalInfo.contract?.trim();
const contractDisplay = contractAddress
? `${contractAddress.slice(0, 6)}...${contractAddress.slice(-4)}`
Expand Down Expand Up @@ -455,8 +481,11 @@ export default function App() {
</div>
<div className="text-muted-foreground space-y-1 text-xs">
<div>{t('forge.amountHint', { symbol: selectedOption.externalAsset })}</div>
{typeof externalDecimals === 'number' && (
<div>{t('forge.decimalsHint', { decimals: externalDecimals })}</div>
{typeof resolvedExternalDecimals === 'number' && (
<div>
{t('forge.decimalsHint', { decimals: resolvedExternalDecimals })}
{usingFallbackDecimals ? ` (${t('forge.decimalsFallback')})` : null}
</div>
)}
{contractDisplay && (
<div title={contractAddress ?? undefined}>
Expand Down
2 changes: 1 addition & 1 deletion miniapps/forge/src/api/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const externalAssetInfoItemSchema = z.object({
depositAddress: z.string(),
assetType: z.string(),
logo: z.string().optional(),
decimals: z.number().optional(),
decimals: z.coerce.number().optional(),
}).passthrough()

const redemptionConfigSchema = z.object({
Expand Down
2 changes: 2 additions & 0 deletions miniapps/forge/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"continue": "Continue",
"amountHint": "Amount is in {{symbol}}",
"decimalsHint": "Token decimals: {{decimals}}",
"decimalsFallback": "default",
"contractHint": "Contract: {{address}}"
},
"redemption": {
Expand Down Expand Up @@ -75,6 +76,7 @@
"sdkNotInit": "Bio SDK not initialized",
"connectionFailed": "Connection failed",
"invalidAmount": "Please enter a valid amount",
"missingDecimals": "Missing token decimals configuration",
"forgeFailed": "Operation failed"
},
"picker": {
Expand Down
2 changes: 2 additions & 0 deletions miniapps/forge/src/i18n/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"continue": "继续",
"amountHint": "数量单位:{{symbol}}",
"decimalsHint": "精度:{{decimals}} 位",
"decimalsFallback": "默认",
"contractHint": "合约:{{address}}"
},
"redemption": {
Expand Down Expand Up @@ -75,6 +76,7 @@
"sdkNotInit": "Bio SDK 未初始化",
"connectionFailed": "连接失败",
"invalidAmount": "请输入有效金额",
"missingDecimals": "缺少资产精度配置",
"forgeFailed": "操作失败"
},
"picker": {
Expand Down
2 changes: 2 additions & 0 deletions miniapps/forge/src/i18n/locales/zh-TW.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"continue": "繼續",
"amountHint": "數量單位:{{symbol}}",
"decimalsHint": "精度:{{decimals}} 位",
"decimalsFallback": "預設",
"contractHint": "合約:{{address}}"
},
"redemption": {
Expand Down Expand Up @@ -75,6 +76,7 @@
"sdkNotInit": "Bio SDK 未初始化",
"connectionFailed": "連接失敗",
"invalidAmount": "請輸入有效金額",
"missingDecimals": "缺少資產精度配置",
"forgeFailed": "操作失敗"
},
"picker": {
Expand Down
2 changes: 2 additions & 0 deletions miniapps/forge/src/i18n/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"continue": "继续",
"amountHint": "数量单位:{{symbol}}",
"decimalsHint": "精度:{{decimals}} 位",
"decimalsFallback": "默认",
"contractHint": "合约:{{address}}"
},
"redemption": {
Expand Down Expand Up @@ -75,6 +76,7 @@
"sdkNotInit": "Bio SDK 未初始化",
"connectionFailed": "连接失败",
"invalidAmount": "请输入有效金额",
"missingDecimals": "缺少资产精度配置",
"forgeFailed": "操作失败"
},
"picker": {
Expand Down
4 changes: 2 additions & 2 deletions miniapps/teleport/src/components/AuroraBackground.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const AuroraBackground = ({
...props
}: AuroraBackgroundProps) => {
return (
<main>
<div className="h-full">
<div
className={cn(
'transition-bg relative flex h-full flex-col items-center justify-center bg-slate-900 text-white',
Expand All @@ -32,6 +32,6 @@ export const AuroraBackground = ({
</div>
{children}
</div>
</main>
</div>
);
};
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
"@noble/hashes": "^2.0.1",
"@noble/secp256k1": "^3.0.0",
"@number-flow/react": "^0.5.10",
"@plaoc/is-dweb": "^0.1.2",
"@plaoc/plugins": "^1.1.9",
"@radix-ui/react-avatar": "^1.1.11",
"@radix-ui/react-dialog": "^1.1.15",
Expand Down Expand Up @@ -143,8 +144,8 @@
"@axe-core/playwright": "^4.11.0",
"@biochain/e2e-tools": "workspace:*",
"@inquirer/prompts": "^8.0.2",
"@playwright/test": "^1.57.0",
"@plaoc/cli": "^1.2.2",
"@playwright/test": "^1.57.0",
"@storybook/addon-docs": "^10.1.4",
"@storybook/addon-vitest": "^10.1.4",
"@storybook/react": "^10.1.4",
Expand Down
15 changes: 15 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading