diff --git a/packages/snap/package.json b/packages/snap/package.json index cf720da0..1ce605df 100644 --- a/packages/snap/package.json +++ b/packages/snap/package.json @@ -26,7 +26,7 @@ }, "dependencies": { "@hathor/hathor-rpc-handler": "workspace:*", - "@hathor/wallet-lib": "2.14.0", + "@hathor/wallet-lib": "2.16.0", "@metamask/snaps-sdk": "9.2.0", "node-stdlib-browser": "1.3.1" }, diff --git a/packages/snap/snap.manifest.json b/packages/snap/snap.manifest.json index b88d22b5..a1088043 100644 --- a/packages/snap/snap.manifest.json +++ b/packages/snap/snap.manifest.json @@ -3,7 +3,7 @@ "description": "Hathor Network Snap integration", "proposedName": "Hathor Wallet", "source": { - "shasum": "GSxSmcmiD0HXf+qm3n/2QBYBgd+lt/2sxRwJxNoNVlc=", + "shasum": "zuKLrJeNvUp9ImMD6+3cJ8ShO6sN9CSWjwFrwwitSFc=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/snap/src/components/NetworkFee.tsx b/packages/snap/src/components/NetworkFee.tsx new file mode 100644 index 00000000..2b3cfad2 --- /dev/null +++ b/packages/snap/src/components/NetworkFee.tsx @@ -0,0 +1,25 @@ +/** + * Copyright (c) Hathor Labs and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { Bold, Box, Divider, Text } from '@metamask/snaps-sdk/jsx'; +import { constants as libConstants, numberUtils } from '@hathor/wallet-lib'; + +export const formatHtrAmount = (amount?: bigint): string => { + if (amount === undefined || amount === 0n) { + return '-'; + } + return `${numberUtils.prettyValue(amount)} ${libConstants.DEFAULT_NATIVE_TOKEN_CONFIG.symbol}`; +} + +export const NetworkFee = ({ networkFee, showDivider = false }: { networkFee?: bigint; showDivider?: boolean }) => { + return ( + + {showDivider ? : null} + Network fee: {formatHtrAmount(networkFee)} + + ); +} diff --git a/packages/snap/src/components/index.ts b/packages/snap/src/components/index.ts index 1f126a27..64f60a51 100644 --- a/packages/snap/src/components/index.ts +++ b/packages/snap/src/components/index.ts @@ -6,3 +6,4 @@ */ export { PushTxWarning } from './PushTxWarning'; +export { NetworkFee, formatHtrAmount } from './NetworkFee'; diff --git a/packages/snap/src/dialogs/createNano.tsx b/packages/snap/src/dialogs/createNano.tsx index 3aed36a1..86a71b10 100644 --- a/packages/snap/src/dialogs/createNano.tsx +++ b/packages/snap/src/dialogs/createNano.tsx @@ -8,7 +8,7 @@ import { REQUEST_METHODS, DIALOG_TYPES } from '../constants'; import { Bold, Box, Card, Container, Copyable, Heading, Icon, Section, Text, Tooltip } from '@metamask/snaps-sdk/jsx'; import { constants as libConstants, bigIntUtils, dateUtils, NanoContractActionType, numberUtils } from '@hathor/wallet-lib'; -import { PushTxWarning } from '../components'; +import { NetworkFee, PushTxWarning } from '../components'; const renderOptionalContractDetail = (param, title) => { if (!param) return null; @@ -187,6 +187,7 @@ export const createNanoPage = async (data, params, origin) => ( {renderArguments(data.parsedArgs)} {renderActions(params.actions, data.tokenDetails)} + diff --git a/packages/snap/src/dialogs/createToken.tsx b/packages/snap/src/dialogs/createToken.tsx index 716c722c..d2808b5f 100644 --- a/packages/snap/src/dialogs/createToken.tsx +++ b/packages/snap/src/dialogs/createToken.tsx @@ -8,6 +8,7 @@ import { REQUEST_METHODS, DIALOG_TYPES } from '../constants'; import { Box, Card, Container, Divider, Heading, Section, Text } from '@metamask/snaps-sdk/jsx'; import { numberUtils } from '@hathor/wallet-lib'; +import { formatHtrAmount } from '../components'; const renderConditionalCard = (title, value, parsedValue = null) => { if (value == null) { @@ -21,8 +22,28 @@ const boolToString = (bool) => { return bool ? 'true' : 'false'; } -export const createTokenPage = async (data, params, origin) => ( - await snap.request({ +/** + * Get the fee model label based on token version + */ +const getFeeModelLabel = (version?: 'deposit' | 'fee'): string => { + switch (version) { + case 'fee': + return 'Fee Token'; + case 'deposit': + default: + return 'Deposit Token'; + } +} + +export const createTokenPage = async (data, params, origin) => { + const amount = BigInt(params.amount); + const feeModelLabel = getFeeModelLabel(params.version); + + // Use pre-calculated values from the RPC handler (passed via data) + const networkFee = data.fee; + const depositAmount = data.deposit; + + return await snap.request({ method: REQUEST_METHODS.DIALOG, params: { type: DIALOG_TYPES.CONFIRMATION, @@ -36,7 +57,11 @@ export const createTokenPage = async (data, params, origin) => (
- + + + + + {renderConditionalCard('Address', params.address)} {renderConditionalCard('Change address', params.change_address)} {renderConditionalCard('Create mint authority', params.create_mint, boolToString(params.create_mint))} @@ -51,5 +76,5 @@ export const createTokenPage = async (data, params, origin) => ( ), }, - }) -) + }); +} diff --git a/packages/snap/src/dialogs/sendTransaction.tsx b/packages/snap/src/dialogs/sendTransaction.tsx index 948bc085..5eada513 100644 --- a/packages/snap/src/dialogs/sendTransaction.tsx +++ b/packages/snap/src/dialogs/sendTransaction.tsx @@ -8,7 +8,7 @@ import { REQUEST_METHODS, DIALOG_TYPES } from '../constants'; import { Bold, Box, Container, Divider, Heading, Icon, Section, Text, Tooltip } from '@metamask/snaps-sdk/jsx'; import { constants as libConstants, numberUtils, helpersUtils } from '@hathor/wallet-lib'; -import { PushTxWarning } from '../components'; +import { NetworkFee, PushTxWarning } from '../components'; const renderInputs = (inputs) => { if (!inputs) { @@ -122,6 +122,7 @@ export const sendTransactionPage = async (data, params, origin) => ( {renderOutputs(params.outputs, data.tokenDetails)} {renderChangeAddress(params.changeAddress)} +
@@ -129,4 +130,4 @@ export const sendTransactionPage = async (data, params, origin) => ( ), }, }) -) \ No newline at end of file +) diff --git a/yarn.lock b/yarn.lock index 60f4e075..5dc1bb4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2507,7 +2507,7 @@ __metadata: resolution: "@hathor/snap@workspace:packages/snap" dependencies: "@hathor/hathor-rpc-handler": "workspace:*" - "@hathor/wallet-lib": "npm:2.14.0" + "@hathor/wallet-lib": "npm:2.16.0" "@jest/globals": "npm:29.7.0" "@metamask/auto-changelog": "npm:3.4.4" "@metamask/eslint-config": "npm:12.2.0"