diff --git a/biome.json b/biome.json
new file mode 100644
index 0000000..30a9b7f
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://biomejs.dev/schemas/1.8.0/schema.json",
+ "organizeImports": {
+ "enabled": true
+ },
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ },
+ "formatter": {
+ "indentStyle": "space",
+ "enabled": true
+ },
+ "javascript": {
+ "formatter": {
+ "quoteStyle": "single"
+ }
+ },
+ "linter": {
+ "enabled": false,
+ "rules": {
+ "recommended": true,
+ "style": {
+ "noNonNullAssertion": "off"
+ }
+ }
+ }
+}
diff --git a/components/Balances.tsx b/components/Balances.tsx
new file mode 100644
index 0000000..f3ec555
--- /dev/null
+++ b/components/Balances.tsx
@@ -0,0 +1,34 @@
+import { useBalances } from '@/components/hooks';
+import type { ValueView } from '@penumbra-zone/protobuf/penumbra/core/asset/v1/asset_pb';
+import { ValueViewComponent } from '@penumbra-zone/ui/ValueViewComponent';
+import type React from 'react';
+
+export function Balances() {
+ const { data: balances } = useBalances();
+
+ return balances
+ ? balances
+ .map((bal) => bal.balanceView)
+ .map((balanceView) => (
+
Info
++ IBC Deposit addresses exist because source chains record the deposit + address. They serve as an additional layer of anonymity to not link + your deposit and actual addresses. +
+Info
++ Penumbra supports paying fees in multiple tokens, including USDC. Prax + will always choose the best token to pay fees with depending on your + balances. +
++ If you hold the staking token "UM" you can delegate, or stake, those + tokens to a validator. This enables you to receive rewards and + participate in governance in exchange for taking on the risk of + validator misbehavior. +
+ +To stake with Prax, follow these steps:
+For each validator, you will see some important data:
++ Once you select a validator to stake with, you can click the + 'Delegate' button. +
++ Select how much 'UM' you wish to delegate, then press 'Delegate': +
++ It will take a few moments for the delegation transaction to be + prepared, then Prax will generate a view of your transaction. Verify + one of the outputs is to the validator you selected, then click + 'Approve': +
++ You should see a pop-up in the lower right hand of the page indicating + that the transaction was approved! +
+ ++ You will receive the delegation token associated with that validator. + At a later point, you can undelegate by clicking the 'Undelegate' + button to undelegate from that validator, and receive staking tokens. +
+Staked UM successfully!
+Info
++ Delegation tokens are liquid - you can swap them the same way you + would other assets. They will also show up under your Balances in + frontends. +
++ Penumbra offers a built-in DEX that allows you to swap tokens + privately and with the best trade execution. +
++ We recommend swapping the USDC that you bridged in earlier to UM, the + Penumbra staking token, but you can choose to swap any pair you want. + + Click here + + to go to the Minifront Swap page. +
+ ++ The simplest type of swap available is an "instant swap". This can be + accessed by setting the 'Speed' slider all the way to the left-hand + setting ('Instant Price'). +
+ ++ Using the selectors on the right-hand side, choose the two tokens you + wish to swap between: +
+ ++ The left-hand side specifies the source token, which you will swap for + the right-hand side. The amount of the source token you wish to swap + is specified in the input box below the 'Trade' label. +
+ ++ Thanks to Penumbra's DEX design, you're guaranteed to get the best + market execution price at the time you perform the swap. +
+ ++ To see a preview of how the swap will execute, you can press the + 'Estimate' button. This will show you information including: +
+ ++ If you're happy with the proposed swap, press the 'Swap' button and + wait for the transaction to be built. +
+ ++ Prax will prompt you to sign the transaction after it's built. Click + 'Approve' in the extension and your swap will be executed at market + price. +
+ ++ Penumbra's DEX also supports{' '} + Gradual Dutch Auctions which allow + you to perform price discovery based on market demand, by offering + your swap over a period of time at diminishing prices until all tokens + are sold. +
+ ++ Using the 'Speed' slider mechanism, you can view how different time + scales affect the number of auctions that will be created. By moving + the slider to the right, the auction will take place over a greater + amount of time, leading to tokens being sold at more price points. +
+ ++ You must also specify the maximum and minimum prices you're willing to + sell your tokens at. This way, you can ensure that the auction allows + you to get the highest prices possible for your tokens, without + selling them for less than you're comfortable with. +
+ + + ++ Press 'Start auctions' and Prax will present to you the proposed + transaction, which allows you to view all the individual Dutch + Auctions: +
+ + + ++ As with the Instant Swap, you can + then press 'Approve' in Prax to submit the auction. +
+Quest complete!
+