diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.otf new file mode 100755 index 00000000..b4f7c3bf Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff new file mode 100755 index 00000000..35736b28 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff2 new file mode 100755 index 00000000..97295197 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.otf new file mode 100755 index 00000000..0f667d43 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff new file mode 100755 index 00000000..899e904a Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff2 new file mode 100755 index 00000000..4ea6b623 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff2 differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.otf new file mode 100755 index 00000000..5b705fef Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff new file mode 100755 index 00000000..65aaf05c Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff2 new file mode 100755 index 00000000..874829ef Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.otf new file mode 100755 index 00000000..e433c7cb Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff new file mode 100755 index 00000000..94fcd1e8 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff2 new file mode 100755 index 00000000..b0726844 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.otf new file mode 100755 index 00000000..fdaa0625 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff new file mode 100755 index 00000000..c4efab11 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff2 new file mode 100755 index 00000000..3192b31f Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff2 differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.otf b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.otf new file mode 100755 index 00000000..30417eb2 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.otf differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff new file mode 100755 index 00000000..9e515180 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff differ diff --git a/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff2 b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff2 new file mode 100755 index 00000000..7916dae8 Binary files /dev/null and b/public/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.otf new file mode 100755 index 00000000..9661ee4e Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff new file mode 100755 index 00000000..ee0da2ca Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff2 new file mode 100755 index 00000000..524ffde7 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Black.otf new file mode 100755 index 00000000..00065024 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff new file mode 100755 index 00000000..fee183c0 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff2 new file mode 100755 index 00000000..8918493c Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Black.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.otf new file mode 100755 index 00000000..c80560df Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff new file mode 100755 index 00000000..6777b808 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff2 new file mode 100755 index 00000000..7656f0a0 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.otf new file mode 100755 index 00000000..9eed5480 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff new file mode 100755 index 00000000..3c8b7e47 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff2 new file mode 100755 index 00000000..5f968f96 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Bold.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Italic.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.otf new file mode 100755 index 00000000..a0dba5ba Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff new file mode 100755 index 00000000..d9c0b19e Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff2 new file mode 100755 index 00000000..9fdb7f53 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.otf new file mode 100755 index 00000000..721d7e8a Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff new file mode 100755 index 00000000..3609e042 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff2 new file mode 100755 index 00000000..5ac194de Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Light.otf new file mode 100755 index 00000000..2773949c Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff new file mode 100755 index 00000000..37639387 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff2 new file mode 100755 index 00000000..92ba454d Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Light.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Regular.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.otf new file mode 100755 index 00000000..ee1d3b07 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff new file mode 100755 index 00000000..48d9901c Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff2 new file mode 100755 index 00000000..754d356a Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Regular.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Screen.eot b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.eot new file mode 100755 index 00000000..6d121881 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.eot differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Screen.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.otf new file mode 100755 index 00000000..e38b12f0 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff new file mode 100755 index 00000000..1d6ea58f Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff2 new file mode 100755 index 00000000..45973358 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Screen.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.otf new file mode 100755 index 00000000..6c4982f5 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff new file mode 100755 index 00000000..6c53cded Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff2 new file mode 100755 index 00000000..65535200 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin-Italic.woff2 differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin.otf b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.otf new file mode 100755 index 00000000..4203775e Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.otf differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff new file mode 100755 index 00000000..c718e3b6 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff differ diff --git a/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff2 b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff2 new file mode 100755 index 00000000..32487521 Binary files /dev/null and b/public/fonts/Px-Grotesk/Px-Grotesk-Thin.woff2 differ diff --git a/src/app/components/FAQ/FAQ.tsx b/src/app/components/FAQ/FAQ.tsx index 15aeb44f..a9d70735 100644 --- a/src/app/components/FAQ/FAQ.tsx +++ b/src/app/components/FAQ/FAQ.tsx @@ -1,3 +1,5 @@ +import { Heading } from "@babylonlabs-io/bbn-core-ui"; + import { getNetworkConfig } from "@/config/network.config"; import { questions } from "./data/questions"; @@ -12,8 +14,10 @@ export const FAQ: React.FC = () => { return (
-

FAQ

-
+ + FAQ’s + +
{questions(coinName, networkName, confirmationDepth).map((question) => (
= ({ title, content }) => { - const [isOpen, setIsOpen] = useState(false); - return ( -
setIsOpen(!isOpen)} - > -
-

{title}

- -
- - {isOpen && ( - - )} - +
+ + + expanded ? ( + + ) : ( + + ) + } + > + + {title} + + + + {content} + +
); }; diff --git a/src/app/components/FAQ/data/questions.ts b/src/app/components/FAQ/data/questions.ts deleted file mode 100644 index d3214eaa..00000000 --- a/src/app/components/FAQ/data/questions.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { shouldDisplayPoints, shouldDisplayTestingMsg } from "@/config"; - -export interface Question { - title: string; - content: string; -} - -export const questions = ( - coinName: string, - networkName: string, - confirmationDepth?: number, -): Question[] => { - const questionList = [ - { - title: "What is Babylon?", - content: `

Babylon is a suite of security-sharing protocols that bring Bitcoin\’s unparalleled security to the decentralized world. The latest protocol, Bitcoin Staking, enables Bitcoin holders to stake their Bitcoin to provide crypto-economic security to PoS (proof-of-stake) systems in a trustless and self-custodial way.

`, - }, - { - title: "How does Bitcoin Staking work?", - content: `

${coinName} holders lock their ${coinName} using the trustless and self-custodial Bitcoin Staking script for a predetermined time (timelock) in exchange for voting power in an underlying PoS protocol. In return, Bitcoin holders will earn PoS staking rewards.


-

Finality providers perform the voting. A ${coinName} staker can create a finality provider by itself and self-delegate or delegate its voting power to a third-party finality provider.


-

If a finality provider attacks the PoS system, the ${coinName}s behind the voting powers delegated to it will be subject to protocol slashing. This deters ${coinName} stakers and finality providers from attacking the PoS system.

- `, - }, - { - title: "What does this staking dApp allow me to do?", - content: `

The staking dApp is an interface to the Babylon Bitcoin Staking protocol. The Babylon Bitcoin Staking protocol allows ${coinName} holders to stake their ${coinName} and delegate their voting power to a finality provider they select. Stakers can view their past staking history and send a request to unlock their stake for early withdrawal.

`, - }, - { - title: `Does my ${coinName} leave my wallet once staked?`, - content: `

Technically, your ${coinName} has not left your custody. However, your wallet will not show the ${coinName} you staked in your available balance once that ${coinName} is locked. Current wallet implementations do not yet know how to display staked ${coinName} that is still in your custody. When staking, you do not send the ${coinName} to a third party. It is locked in a self-custodial Bitcoin Staking script that you control. This means that any subsequent movement of the ${coinName} will need your approval. You are the only one who can unbond the stake and withdraw.

`, - }, - { - title: `Is my ${coinName} safe? Could I get slashed?`, - content: `

You are not required to sign any PoS slashing-related authorizations. Thus, in theory, the ${coinName} in your self-custodial contract cannot be slashed due to the absence of your authorization.


- -

However, there are still risks associated with your ${coinName}:


- -
    -
  1. - 1. Code security
    - There is an inherent risk that the code developed for Bitcoin Staking has vulnerabilities or bugs. The Babylon team has open-sourced the code, and it is under security audits. -
  2. -
    -
  3. - 2. System reliability
    - The Bitcoin Staking system may be slow, unavailable, or compromised, which may cause the staking service to be unavailable or compromised, potentially leading to ${coinName} not being unbondable or not withdrawable. -
  4. -
-

The Babylon Labs team has open-sourced the code which has been audited by Coinspect, Zellic, and through a public security campaign facilitated by Cantina.

- `, - }, - { - title: "How long will it take for my stake to become active?", - content: `

A stake’s status demonstrates the current stage of the staking process. All stake starts in a Pending state, which denotes that the ${coinName} Staking transaction does not yet have sufficient ${coinName} block confirmations. As soon as it receives ${confirmationDepth || 10} ${coinName} block confirmations, the status transitions to Overflow or Active.


- -

In an amount-based cap, a stake is Overflow if the system has already accumulated the maximum amount of ${coinName} it can accept.


-

In a time-based cap, where there is a starting block height and an ending block height, a stake is Overflow if it is included in a ${coinName} block that is newer than the ending block.


-

Otherwise, the stake is Active.


-

You should unbond and withdraw a stake that is Overflow.

`, - }, - { - title: "Do I get rewards for staking?", - content: `

No. This is a locking-only phase without a PoS chain. There is no PoS staking reward nor incentives for participation.

`, - }, - { - title: "Are there any other ways to stake?", - content: `

Hands-on stakers can operate the btc-staker CLI program that allows for the creation of ${coinName} staking transactions from the CLI.

- `, - }, - { - title: "Will I pay any fees for staking?", - content: `

You will need to pay ${networkName} network fees to have transaction messages delivered and results recorded on the Bitcoin blockchain. Examples include staking, unbonding, and withdrawal transactions. This interface may provide estimates of network fees. However, the actual network fee may be higher.
- If you lock your ${coinName} in a staking transaction without the necessary amount of ${coinName} in the staked amount to pay for the unbonding and withdrawal transactions, you won’t be able to unbond or withdraw (although that also means the staked amount is less than those transaction fees). The stake will remain locked unless the ${networkName} network fees come down sufficiently. Here are more details about the network fees:


-
    -
  1. - 1. Staking Transaction Fee (Fs): This fee is for the staking transaction. To stake amount S, you need at least S + Fs in your wallet. It is calculated in real-time based on current network conditions. -

  2. -
  3. - 2. Unbonding Transaction Fee (Fu): If you unbond your stake before it expires, this fee is deducted from your stake S, resulting in a withdrawable amount of S - Fu. Fu is a calculated static value to ensure inclusion in busy network conditions. -

  4. -
  5. - 3. Withdraw Transaction Fee (Fw): This fee is for the withdrawal transaction that transfers the stake back to your wallet. It is deducted from your withdrawable stake, which is either S (if you wait until expiration) or S - Fu (if unbonded early). This fee ensures fast inclusion based on current network conditions. -
  6. -

-

In summary, to stake S, you need S + Fs, and upon completion, you get S - Fw or S - Fu - Fw back, depending on whether you wait for expiration or unbond early.

`, - }, - { - title: - "Is it ok to use a wallet holding fungible tokens built on Bitcoin (e.g. BRC-20/ARC-20/Runes)?", - content: `

No, this should be avoided. Please do not connect or use a Bitcoin wallet holding BRC-20, ARC-20, Runes, or other NFTs or Bitcoin-native assets (other than ${coinName}). They are still in their infancy and in an experimental phase. Software built for the detection of such tokens to avoid their misspending may not work, and you may lose all such tokens.

`, - }, - { - title: "Are hardware wallets supported?", - content: `

Keystone via QR code is the only hardware wallet supporting Bitcoin Staking. Using any other hardware wallet through any means (such as connection to a software/extension/mobile wallet) can lead to permanent inability to withdraw the stake.

`, - }, - ]; - if (shouldDisplayPoints()) { - questionList.push({ - title: "What are the points for?", - content: `

We use points to track staking activity. Points are not blockchain tokens. Points do not, and may never, convert to, accrue to, be used as a basis to calculate, or become tokens, other digital assets, or distributions thereof. Points are virtual calculations with no monetary value. Points do not constitute any currency or property of any type and are not redeemable, refundable, or transferable.

`, - }); - } - if (shouldDisplayTestingMsg()) { - questionList.push({ - title: "What is the goal of this testnet?", - content: `

The goal of this testnet is to ensure the security of the staked Bitcoins by testing the user's interaction with the ${coinName} network. This will be a lock-only network without any PoS chain operating, meaning that the only participants of this testnet will be finality providers and ${coinName} stakers.

`, - }); - } - return questionList; -}; diff --git a/src/app/components/FAQ/data/questions.tsx b/src/app/components/FAQ/data/questions.tsx new file mode 100644 index 00000000..2a028d99 --- /dev/null +++ b/src/app/components/FAQ/data/questions.tsx @@ -0,0 +1,324 @@ +import { ReactNode } from "react"; + +import { shouldDisplayPoints, shouldDisplayTestingMsg } from "@/config"; + +export interface Question { + title: string; + content: ReactNode; +} + +export const questions = ( + coinName: string, + networkName: string, + confirmationDepth?: number, +): Question[] => { + const questionList = [ + { + title: "What is Babylon?", + content: ( +

+ Babylon is a suite of security-sharing protocols that bring Bitcoin\’s + unparalleled security to the decentralized world. The latest protocol, + Bitcoin Staking, enables Bitcoin holders to stake their Bitcoin to + provide crypto-economic security to PoS (proof-of-stake) systems in a + trustless and self-custodial way. +

+ ), + }, + { + title: "How does Bitcoin Staking work?", + content: ( + <> +

+ {coinName} holders lock their {coinName} using the trustless and + self-custodial Bitcoin Staking script for a predetermined time + (timelock) in exchange for voting power in an underlying PoS + protocol. In return, Bitcoin holders will earn PoS staking rewards. +

+
+

+ Finality providers perform the voting. A {coinName} staker can + create a finality provider by itself and self-delegate or delegate + its voting power to a third-party finality provider. +

+
+

+ If a finality provider attacks the PoS system, the {coinName}s + behind the voting powers delegated to it will be subject to protocol + slashing. This deters ${coinName} stakers and finality providers + from attacking the PoS system. +

+ + ), + }, + { + title: "What does this staking dApp allow me to do?", + content: ( +

+ The staking dApp is an interface to the Babylon Bitcoin Staking + protocol. The Babylon Bitcoin Staking protocol allows ${coinName}{" "} + holders to stake their ${coinName} and delegate their voting power to + a finality provider they select. Stakers can view their past staking + history and send a request to unlock their stake for early withdrawal. +

+ ), + }, + { + title: `Does my ${coinName} leave my wallet once staked?`, + content: ( +

+ Technically, your {coinName} has not left your custody. However, your + wallet will not show the ${coinName} you staked in your available + balance once that ${coinName} is locked. Current wallet + implementations do not yet know how to display staked ${coinName} that + is still in your custody. When staking, you do not send the $ + {coinName} to a third party. It is locked in a self-custodial Bitcoin + Staking script that you control. This means that any subsequent + movement of the ${coinName} will need your approval. You are the only + one who can unbond the stake and withdraw. +

+ ), + }, + { + title: `Is my ${coinName} safe? Could I get slashed?`, + content: ( + <> +

+ You are not required to sign any PoS slashing-related + authorizations. Thus, in theory, the ${coinName} in your + self-custodial contract cannot be slashed due to the absence of your + authorization. +

+
+ +

+ However, there are still risks associated with your ${coinName}: +

+
+ +
    +
  1. + 1. Code security +
    + There is an inherent risk that the code developed for Bitcoin + Staking has vulnerabilities or bugs. The Babylon team has + open-sourced the code, and it is under security audits. +
  2. +
    +
  3. + 2. System reliability +
    + The Bitcoin Staking system may be slow, unavailable, or + compromised, which may cause the staking service to be unavailable + or compromised, potentially leading to ${coinName} not being + unbondable or not withdrawable. +
  4. +
+

+ The Babylon Labs team has open-sourced the code which has been + audited by{" "} + + Coinspect + + ,{" "} + + Zellic + + , and through a{" "} + + public security campaign facilitated by Cantina + + . +

+ + ), + }, + { + title: "How long will it take for my stake to become active?", + content: ( + <> +

+ A stake’s status demonstrates the current stage of the staking + process. All stake starts in a Pending state, which denotes + that the ${coinName} Staking transaction does not yet have + sufficient ${coinName} block confirmations. As soon as it receives $ + {confirmationDepth || 10} ${coinName} block confirmations, the + status transitions to Overflow or Active.{" "} +

+
+ +

+ In an amount-based cap, a stake is Overflow if the system has + already accumulated the maximum amount of ${coinName} it can accept. +

+
+

+ In a time-based cap, where there is a starting block height and an + ending block height, a stake is Overflow if it is included in + a ${coinName} block that is newer than the ending block. +

+
+

+ Otherwise, the stake is Active. +

+
+

+ You should unbond and withdraw a stake that is Overflow. +

+ + ), + }, + { + title: "Do I get rewards for staking?", + content: ( +

+ No. This is a locking-only phase without a PoS chain. There is no PoS + staking reward nor incentives for participation. +

+ ), + }, + { + title: "Are there any other ways to stake?", + content: ( +

+ Hands-on stakers can operate the{" "} + + btc-staker CLI program + {" "} + that allows for the creation of ${coinName} staking transactions from + the CLI. +

+ ), + }, + { + title: "Will I pay any fees for staking?", + content: ( + <> +

+ You will need to pay {networkName} network fees to have transaction + messages delivered and results recorded on the Bitcoin blockchain. + Examples include staking, unbonding, and withdrawal transactions. + This interface may provide estimates of network fees. However, the + actual network fee may be higher.
+ + If you lock your {coinName} in a staking transaction without the + necessary amount of {coinName} in the staked amount to pay for the + unbonding and withdrawal transactions, you won’t be able to unbond + or withdraw (although that also means the staked amount is less + than those transaction fees). The stake will remain locked unless + the {networkName} network fees come down sufficiently. + {" "} + Here are more details about the network fees: +

+
+
    +
  1. + 1. Staking Transaction Fee (Fs): This fee is for the + staking transaction. To stake amount S, you need at least S + Fs + in your wallet. It is calculated in real-time based on current + network conditions. +
  2. +
    +
  3. + 2. Unbonding Transaction Fee (Fu): If you unbond your stake + before it expires, this fee is deducted from your stake S, + resulting in a withdrawable amount of S - Fu. Fu is a calculated + static value to ensure inclusion in busy network conditions. +
  4. +
    +
  5. + 3. Withdraw Transaction Fee (Fw): This fee is for the + withdrawal transaction that transfers the stake back to your + wallet. It is deducted from your withdrawable stake, which is + either S (if you wait until expiration) or S - Fu (if unbonded + early). This fee ensures fast inclusion based on current network + conditions. +
  6. +
+
+

+ In summary, to stake S, you need S + Fs, and upon completion, you + get S - Fw or S - Fu - Fw back, depending on whether you wait for + expiration or unbond early. +

+ , + + ), + }, + { + title: + "Is it ok to use a wallet holding fungible tokens built on Bitcoin (e.g. BRC-20/ARC-20/Runes)?", + content: ( +

+ No, this should be avoided. Please do not connect or use a Bitcoin + wallet holding BRC-20, ARC-20, Runes, or other NFTs or Bitcoin-native + assets (other than ${coinName}). They are still in their infancy and + in an experimental phase. Software built for the detection of such + tokens to avoid their misspending may not work, and you may lose all + such tokens. +

+ ), + }, + { + title: "Are hardware wallets supported?", + content: ( +

+ Keystone via QR code is the only hardware wallet supporting Bitcoin + Staking. Using any other hardware wallet through any means (such as + connection to a software/extension/mobile wallet) can lead to + permanent inability to withdraw the stake. +

+ ), + }, + ]; + if (shouldDisplayPoints()) { + questionList.push({ + title: "What are the points for?", + content: ( +

+ We use points to track staking activity. Points are not blockchain + tokens. Points do not, and may never, convert to, accrue to, be used + as a basis to calculate, or become tokens, other digital assets, or + distributions thereof. Points are virtual calculations with no + monetary value. Points do not constitute any currency or property of + any type and are not redeemable, refundable, or transferable. +

+ ), + }); + } + if (shouldDisplayTestingMsg()) { + questionList.push({ + title: "What is the goal of this testnet?", + content: ( +

+ The goal of this testnet is to ensure the security of the staked + Bitcoins by testing the user's interaction with the {coinName}{" "} + network. This will be a lock-only network without any PoS chain + operating, meaning that the only participants of this testnet will be + finality providers and {coinName} stakers. +

+ ), + }); + } + return questionList; +}; diff --git a/src/app/globals.css b/src/app/globals.css index 9095ed7e..6b278a3c 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,6 +1,7 @@ @import "react-responsive-modal/styles.css"; @import "react-tooltip/dist/react-tooltip.css"; @import "react-toastify/dist/ReactToastify.css"; +@import "@babylonlabs-io/bbn-core-ui/dist/style.css"; @tailwind base; @tailwind components; @@ -105,3 +106,111 @@ body.modal-open { white-space: normal; word-wrap: break-word; } + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Black.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Black.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Black.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Black.woff") format("woff"); + font-weight: 900; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Bold.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Bold.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Bold.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Bold.woff") format("woff"); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Regular.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Regular.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Regular.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Regular.woff") format("woff"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Light.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Light.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Light.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Light.woff") format("woff"); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Thin.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Thin.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Thin.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Thin.woff") format("woff"); + font-weight: 250; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk"; + src: url("/fonts/Px-Grotesk/Px-Grotesk-Screen.eot"); + src: + url("/fonts/Px-Grotesk/Px-Grotesk-Screen.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk/Px-Grotesk-Screen.woff2") format("woff2"), + url("/fonts/Px-Grotesk/Px-Grotesk-Screen.woff") format("woff"); + font-weight: 200; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk Mono"; + src: url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.eot"); + src: + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff2") format("woff2"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Light.woff") format("woff"); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk Mono"; + src: url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.eot"); + src: + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff2") format("woff2"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Regular.woff") format("woff"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: "Px Grotesk Mono"; + src: url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.eot"); + src: + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.eot?#iefix") + format("embedded-opentype"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff2") format("woff2"), + url("/fonts/Px-Grotesk-Mono/Px-Grotesk-Mono-Bold.woff") format("woff"); + font-weight: 700; + font-style: normal; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 87dd89f7..29e12ee0 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,4 @@ import type { Metadata } from "next"; -import { Inter } from "next/font/google"; import { twJoin } from "tailwind-merge"; import { network } from "@/config/network.config"; @@ -9,8 +8,6 @@ import MetaTags from "./components/Meta/MetaTags"; import "./globals.css"; import Providers from "./providers"; -const inter = Inter({ subsets: ["latin"], variable: "--font-inter" }); - export const metadata: Metadata = { title: "Babylon - Staking Dashboard", description: "BTC Staking Dashboard", @@ -26,7 +23,7 @@ export default function RootLayout({ - +