diff --git a/.gitignore b/.gitignore index 3ced74e..36fb342 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,9 @@ yarn-debug.log* yarn-error.log* .idea +.vscode + +# AI configuration files +.omc +.sisyphus +.claude diff --git a/docs/build-for-karma/deploying-contracts/index.md b/docs/build-for-karma/deploying-contracts/index.md new file mode 100644 index 0000000..a7469ac --- /dev/null +++ b/docs/build-for-karma/deploying-contracts/index.md @@ -0,0 +1,72 @@ +--- +id: deploying-contracts-index +title: Deploy Your First Contract +description: Choose your preferred deployment tool to get a smart contract live on Status Network. Guides available for Hardhat, Foundry, Remix, and Scaffold-ETH 2. +keywords: [deploy smart contract, Status Network, Hardhat, Foundry, Remix, Scaffold-ETH 2, blockchain deployment, EVM] +slug: /build-for-karma/deploying-contracts +sidebar_position: 1 +--- + +Status Network is fully EVM-compatible, so you can deploy contracts using any standard Ethereum toolchain. Pick the tool that fits your workflow and follow the step-by-step guide to get your first contract live on the testnet. + +:::tip Before you start +Make sure you've [added Status Network to your wallet](/overview/general-info/add-status-network) and grabbed some [testnet ETH](/tools/core-infrastructure/testnet-faucets). +::: + +## Choose a Deployment Tool + +
+ + +
🎩
+
+

Hardhat

+

The industry-standard development environment for compiling, testing, and deploying Solidity contracts. Includes Hardhat Ignition and TypeScript support.

+ TypeScript · Testing · Ignition +
+
+ + +
⚒️
+
+

Foundry

+

A blazing-fast, Rust-based toolkit for smart contract development. Write tests in Solidity and interact with contracts using Cast.

+ Solidity Tests · Cast · Fast Builds +
+
+ + +
🎛️
+
+

Remix IDE

+

A browser-based IDE with zero setup — perfect for quick prototyping, learning, and deploying simple contracts without any local tooling.

+ Browser-Based · No Setup · Beginner-Friendly +
+
+ + +
🏗️
+
+

Scaffold-ETH 2

+

A full-stack starter kit with a pre-configured Status Network extension. Includes a NextJS frontend, contract hot-reload, and both Hardhat and Foundry support.

+ Full-Stack · NextJS · Hot Reload +
+
+ +
+ +## Not Sure Which to Pick? + +| Tool | Best For | Setup Required | +|---|---|---| +| **Hardhat** | Production projects with complex testing and deployment pipelines | Node.js + npm | +| **Foundry** | Developers who prefer Solidity-native testing and fast compilation | Rust toolchain | +| **Remix** | Quick experiments, learning, and simple one-off deployments | None (browser) | +| **Scaffold-ETH 2** | Full-stack dApps that need a frontend from day one | Node.js + npm | + +## After Deployment + +Once your contract is live, here are your next steps: + +- [Integrate gasless transactions](/build-for-karma/guides/gasless-integration) through Karma so your users never pay gas +- [Read reputation integration guide](/build-for-karma/guides/reputation-integration) to build reputation-aware features using Karma diff --git a/docs/tutorials/deploying-contracts/using-foundry.md b/docs/build-for-karma/deploying-contracts/using-foundry.md similarity index 96% rename from docs/tutorials/deploying-contracts/using-foundry.md rename to docs/build-for-karma/deploying-contracts/using-foundry.md index 526d03d..c41bd39 100644 --- a/docs/tutorials/deploying-contracts/using-foundry.md +++ b/docs/build-for-karma/deploying-contracts/using-foundry.md @@ -15,7 +15,7 @@ Before you begin, ensure you have the following: - **Foundry**: Install from the [official Foundry book](https://book.getfoundry.sh/getting-started/installation) - **Ethereum Wallet**: A private key for Status Network testnet - **Testnet ETH**: You'll need Status Network testnet ETH - - Get Status Network testnet ETH from our [Faucet](/tools/testnet-faucets) + - Get Status Network testnet ETH from our [Faucet](/tools/core-infrastructure/testnet-faucets) - **Basic Knowledge**: Familiarity with Solidity and command line ## What You'll Accomplish @@ -207,7 +207,7 @@ forge test If you encounter any issues: - Join our [Telegram Community](https://t.me/statusl2) -- View our [Network Details](/general-info/network-details) +- View our [Network Details](/overview/general-info/network-details) ## Additional Resources diff --git a/docs/tutorials/deploying-contracts/using-hardhat.md b/docs/build-for-karma/deploying-contracts/using-hardhat.md similarity index 96% rename from docs/tutorials/deploying-contracts/using-hardhat.md rename to docs/build-for-karma/deploying-contracts/using-hardhat.md index b75a042..d06ad9f 100644 --- a/docs/tutorials/deploying-contracts/using-hardhat.md +++ b/docs/build-for-karma/deploying-contracts/using-hardhat.md @@ -15,7 +15,7 @@ Before you begin, ensure you have the following: - **Node.js and npm**: Download and install from the [official Node.js website](https://nodejs.org/) - **Ethereum Wallet**: MetaMask or another wallet with a private key for Status Network testnet - **Testnet ETH**: You'll need Status Network testnet ETH - - Get Status Network testnet ETH from our [Faucet](/tools/testnet-faucets) + - Get Status Network testnet ETH from our [Faucet](/tools/core-infrastructure/testnet-faucets) - **Basic Knowledge**: Familiarity with Solidity, Hardhat, and command line ## What You'll Accomplish @@ -169,4 +169,4 @@ npx hardhat run scripts/interact.ts --network statusTestnet If you encounter any issues: - Join our [Telegram Community](https://t.me/statusl2) -- View our [Network Details](/general-info/network-details) \ No newline at end of file +- View our [Network Details](/overview/general-info/network-details) \ No newline at end of file diff --git a/docs/tutorials/deploying-contracts/using-remix.md b/docs/build-for-karma/deploying-contracts/using-remix.md similarity index 92% rename from docs/tutorials/deploying-contracts/using-remix.md rename to docs/build-for-karma/deploying-contracts/using-remix.md index 2ec9c27..9f12329 100644 --- a/docs/tutorials/deploying-contracts/using-remix.md +++ b/docs/build-for-karma/deploying-contracts/using-remix.md @@ -15,8 +15,8 @@ Before you begin, ensure you have: - **Web Browser**: A modern web browser like Chrome or Firefox - **MetaMask**: Install the [MetaMask](https://metamask.io) browser extension - **Testnet ETH**: You'll need Status Network testnet ETH - - Get Status Network testnet ETH from our [Faucet](/tools/testnet-faucets) -- **Network Configuration**: Add Status Network testnet to MetaMask following our [Add Network guide](/general-info/add-status-network) + - Get Status Network testnet ETH from our [Faucet](/tools/core-infrastructure/testnet-faucets) +- **Network Configuration**: Add Status Network testnet to MetaMask following our [Add Network guide](/overview/general-info/add-status-network) ## Steps @@ -97,7 +97,7 @@ Once deployed, you'll see your contract under "Deployed Contracts": If you encounter any issues: - Join our [Telegram Community](https://t.me/statusl2) -- View our [Network Details](/general-info/network-details) +- View our [Network Details](/overview/general-info/network-details) ## Additional Resources diff --git a/docs/tutorials/deploying-contracts/using-se2.md b/docs/build-for-karma/deploying-contracts/using-se2.md similarity index 94% rename from docs/tutorials/deploying-contracts/using-se2.md rename to docs/build-for-karma/deploying-contracts/using-se2.md index e1819fe..cd0e6f3 100644 --- a/docs/tutorials/deploying-contracts/using-se2.md +++ b/docs/build-for-karma/deploying-contracts/using-se2.md @@ -14,7 +14,7 @@ The [Status Network Scaffold-ETH 2 extension](https://github.com/status-im/statu - **Foundry** (optional): If you choose the Foundry workflow - **Ethereum Wallet** (optional): An EVM wallet private key for test, but it's okay if you don't have one -> **Note**: Status Network supports gasless transactions, so testnet ETH is optional. If you still need testnet ETH, get it from our [Faucet](/tools/testnet-faucets). +> **Note**: Status Network supports gasless transactions, so testnet ETH is optional. If you still need testnet ETH, get it from our [Faucet](/tools/core-infrastructure/testnet-faucets). ## Quick Start @@ -58,4 +58,4 @@ The [Status Network Scaffold-ETH 2 extension](https://github.com/status-im/statu For detailed configuration options, troubleshooting, and advanced usage: - Check the [extension README](https://github.com/status-im/status-network-scaffold-extension) for comprehensive documentation - Join our [Telegram Community](https://t.me/statusl2) and ask for support -- View our [Network Details](/general-info/network-details) +- View our [Network Details](/overview/general-info/network-details) diff --git a/docs/build-for-karma/guides/gasless-integration.md b/docs/build-for-karma/guides/gasless-integration.md new file mode 100644 index 0000000..06956f0 --- /dev/null +++ b/docs/build-for-karma/guides/gasless-integration.md @@ -0,0 +1,365 @@ +--- +title: Gasless Integration Guide +description: Practical integration guide for building gasless UX on Status Network. +keywords: [gasless, linea_estimateGas, Status Network, deny list, builder, zero gas, UX] +slug: /build-for-karma/guides/gasless-integration +sidebar_position: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Status Network provides gasless transactions at the protocol level. You do not need paymasters or relayers. As a builder, the core task is to estimate and present fees correctly per sender state. + +:::important The key rule +Use `linea_estimateGas` RPC method as the source of truth for gas fee when preparing transaction UX. +::: + +For other JSON-RPC method reference, see [JSON-RPC API](/tools/rpc/json-rpc). + +## Karma-aware fee estimation + +On Linea, [`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas) is already the recommended way to estimate gas. +It returns `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas` in a **single call**, where the fee fields account for compressed transaction size, layer-1 verification costs, and the L1/L2 gas-price ratio - factors that `eth_` namespace methods do not capture. + +Status Network extends `linea_estimateGas` further so that the fee fields also incorporate our **Karma** system; fees may be reduced to zero for eligible users, or increased for deny-listed users. + +```mermaid +flowchart TD + A[User initiates transaction] --> B["Call linea_estimateGas with from parameter"] + B --> C{Fee outcome} + C -->|base+priority = 0| D[Show gasless UX] + C -->|Premium fees| F[Show premium fee UX] + D --> G[Send transaction] + F --> G +``` + +*Figure: Gas estimation flow using `linea_estimateGas`* + +This is why builders should use `linea_estimateGas` when estimating transaction costs or pre-filling EIP-1559 fee fields for users on Status Network. + +:::info for more +For a detailed explanation of Karma and its impact on gas fees and transaction privileges, see the [Karmic Tokenomics](../../overview/tokenomics/karmic-tokenomics) page. + +For the technical details of how our gasless system is implemented and enforced, refer to the [Gasless Transactions](../../overview/general-info/gasless-transactions) documentation. +::: + +## `linea_estimateGas` request/response shape + +### Request + +`linea_estimateGas` takes the **same transaction call object** as `eth_estimateGas`. +It returns `gasLimit` (using the same EVM execution logic as `eth_estimateGas`) together with fee fields that reflect both Linea's L2-specific pricing and Status Network's Karma rules - all in a single response. + +:::important +**Always include `from`.** Without it, the node can't apply Karma/quota/deny-list logic. +::: + +### Response + +`linea_estimateGas` returns an object including: + +- `gasLimit`: hex quantity - estimated gas units for EVM execution (same calculation as `eth_estimateGas`) +- `baseFeePerGas`: hex quantity - base fee for the next block, accounting for Karma rules on Status Network +- `priorityFeePerGas`: hex quantity - suggested priority fee, accounting for Karma rules on Status Network + +These fee fields may differ significantly from the values returned by `eth_` namespace calls such as `eth_gasPrice`, `eth_maxPriorityFeePerGas`, or `eth_feeHistory`, which are not aware of Linea's L2-specific pricing or Status Network's Karma adjustments. + + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "gasLimit": "0x5208", + "baseFeePerGas": "0x0", + "priorityFeePerGas": "0x0" + } +} +``` + + + + +Standard EVM flows require multiple separate `eth_` calls to gather gas limit and fee data: + +**eth_estimateGas** + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5208" +} +``` + +**eth_maxPriorityFeePerGas** + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": "0x59682f00" +} +``` + +**eth_getBlockByNumber** + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "number": ..., + "baseFeePerGas": "0x3b9aca00", + ... + } +} +``` + + + + + +## Migration guide: from multiple `eth_` calls to `linea_estimateGas` + +This section shows how to migrate from the common "EIP-1559 via multiple `eth_` calls" flow to a single `linea_estimateGas` call, which provides more accurate L2-specific fee data and Karma-aware pricing on Status Network. + +### Before: common EIP-1559 estimation flow on EVM chains using `eth_` namespaces + +On many EVM chains, a typical EIP-1559 estimation flow looks like: + +1. **Estimate gas limit** via `eth_estimateGas` +2. **Fetch `maxPriorityFeePerGas`** via `eth_maxPriorityFeePerGas` and/or `eth_feeHistory` +3. **Fetch `baseFeePerGas`** via `eth_getBlockByNumber` +4. Build an EIP-1559 transaction using: + - `gas` + - `maxPriorityFeePerGas` + - `maxFeePerGas`, often $2 \cdot \mathrm{baseFeePerGas} + \mathrm{maxPriorityFeePerGas}$ + + + + + +```bash +# 1) Gas limit (EVM execution) +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"eth_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_RPC_URL + +# 2) Fetch suggested tip amount +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":2,"method":"eth_maxPriorityFeePerGas","params":[]}' \ + https://YOUR_RPC_URL + +# 3) Fetch base fee +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":3,"method":"eth_getBlockByNumber","params":["pending",false]}' \ + https://YOUR_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const gas = await provider.estimateGas(call); +const maxPriorityFeePerGas = await provider.send('eth_maxPriorityFeePerGas', []); +const pendingBlock = await provider.getBlock('pending'); + +const baseFeePerGas = pendingBlock?.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + BigInt(maxPriorityFeePerGas); + +console.log({ + gas: `0x${gas.toString(16)}`, + maxPriorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_RPC_URL'), +}); + +const call = { + account: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const gas = await client.estimateGas(call); +const maxPriorityFeePerGas = await client.getMaxPriorityFeePerGas(); +const pendingBlock = await client.getBlock({ blockTag: 'pending' }); + +const baseFeePerGas = pendingBlock.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + maxPriorityFeePerGas; + +console.log({ + gas, + maxPriorityFeePerGas, + maxFeePerGas, +}); +``` + + + + + +### After: Status Network gas estimation flow using `linea_estimateGas` + +On Status Network, you should source fee suggestions from `linea_estimateGas`, because the correct fee recommendation depends on Karma: + +- accounts may be eligible for **gasless** transactions +- deny-listed accounts may need to pay a **premium gas fee** + + + + + +```bash +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"linea_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_STATUS_NETWORK_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_STATUS_NETWORK_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await provider.send( + 'linea_estimateGas', + [call], +); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_STATUS_NETWORK_RPC_URL'), +}); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await client.request({ + method: 'linea_estimateGas', + params: [call], +}); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + + +:::tip Tooling integration +Many Ethereum libraries call `eth_estimateGas` internally (for example, `provider.estimateGas(...)`). On Status Network, keep using those libraries for standard `eth_` methods, but **fetch estimates via `linea_estimateGas` explicitly for gas limit and fee fields** wherever you build or display transaction parameters for users. +::: + +## Handling fee scenarios in UI + +### 1) Gasless + +When `baseFeePerGas` and `priorityFeePerGas` are both zero: + +- Display a clear free-transaction state. +- Skip unnecessary fee warnings. + +### 2) Premium fees + +When sender is deny-listed (exceeded quota or RLN policy): + +- Show the fee amount and explain that premium gas applies due to quota or spam policy. +- Make clear the sender can pay the fee or wait for their quota window to refresh. +- Keep the transaction possible; do not hard-block. + +## Common pitfalls + +| Pitfall | Fix | +|---|---| +| Using `eth_` methods for fee decisions (`eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`) | Use `linea_estimateGas` | +| Omitting `from` when calling `linea_estimateGas` | Always pass the sender address to receive Karma-aware estimation | +| Hardcoding fee assumptions | Build fee UI from returned `baseFeePerGas` and `priorityFeePerGas` values | +| Assuming all users are gasless | Handle both states: gasless (zero fees) and deny-listed (premium fees) | +| Caching estimates across retries | Re-estimate near send time — sender Karma state can change | + +## Next steps + +- [JSON-RPC API](/tools/rpc/json-rpc) +- [Reputation Integration](/build-for-karma/guides/reputation-integration) diff --git a/docs/build-for-karma/guides/index.md b/docs/build-for-karma/guides/index.md new file mode 100644 index 0000000..31ddd3a --- /dev/null +++ b/docs/build-for-karma/guides/index.md @@ -0,0 +1,20 @@ +--- +title: Using Karma +description: Entry point for integrating Karma-based gasless UX and reputation-aware features on Status Network. +keywords: [Karma, gasless, reputation, integration, Status Network] +slug: /build-for-karma/guides +sidebar_position: 3 +--- + +Karma provides gasless transaction privileges and reputation across Status Network. +This section helps you integrate both gasless behavior and tier-aware product logic in your app. + +## Start Here + +**Handling transactions?** + +- Start with [Gasless Integration](/build-for-karma/guides/gasless-integration) to use `linea_estimateGas` as your single source of truth for gasless vs premium-fee outcomes. + +**Gating features by reputation?** + +- Continue with [Reputation Integration](/build-for-karma/guides/reputation-integration) to read Karma balances and tiers onchain, gate contracts, and design tier-aware frontends. diff --git a/docs/build-for-karma/guides/reputation-integration.md b/docs/build-for-karma/guides/reputation-integration.md new file mode 100644 index 0000000..e79baac --- /dev/null +++ b/docs/build-for-karma/guides/reputation-integration.md @@ -0,0 +1,461 @@ +--- +title: Reputation Integration Guide +description: How to read Karma tiers, gate features by reputation, and build Karma-aware smart contracts and frontends on Status Network. +keywords: [Karma, integration, smart contract, soulbound token, reputation, tiers, gasless, Status Network, developer guide] +slug: /build-for-karma/guides/reputation-integration +sidebar_position: 4 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Karma is Status Network's soulbound reputation token. Every address earns Karma through genuine network participation such as staking SNT, bridging assets, providing liquidity, using apps, or paying premium gas fees. Karma cannot be bought, sold, or transferred. + +This guide covers how to read Karma data and build apps that respond to a user's reputation tier. + +## Reading Karma On-Chain + +Karma state is split across two contracts: + +- **Karma** — the soulbound ERC-20 token. `balanceOf` returns the net balance after any slashing. Transfers and approvals always revert. +- **KarmaTiers** — maps balances to tiers. Call `getTierIdByKarmaBalance(balance)` then `getTierById(tierId)` to resolve a user's tier and its `txPerEpoch` quota. + + + + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/// @notice Minimal interface for the Karma soulbound token. +interface IKarma { + /// @notice Net Karma balance of `account` after slashing. + function balanceOf(address account) external view returns (uint256); + + /// @notice Total amount slashed from `account` across all distributors. + function slashedAmountOf(address account) external view returns (uint256); +} + +/// @notice Minimal interface for the KarmaTiers registry. +interface IKarmaTiers { + struct Tier { + uint256 minKarma; + uint256 maxKarma; + string name; + uint32 txPerEpoch; // gasless transactions allowed per epoch + } + + /// @notice Returns the highest tier ID the given karma balance qualifies for. + function getTierIdByKarmaBalance(uint256 karmaBalance) external view returns (uint8); + + /// @notice Returns the full Tier struct for a given tier ID. + function getTierById(uint8 tierId) external view returns (Tier memory); + + /// @notice Returns the total number of configured tiers. + function getTierCount() external view returns (uint256); +} + +contract KarmaGated { + IKarma public karma; + IKarmaTiers public karmaTiers; + + constructor(address _karmaContract, address _karmaTiersContract) { + karma = IKarma(_karmaContract); + karmaTiers = IKarmaTiers(_karmaTiersContract); + } + + /// @notice Resolves the tier ID for `user` from their current Karma balance. + function tierIdOf(address user) public view returns (uint8) { + return karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + } + + modifier onlyTier(uint8 minTier) { + require(tierIdOf(msg.sender) >= minTier, "Karma tier too low"); + _; + } + + function premiumAction() external onlyTier(3) { + // Only users at tier 3 or above can call this + } + + function getDiscount(address user) external view returns (uint256) { + uint8 tierId = tierIdOf(user); + // Higher tiers get bigger discounts + return uint256(tierId) * 5; // 0%, 5%, 10%, ... + } +} +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider( + 'https://public.sepolia.rpc.status.network' +); + +const KARMA_ABI = [ + 'function balanceOf(address account) view returns (uint256)', + 'function slashedAmountOf(address account) view returns (uint256)', +]; + +const KARMA_TIERS_ABI = [ + 'function getTierIdByKarmaBalance(uint256 karmaBalance) view returns (uint8)', + 'function getTierById(uint8 tierId) view returns (tuple(uint256 minKarma, uint256 maxKarma, string name, uint32 txPerEpoch))', + 'function getTierCount() view returns (uint256)', +]; + +const karma = new ethers.Contract(KARMA_ADDRESS, KARMA_ABI, provider); +const karmaTiers = new ethers.Contract(KARMA_TIERS_ADDRESS, KARMA_TIERS_ABI, provider); + +// Read a user's Karma balance and resolve their tier +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +console.log(`Karma balance: ${ethers.formatEther(balance)} KARMA`); +console.log(`Tier: ${tier.name} (ID ${tierId})`); +console.log(`Tx quota per epoch: ${tier.txPerEpoch}`); +``` + + + + +```ts +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://public.sepolia.rpc.status.network'), +}); + +const karmaAbi = [ + { + name: 'balanceOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, + { + name: 'slashedAmountOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, +] as const; + +const karmaTiersAbi = [ + { + name: 'getTierIdByKarmaBalance', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'karmaBalance', type: 'uint256' }], + outputs: [{ name: '', type: 'uint8' }], + }, + { + name: 'getTierById', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'tierId', type: 'uint8' }], + outputs: [{ + name: 'tier', + type: 'tuple', + components: [ + { name: 'minKarma', type: 'uint256' }, + { name: 'maxKarma', type: 'uint256' }, + { name: 'name', type: 'string' }, + { name: 'txPerEpoch', type: 'uint32' }, + ], + }], + }, +] as const; + +// Two sequential reads: balance → tier ID → tier details +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +console.log(`Tier: ${tier.name} (ID ${tierId})`); +console.log(`Tx quota per epoch: ${tier.txPerEpoch}`); +``` + + + + + +:::note Contract Addresses +Karma and KarmaTiers contract addresses for testnet are published on the [Contract Addresses](/overview/general-info/contract-addresses/testnet-contracts) page. +::: + +## Possible Integration Patterns + +### Feature Gating + +Unlock features based on Karma tier. +The `onlyTier` modifier you can check from the [Reading Karma On-Chain](#reading-karma-on-chain) section can restrict access at the contract level. +Alternatively, you can use `tierId` in your code to gate features: + +> **Catalog idea:** [Karma-Gated Content Feed](/build-for-karma/what-to-build) — a ready-to-scope app built entirely around this pattern. + + + + + +```solidity +function accessPremiumContent() external onlyTier(3) { + // Only users at tier 3 or above can call this +} +``` + + + + +```js +// Resolve tier from Karma balance, then gate UI features +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + + +### Dynamic Pricing + +Offer discounts or better rates to high-Karma users: + +> **Catalog idea:** [Karma-Tiered NFT Marketplace](/build-for-karma/what-to-build) — a marketplace where fees and access windows scale automatically with a buyer's Karma tier. + + + + + +```solidity +function calculateFee(address user, uint256 baseAmount) public view returns (uint256) { + uint8 tierId = karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + // Each tier gives 5% discount + uint256 discount = uint256(tierId) * 5; + return baseAmount * (100 - discount) / 100; +} +``` + + + + +```js +// Compute the discounted fee on the client-side from the user's current tier +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +const discount = BigInt(tierId) * 5n; // 5% per tier +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`Tier ${tierId}: ${discount}% discount → fee = ${fee}`); +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const discount = BigInt(tierId) * 5n; // 5% per tier +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`Tier ${tierId}: ${discount}% discount → fee = ${fee}`); +``` + + + + + +### Reputation Display + +Show Karma tier as a trust index in your UI by reading the tier name directly from the `KarmaTiers` contract: + +> **Catalog idea:** [Gasless Micro-Blogging Platform](/build-for-karma/what-to-build) — a social feed with Karma trust badges embedded in profiles and posts. + + + + + +```js +// Fetch tier name on-chain — no hardcoded array needed +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +function KarmaBadge({ tierName }) { + return {tierName}; +} + +// Usage + +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +function KarmaBadge({ tierName }: { tierName: string }) { + return {tierName}; +} + +// Usage + +``` + + + + + +### Weighted Governance + +Use Karma for vote weighting in your app's governance: + +> **Catalog idea:** [DAO Proposal & Karma-Weighted Voting App](/build-for-karma/what-to-build) — polling and signal voting with optional Karma-weighted participation. + + + + + +```solidity +function vote(uint256 proposalId, bool support) external { + uint256 weight = karma.balanceOf(msg.sender); + proposals[proposalId].votes += support ? int256(weight) : -int256(weight); +} +``` + + + + +```js +// Read the user's Karma balance as their vote weight, then submit +const weight = await karma.balanceOf(userAddress); +console.log(`Voting with weight: ${ethers.formatEther(weight)} KARMA`); + +// Call your governance contract +const tx = await governanceContract.vote(proposalId, support); +await tx.wait(); +``` + + + + +```ts +import { formatEther, parseAbi } from 'viem'; + +// Read vote weight from Karma balance +const weight = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); +console.log(`Voting with weight: ${formatEther(weight)} KARMA`); + +// Submit vote via your governance contract +const { request } = await client.simulateContract({ + address: GOVERNANCE_ADDRESS, + abi: parseAbi(['function vote(uint256 proposalId, bool support) external']), + functionName: 'vote', + args: [proposalId, support], + account: userAddress, +}); +await walletClient.writeContract(request); +``` + + + + + +## Next Steps + +- Refer to [Gasless Integration](/build-for-karma/guides/gasless-integration) to integrate Karma in making gasless transaction +- Check out [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) to see a breakdown of how Karma is earned and used +- Go to [Gasless Transactions](/overview/general-info/gasless-transactions) to understand the technical details of the RLN-based gasless system diff --git a/docs/build-for-karma/index.md b/docs/build-for-karma/index.md new file mode 100644 index 0000000..728ea1f --- /dev/null +++ b/docs/build-for-karma/index.md @@ -0,0 +1,21 @@ +--- +id: build-for-karma-index +title: Build for Karma +description: Everything builders need to ship on Status Network — guides for gasless and reputation integration, deployment tutorials, and app ideas. +keywords: [Status Network, builder guides, Karma, gasless integration, reputation, deploy contracts, app ideas, developer documentation] +slug: /build-for-karma +sidebar_position: 1 +--- + +This section is your builder hub for Status Network. Whether you want to understand the benefits of building here, explore what to build, learn how to implement gasless transactions, or deploy your first smart contract — everything you need for Karma-focused building is here. + +## Where to Start + +- [**Why Status Network**](/build-for-karma/why-status-network): The case for building here — gasless economics, Karma, public funding, and how it compares to other L2s. +- [**What to Build**](/build-for-karma/what-to-build): Interactive idea catalog with filterable app ideas to help your creation. +- [**Using Karma**](/build-for-karma/guides): Technical guides for integrating gasless transactions and reputation-aware features into your app. +- [**Deploy Your First Contract**](/build-for-karma/deploying-contracts): Step-by-step contract deployment with Hardhat, Foundry, Remix, or Scaffold-ETH 2. + +## Community + +- Join the [Telegram Builder's Community](https://t.me/statusl2) to get help building on Status Network diff --git a/docs/build-for-karma/what-to-build.md b/docs/build-for-karma/what-to-build.md new file mode 100644 index 0000000..5e61206 --- /dev/null +++ b/docs/build-for-karma/what-to-build.md @@ -0,0 +1,31 @@ +--- +title: What to Build on Status Network +description: A scan-first catalog of high-leverage app ideas for Status Network, organized by category, effort, and delivery profile. +keywords: [Status Network, app ideas, builder ideas, Karma apps, privacy apps, gasless apps, DeFi, social apps, games, MVP] +sidebar_position: 3 +--- + +import IdeaCatalog from '@site/src/components/IdeaCatalog/IdeaCatalog'; + +Status Network combines gasless UX, Karma reputation, and privacy primitives. +This unlocks products that are hard to build well on any other chains. + +Below are some example products we think are a great fit for Status Network, though of course you’re not limited to these ideas. + +Use the filters to find ideas aligned with your expertise and ambition. Click any card to see the full scope. + + + +## Start building now + +- [Quick Start](/overview/introduction/quick-start) +- [How to use Karma for gaslessness and reputation](/build-for-karma/guides) +- [Deploying Contracts on Status Network](/build-for-karma/deploying-contracts) +- [Telegram Builder's Community](https://t.me/statusl2) + +## Ecosystem & Funding + +Builders can earn continuous funding from the public funding pool governed by Karma holders. +As your app gains traction, you gain Karma and stronger influence over future allocations. + +Learn more → [Ecosystem & Funding](/overview/tokenomics/public-funding) diff --git a/docs/build-for-karma/why-status-network.md b/docs/build-for-karma/why-status-network.md new file mode 100644 index 0000000..efc9c5e --- /dev/null +++ b/docs/build-for-karma/why-status-network.md @@ -0,0 +1,138 @@ +--- +title: Why Build on Status Network +description: The case for building on Status Network — gasless transactions, Karma reputation, sustainable public funding, and how it compares to other L2s. +keywords: [Status Network, why build, L2 comparison, gasless, Karma, public funding, developer advantages, Linea zkEVM] +sidebar_position: 2 +--- + +There are dozens of L2s to choose from. Here's why Status Network is worth your attention. + +
+ +
+
Dev Funding
+
+
+
Status Network
+

Continuous revenue pool that scales with your app's traction

+
+
+
Typical L2
+

One-time grants you re-apply for every few months

+
+
+
+
+ +
+
Gas for Users
+
+
+
Status Network
+

Free with Karma — no paymaster, no relayer, no account abstraction setup

+
+
+
Typical L2
+

Users pay gas, or devs run paymaster + relayer infrastructure

+
+
+
+
+ +
+
User Reputation
+
+
+
Status Network
+

Network-wide reputation system through Karma — spam resistance, trust signals, feature gating

+
+
+
Typical L2
+

None — build your own or integrate third-party solutions

+
+
+
+
+ +
+
Privacy
+
+
+
Status Network
+

Native ZK-based tooling — Rate Limiting Nullifiers and more

+
+
+
Typical L2
+

Third-party integrations

+
+
+
+
+
+ +## Sustainable Public Funding + +Status Network doesn't rely on one-time grants or foundation treasuries. Instead, it has a continuous public funding pool fed by: + +- **Native yield** from bridged yield-bearing assets (initially ETH and stablecoins) +- **DEX fees** from the native decentralized exchange +- **Premium gas fees** from deny-listed users +- **Future native app fees** (lending, NFT, launchpad, etc.) + +Read more → [Economic Model](/overview/tokenomics/economic-model) + +Karma holders vote on how this public funding pool is distributed to apps and builders. The more your app contributes to the network by generating activity and transaction volume, the more Karma you and your users earn, and the more influence you have over future allocations. + +**What this means for builders:** + +- Not just a one-time grant you have to re-apply for every few months, but a recurring revenue stream +- Funding scales with your app's traction — more users, more Karma, more incentives for you +- Community-governed allocation, no foundation gatekeeping + +Read more → [Public Funding](/overview/tokenomics/public-funding) + +## Gasless by Default + +On most chains, "gasless" means setting up a paymaster, running a relayer, or integrating an account abstraction SDK. On Status Network, gasless is the default behavior. + +Every address with a positive Karma balance gets a free transaction quota. No paymasters. No relayers. No special wallet configuration. Your app just works without gas fees for eligible users. + +**What this means for builders:** + +- No UX friction from gas. Your onboarding funnel doesn't lose users at the "bridge some ETH for gas" step +- No need to integrate ERC-4337, meta-transactions, or gas relay patterns +- No infrastructure cost for sponsoring gas on behalf of users + +The gasless system is enforced at the sequencer level via [Rate Limiting Nullifiers (RLN)](/overview/general-info/gasless-transactions/#rln), a zero-knowledge spam prevention mechanism. + +## Built-in Reputation with Karma + +Karma is a soulbound (non-transferable) token that every user earns through genuine network participation such as staking, bridging, providing liquidity, using apps, or paying premium gas. It cannot be bought or transferred. + +**What this means for builders:** + +- **Trust signal**: High-Karma users are verified active participants, not airdrop farmers or sybils +- **Feature gating**: Builders could gate their features such as premium features, priority access, or better rates based on user Karma tiers +- **Spam resistance**: The network itself is gating spams with RLN mechanism and Karma tiers directly control gasless transaction quotas, meaning high-Karma users are inherently less likely to spam +- **No cold start problem**: Your app benefits from reputation built network-wide in the ecosystem + +Read more → [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) + +## Privacy Focused Civil Goods + +Status Network is built with technology from the [Institute of Free Technology (IFT)](https://free.technology). Most notably, the gasless transaction system uses [RLN (Rate Limiting Nullifiers)](https://vac.dev/rln), a zero-knowledge spam prevention mechanism developed by [Vac](https://vac.dev), an IFT research division. + +We align with IFT's vision in technology to build public goods to safegauard civil liberties in the digital age. Status Network will add on privacy focused modules leveraging our gaslessness. + + + +## Full EVM Equivalence + +Status Network is built on the [Linea zkEVM](https://linea.build) stack. This means builders can: + +- Deploy existing Solidity contracts without modification +- Use standard Ethereum tooling like Hardhat, Foundry, ethers.js, viem, etc. +- use standard JSON-RPC methods (except for some methods related to gas fee. Refer to [JSON-RPC API](/tools/rpc/json-rpc) for more information.) +- Zero-knowledge proof-based security inherited from Linea's rollup architecture + +No custom VM. No non-standard opcodes. No rewriting your contracts or backends. diff --git a/docs/general-info/add-status-network.md b/docs/overview/general-info/add-status-network.md similarity index 100% rename from docs/general-info/add-status-network.md rename to docs/overview/general-info/add-status-network.md diff --git a/docs/general-info/bridge/bridging-testnet.md b/docs/overview/general-info/bridge/bridging-testnet.md similarity index 100% rename from docs/general-info/bridge/bridging-testnet.md rename to docs/overview/general-info/bridge/bridging-testnet.md diff --git a/docs/general-info/contract-addresses/pre-deposit.md b/docs/overview/general-info/contract-addresses/pre-deposit.md similarity index 95% rename from docs/general-info/contract-addresses/pre-deposit.md rename to docs/overview/general-info/contract-addresses/pre-deposit.md index 80e0050..65625f7 100644 --- a/docs/general-info/contract-addresses/pre-deposit.md +++ b/docs/overview/general-info/contract-addresses/pre-deposit.md @@ -1,11 +1,9 @@ --- -title: Pre-Deposit Campaign Contracts +title: Pre-Deposit Vault Contracts description: List of Status Network pre-deposit campaign vault addresses. keywords: [Status Network, Pre-deposit, Campaign, Vaults] --- -# Pre-Deposit Vault Contracts - In collaboration with [Aragon](https://www.aragon.org/), we're running our pre-deposit campaign for Status Network users. This page lists all the important contract addresses of the campaign. diff --git a/docs/general-info/contract-addresses/testnet-contracts.md b/docs/overview/general-info/contract-addresses/testnet-contracts.md similarity index 100% rename from docs/general-info/contract-addresses/testnet-contracts.md rename to docs/overview/general-info/contract-addresses/testnet-contracts.md diff --git a/docs/general-info/contract-addresses/tokens.md b/docs/overview/general-info/contract-addresses/tokens.md similarity index 100% rename from docs/general-info/contract-addresses/tokens.md rename to docs/overview/general-info/contract-addresses/tokens.md diff --git a/docs/general-info/gasless-transactions.md b/docs/overview/general-info/gasless-transactions.md similarity index 77% rename from docs/general-info/gasless-transactions.md rename to docs/overview/general-info/gasless-transactions.md index cc82652..6c55eab 100644 --- a/docs/general-info/gasless-transactions.md +++ b/docs/overview/general-info/gasless-transactions.md @@ -5,14 +5,13 @@ description: Learn how Status Network implements gasless transactions using RLN keywords: [Status Network, Gasless Transactions, Linea, RLN, Rate Limiting Nullifier, Karma, Zero-Knowledge Proofs, ZKP, Soulbound Tokens, Blockchain, Layer 2, L2, Spam Prevention] --- -# Gasless Transactions in Status Network - - Status Network aims to introduce gasless transactions at scale. The key component of this gasless approach is Vac's [Rate Limiting Nullifier](https://vac.dev/rln), which permits transaction rate limitation without the need for traditional gas fees. The document describes the architecture and integration elements needed to safely enable gasless transactions. -The implementation code for these gasless transactions is available in the [Status Network monorepo](https://github.com/status-im/status-network-monorepo?tab=readme-ov-file#architecture-components). +The implementation code for gasless transactions is available in the [Status Network monorepo](https://github.com/status-im/status-network-monorepo?tab=readme-ov-file#architecture-components). -### RLN +For more information on operational level implementation of our gaslessness, refer to [Karma integration guide](/build-for-karma/guides) + +## RLN [RLN](https://vac.dev/rln) is a zero-knowledge system designed to prevent spam without compromising user privacy unless a violation occurs. It replaces traditional gas fees with cryptographic rate limits enforced via ZKPs and Shamir's Secret Sharing. @@ -35,20 +34,28 @@ graph TD B -->|Soulbound Token| C{Tier Assignment} subgraph "Tier Limits" - D[Basic] - E[Active] - F[Regular] - G[Power User] - H[High-Throughput] - I[S-Tier] + T1[Entry] + T2[Newbie] + T3[Basic] + T4[Active] + T5[Regular] + T6[Power User] + T7[Pro User] + T8[High-Throughput] + T9[S-Tier] + T10[Legendary] end - C --> D - C --> E - C --> F - C --> G - C --> H - C --> I + C --> T1 + C --> T2 + C --> T3 + C --> T4 + C --> T5 + C --> T6 + C --> T7 + C --> T8 + C --> T9 + C --> T10 %% RLN Flow A -->|Submits Gasless Tx| J[RPC Node] @@ -97,7 +104,7 @@ graph TD class A wallet class B,L karma class C tier - class D,E,F,G,H,I tierNode + class T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 tierNode class J,K,K1,K2,K3,M,N,O rln class P,Q,R,S,T,U,V,W sequencer class X,Y,Z,AA gas @@ -134,10 +141,16 @@ The Deny List temporarily restricts users exceeding quotas or engaging in spam: - Users can bypass restrictions by paying premium gas fees - Paying premium fees removes users from the list and earns additional Karma -### `linea_estimateGas` RPC Modification +## `linea_estimateGas` RPC Modification -The linea_estimateGas method is customised to account for users on the Deny List: +Status Network extends the base Linea `linea_estimateGas` with Karma-aware behavior so the returned **fee fields** can depend on the sender address `from`'s Karma balance. +The `gasLimit` calculation is unchanged from the base Linea implementation (which itself uses the standard `eth_estimateGas` logic internally). -- Checks user's Deny List status -- Adds premium gas multipliers if needed -- Provides transparency and accurate gas estimations to the users +Concretely, Status Network's `linea_estimateGas`: + +- **Applies deny-list premium**: if the sender is on the deny list, the node computes the normal fee estimate and then applies a premium multiplier to the **fee fields**. +- **Returns gasless estimates for eligible users**: if the sender has available Karma quota, the method returns zero `baseFeePerGas` and `priorityFeePerGas`. + +The above logic lives in our modified `LineaEstimateGas` implementation open-sourced around [this section in the Status Network monorepo](https://github.com/status-im/status-network-monorepo/blob/v1.0.1/besu-plugins/linea-sequencer/sequencer/src/main/java/net/consensys/linea/rpc/methods/LineaEstimateGas.java#L218). + +For Karma-aware fee estimation behavior and `linea_estimateGas` specifics, see [JSON-RPC API](/tools/rpc/json-rpc). diff --git a/docs/general-info/network-details.md b/docs/overview/general-info/network-details.md similarity index 96% rename from docs/general-info/network-details.md rename to docs/overview/general-info/network-details.md index 9537987..42288b6 100644 --- a/docs/general-info/network-details.md +++ b/docs/overview/general-info/network-details.md @@ -33,4 +33,4 @@ These are the official network details for the Status Network testnet. You can u - Connect dApps to the network - Verify smart contracts -For instructions on adding the network to your wallet, see our [Add Status Network guide](./add-status-network.md). +For instructions on adding the network to your wallet, see our [Add Status Network guide](/overview/general-info/add-status-network). diff --git a/docs/overview/general-info/privacy.md b/docs/overview/general-info/privacy.md new file mode 100644 index 0000000..d84d009 --- /dev/null +++ b/docs/overview/general-info/privacy.md @@ -0,0 +1 @@ +# How Status Network connects to Privacy diff --git a/docs/index.md b/docs/overview/index.md similarity index 81% rename from docs/index.md rename to docs/overview/index.md index 833d81c..77b882b 100644 --- a/docs/index.md +++ b/docs/overview/index.md @@ -3,7 +3,7 @@ id: index title: Status Network · Gasless L2 description: Status Network is a gasless Layer 2 blockchain network enabling seamless, fee-free decentralized applications. Start building with easy wallet setup, faucets, and deployment tools. keywords: [Status Network, Layer 2, gasless blockchain, ethereum scaling, L2, validium, web3 development, dapp development, blockchain development] -slug: / +slug: /overview sidebar_position: 1 --- @@ -41,16 +41,16 @@ Status Network is natively integrated with Status Wallet, Keycard, Waku and Code Wants to skip the explanation part and go straight to building? Here's how to get started: -1. [Add Status Network to Your Wallet](/general-info/add-status-network) -2. [Get Testnet ETH](/tools/testnet-faucets) -3. [Bridge Assets](/general-info/bridge/bridging-testnet) -4. [Deploy Your First Contract](/tutorials/deploying-contracts/using-remix) +1. [Add Status Network to Your Wallet](/overview/general-info/add-status-network) +2. [Get Testnet ETH](/tools/core-infrastructure/testnet-faucets) +3. [Bridge Assets](/overview/general-info/bridge/bridging-testnet) +4. [Deploy Your First Contract](/build-for-karma/deploying-contracts/using-remix) ## Support & Resources Connect with our community and access the resources you need: - Join our [Telegram Builder's Community](https://t.me/statusl2) -- View [Network Details](/general-info/network-details) -- Browse [Contract Addresses](/general-info/contract-addresses/testnet-contracts) +- View [Network Details](/overview/general-info/network-details) +- Browse [Contract Addresses](/overview/general-info/contract-addresses/testnet-contracts) Ready to build something amazing? Start your journey on the free network today! \ No newline at end of file diff --git a/docs/introduction/quick-start.md b/docs/overview/introduction/quick-start.md similarity index 89% rename from docs/introduction/quick-start.md rename to docs/overview/introduction/quick-start.md index 2f61755..e48e46c 100644 --- a/docs/introduction/quick-start.md +++ b/docs/overview/introduction/quick-start.md @@ -16,7 +16,7 @@ Before getting started: 1. **Add Status Network Testnet to MetaMask**: - Follow the [Add Status Network guide](/general-info/add-status-network) for step-by-step instructions on how to add the Status Network testnet to MetaMask. + Follow the [Add Status Network guide](/overview/general-info/add-status-network) for step-by-step instructions on how to add the Status Network testnet to MetaMask. 2. **Get Test ETH**: @@ -108,8 +108,8 @@ contract SimpleStorage { - **Get Support**: - Join our [Telegram Community](https://t.me/statusl2) for assistance - - Check our [Network Details](/general-info/network-details) for more information - - Learn about [bridging tokens](/general-info/bridge/bridging-testnet) to Status Network + - Check our [Network Details](/overview/general-info/network-details) for more information + - Learn about [bridging tokens](/overview/general-info/bridge/bridging-testnet) to Status Network ## Summary @@ -120,5 +120,5 @@ You've successfully: - Interacted with your deployed contract by storing and retrieving a number For more advanced development, check out our guides for deploying with: -- [Hardhat](/tutorials/deploying-contracts/using-hardhat) -- [Foundry](/tutorials/deploying-contracts/using-foundry) \ No newline at end of file +- [Hardhat](/build-for-karma/deploying-contracts/using-hardhat) +- [Foundry](/build-for-karma/deploying-contracts/using-foundry) \ No newline at end of file diff --git a/docs/other/official-links.md b/docs/overview/other/official-links.md similarity index 96% rename from docs/other/official-links.md rename to docs/overview/other/official-links.md index eb3fbb9..83429f2 100644 --- a/docs/other/official-links.md +++ b/docs/overview/other/official-links.md @@ -43,4 +43,4 @@ This page contains all the official links for the Status Network ecosystem. | Telegram Community | [t.me/statusl2](https://t.me/statusl2) | | X/twitter | [x.com/statusL2](https://x.com/statusL2) | -For detailed information about adding the network to your wallet, see our [Add Network guide](/general-info/add-status-network). +For detailed information about adding the network to your wallet, see our [Add Network guide](/overview/general-info/add-status-network). diff --git a/docs/tokenomics/economic-model.md b/docs/overview/tokenomics/economic-model.md similarity index 100% rename from docs/tokenomics/economic-model.md rename to docs/overview/tokenomics/economic-model.md diff --git a/docs/tokenomics/karmic-tokenomics.md b/docs/overview/tokenomics/karmic-tokenomics.md similarity index 81% rename from docs/tokenomics/karmic-tokenomics.md rename to docs/overview/tokenomics/karmic-tokenomics.md index 9c85fcc..3f5a0cc 100644 --- a/docs/tokenomics/karmic-tokenomics.md +++ b/docs/overview/tokenomics/karmic-tokenomics.md @@ -4,10 +4,31 @@ description: Explore Status Network's Karma system, a non-transferable governanc keywords: [Karma token, Karmic tokenomics, Status Network governance, non-transferable token, governance power, staking rewards, contribution rewards] --- -# Karmic Tokenomics - In some Eastern traditions, Karma represents the principle that one's past actions shape their future state. Similarly, on Status Network, every positive action and contribution accumulates Karma, granting greater influence over the network's funding and incentives. Karma ($KARMA) is a non-transferable governance token that rewards staking, bridging, providing liquidity, and building. The more a user or an app contributes to the L2 in liquidity or activity, the more voting power they earn over funding allocations, liquidity incentives, and network roadmap and parameters. +## Karma Tiers + +Karma tiers determine the gasless transaction quota for each address. Higher tiers get more free transactions per epoch. + +### Current Tier Model (Testnet) + +| Tier | Daily Quota | Equivalent Rate | Karma Range | +|---|---|---|---| +| Entry | 1 tx/day | 1 tx every 24 hours | 1-2 | +| Newbie | 5 tx/day | 1 tx every ~5 hours | 2-49 | +| Basic | 15 tx/day | 1 tx every 90 minutes | 50-499 | +| Active | 96 tx/day | 1 tx every 15 minutes | 500-4999 | +| Regular | 480 tx/day | 1 tx every 3 minutes | 5000-19999 | +| Power User | 960 tx/day | 1 tx every 90 seconds | 20000-99999 | +| Pro User | 10080 tx/day | 1 tx every 9 seconds | 100000-499999 | +| High-Throughput | 108000 tx/day | 1 TPS | 500000-4999999 | +| S-Tier | 240000 tx/day | 5 TPS | 5000000-9999999 | +| Legendary | 480000 tx/day | 10 TPS | 10000000 and more | + +:::info Testnet-only model +This tier model is currently used for testnet alignment. The exact quota numbers per tier will be governed by Karma holders in the future and may change. +::: + ## How Karma is Earned Karma is minted through six primary mechanisms and cannot be acquired, ensuring that no entity—including the Status team—has any advantage in getting access to it. Everyone earns Karma under the same rules, based solely on their contributions to the network, ensuring it remains a pure representation of meaningful engagement within the network: @@ -40,7 +61,6 @@ The initialization parameters of Karma minting allocations will be announced soo - **Liquid Grants for Votes**: In the future, apps, protocols, and liquidity providers will be able to offer liquid grants to Karma holders as voting incentives. - ## Flywheel Effect 1. Users bridge yield-bearing assets, earning Karma and increasing funding for apps and liquidity providers. @@ -51,4 +71,4 @@ The initialization parameters of Karma minting allocations will be announced soo 4. Higher native yield and fees attract more TVL as users bridge additional yield-bearing assets. -As TVL and adoption grow, so do funding opportunities, reinforcing network sustainability. \ No newline at end of file +As TVL and adoption grow, so do funding opportunities, reinforcing network sustainability. diff --git a/docs/tokenomics/pre-deposits.md b/docs/overview/tokenomics/pre-deposits.md similarity index 92% rename from docs/tokenomics/pre-deposits.md rename to docs/overview/tokenomics/pre-deposits.md index b34e478..370aea2 100644 --- a/docs/tokenomics/pre-deposits.md +++ b/docs/overview/tokenomics/pre-deposits.md @@ -34,7 +34,7 @@ Deposited ETH is staked via [Lido](https://lido.fi/) to earn staking yield. A po ### Deployed contracts -See [Pre-Deposit Vault Contracts](../general-info/contract-addresses/pre-deposit) for a full list of addresses and networks. +See [Pre-Deposit Vault Contracts](/overview/general-info/contract-addresses/pre-deposit) for a full list of addresses and networks. ## Generic Protocol Vault (GUSD) @@ -78,7 +78,7 @@ For a full overview of the Generic Protocol structure (GUSD tokenomics, bridging Pre-depositors earn: -- **Karma**: non-transferable governance token; grants gasless throughput and voting power (details in [Karmic Tokenomics](./karmic-tokenomics)). +- **Karma**: non-transferable governance token; grants gasless throughput and voting power (details in [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics)). - **Liquid incentives**: 15M SNT and 20M LINEA tokens distributed across vaults. - **Generic protocol points** for stablecoin depositors: Generic Protocol points to be used when Generic Protocol launches on Status Network Mainnet. - **Native app points**: to be confirmed as natives apps unveil their tokenomics. @@ -114,8 +114,8 @@ This documentation is for informational purposes and does not constitute financi ## Further reading -- [Pre-Deposit Vault Contracts](../general-info/contract-addresses/pre-deposit) — deployed addresses information -- [Karmic Tokenomics](./karmic-tokenomics) — how Karma is earned and used -- [Economic Model](./economic-model) — Status Network's sustainable revenue model +- [Pre-Deposit Vault Contracts](/overview/general-info/contract-addresses/pre-deposit) — deployed addresses information +- [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) — how Karma is earned and used +- [Economic Model](/overview/tokenomics/economic-model) — Status Network's sustainable revenue model - [Aragon Documentation](https://docs.aragon.org/) - [Generic Protocol Documentation](https://docs.generic.money/) diff --git a/docs/tokenomics/public-funding.md b/docs/overview/tokenomics/public-funding.md similarity index 100% rename from docs/tokenomics/public-funding.md rename to docs/overview/tokenomics/public-funding.md diff --git a/docs/tokenomics/snt-staking.md b/docs/overview/tokenomics/snt-staking.md similarity index 100% rename from docs/tokenomics/snt-staking.md rename to docs/overview/tokenomics/snt-staking.md diff --git a/docs/tools/block-explorers.md b/docs/tools/block-explorers.md deleted file mode 100644 index f2bec9b..0000000 --- a/docs/tools/block-explorers.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Status Network Block Explorer -description: Learn how to use the Status Network block explorer to track transactions, verify smart contracts, and monitor network activity. Complete guide to explorer features and contract verification. -keywords: [Status Network explorer, blockchain explorer, smart contract verification, transaction tracking, block explorer, network monitoring] ---- - -# Status Network Testnet Explorer - -The Status Network block explorer is available at [sepoliascan.status.network](https://sepoliascan.status.network). - -### Features -- View transaction details and status -- Track token transfers and balances -- Verify smart contract source code -- Monitor gas prices and network activity -- View and interact with verified smart contracts -- Track token holdings for any address - -## Sepolia Explorer (Layer 1) - -For tracking transactions on Sepolia (Layer 1), use [Sepolia Etherscan](https://sepolia.etherscan.io). - -This is particularly useful for: -- Monitoring bridge transactions from L1 to L2 -- Tracking token deposits and withdrawals -- Verifying L1 contract interactions - -## Contract Verification - -To verify your smart contract on Status Network Explorer: - -1. Navigate to [Contract Verification](https://sepoliascan.status.network/contract-verification) -2. Enter your contract address -3. Upload your source code and provide compilation details -4. Submit for verification - -Once verified, your contract's source code will be publicly visible and users can interact with it directly through the explorer. - -## API Access - -The Status Network Explorer provides API endpoints for developers. Documentation for the API will be available soon. diff --git a/docs/tools/core-infrastructure/block-explorers.md b/docs/tools/core-infrastructure/block-explorers.md new file mode 100644 index 0000000..06be6f7 --- /dev/null +++ b/docs/tools/core-infrastructure/block-explorers.md @@ -0,0 +1,24 @@ +--- +title: Block Explorers +description: Status Network block explorer for viewing transactions, verifying contracts, and monitoring network activity. +keywords: [block explorer, transaction tracking, smart contract verification] +slug: /tools/core-infrastructure/block-explorers +--- + +## Status Network Mainnet + +*Coming soon.* + +## Status Network Testnet (Sepolia) + +| Explorer | URL | Features | +|----------|-----|----------| +| Sepoliascan | [sepoliascan.status.network](https://sepoliascan.status.network) | Search transactions, verify and interact with smart contracts, track balances | + +For contract verification, visit the [Contract Verification](https://sepoliascan.status.network/contract-verification) page on Sepoliascan. + +L1 activity on Sepolia can be tracked via [Sepolia Etherscan](https://sepolia.etherscan.io). + +## Status Network Testnet (Hoodi) + +*Coming soon.* diff --git a/docs/tools/bridge.md b/docs/tools/core-infrastructure/bridge.md similarity index 73% rename from docs/tools/bridge.md rename to docs/tools/core-infrastructure/bridge.md index 24001ba..2401145 100644 --- a/docs/tools/bridge.md +++ b/docs/tools/core-infrastructure/bridge.md @@ -1,19 +1,11 @@ --- -title: Status Network Bridge +title: Status Network Testnet Bridge description: Complete guide to using the Status Network bridge for transferring tokens between Sepolia and Status Network testnet. Learn about supported tokens, bridging process, and monitoring transactions. keywords: [Status Network bridge, token bridge, cross-chain transfer, L1 L2 bridge, token bridging, Sepolia bridge] +slug: /tools/core-infrastructure/bridge --- -# Status Network Testnet Bridge - -The Status Network Testnet Bridge allows users to transfer tokens between Sepolia (Layer 1) and Status Network testnet (Layer 2). The bridge interface is available at [bridge.status.network](https://bridge.status.network). - -## Overview - -The bridge serves as a crucial infrastructure component that enables: -- Token transfers from Sepolia to Status Network testnet -- Token withdrawals from Status Network testnet to Sepolia -- Message passing between L1 and L2 +The Status Network Testnet Bridge allows users to transfer tokens and pass messages between Sepolia (Layer 1) and Status Network testnet (Layer 2). The bridge interface is available at [bridge.status.network](https://bridge.status.network). ## Bridge Contracts @@ -36,7 +28,7 @@ For the most up-to-date list of supported tokens and their contract addresses, p ## Using the Bridge -For detailed instructions on how to use the bridge, including step-by-step guides and important security considerations, please refer to our [Bridging Guide](../general-info/bridge/bridging-testnet.md). +For detailed instructions on how to use the bridge, including step-by-step guides and important security considerations, please refer to our [Bridging Guide](/overview/general-info/bridge/bridging-testnet). ## Monitoring Bridge Transactions @@ -47,5 +39,5 @@ You can monitor your bridge transactions using: ## Support If you encounter any issues while using the bridge: -- Check our [Bridging Guide](../general-info/bridge/bridging-testnet.md) for common solutions +- Check our [Bridging Guide](/overview/general-info/bridge/bridging-testnet) for common solutions - Join our [Telegram Community](https://t.me/statusl2) for assistance diff --git a/docs/tools/rpc.md b/docs/tools/core-infrastructure/rpc-endpoints.md similarity index 93% rename from docs/tools/rpc.md rename to docs/tools/core-infrastructure/rpc-endpoints.md index 8d56459..b3942cc 100644 --- a/docs/tools/rpc.md +++ b/docs/tools/core-infrastructure/rpc-endpoints.md @@ -2,12 +2,11 @@ title: RPC Endpoints description: Official RPC endpoints for Status Network, including configuration guides for MetaMask and Web3 libraries. Learn about available methods, rate limits, and best practices. keywords: [Status Network RPC, JSON-RPC, blockchain API, web3 configuration, MetaMask setup, blockchain development] +slug: /tools/core-infrastructure/rpc-endpoints --- import AddToMetaMask from '@site/src/components/AddToMetaMask'; -# RPC Endpoints - The Status Network provides public RPC (Remote Procedure Call) endpoints that allow you to interact with the network. ## Public RPC URL @@ -19,7 +18,7 @@ https://public.sepolia.rpc.status.network ## Using the RPC ### Adding to MetaMask -For instructions on adding Status Network to your wallet using this RPC, see our [Add Network guide](/general-info/add-status-network). +For instructions on adding Status Network to your wallet using this RPC, see our [Add Network guide](/overview/general-info/add-status-network).
@@ -60,4 +59,4 @@ For higher limits, get in touch with us on our [Telegram Builder's Community](ht If you experience issues with the RPC endpoint: - Join our [Telegram Community](https://t.me/statusl2) for support -- Consider implementing a fallback RPC strategy in your application \ No newline at end of file +- Consider implementing a fallback RPC strategy in your application diff --git a/docs/tools/testnet-faucets.md b/docs/tools/core-infrastructure/testnet-faucets.md similarity index 97% rename from docs/tools/testnet-faucets.md rename to docs/tools/core-infrastructure/testnet-faucets.md index 7e40043..63f67fe 100644 --- a/docs/tools/testnet-faucets.md +++ b/docs/tools/core-infrastructure/testnet-faucets.md @@ -2,6 +2,7 @@ title: Testnet Faucets description: Get testnet ETH or STT for Status Network development. Complete guide to obtaining test tokens through Status Network faucets and Sepolia faucets for bridging. keywords: [Status Network faucet, testnet ETH, test tokens, STT, Sepolia faucet, blockchain testing, development tokens] +slug: /tools/core-infrastructure/testnet-faucets --- To get started on Status Network testnet, you may need some testnet ETH or test assets. diff --git a/docs/tools/index.md b/docs/tools/index.md new file mode 100644 index 0000000..f3929f9 --- /dev/null +++ b/docs/tools/index.md @@ -0,0 +1,41 @@ +--- +id: tools-index +title: Tools & Infrastructure +description: Developer tools, infrastructure services, and integrations available on Status Network — RPC endpoints, bridges, faucets, explorers, and partner integrations. +keywords: [Status Network, developer tools, RPC, bridge, faucet, block explorer, infrastructure] +slug: /tools +sidebar_position: 1 +--- + +A complete reference of developer tools, infrastructure services, and integrations available on Status Network. + +## Core Infrastructure + +Essential services for building and testing on Status Network: + +| Tool | Description | +|---|---| +| [**RPC Endpoints**](/tools/core-infrastructure/rpc-endpoints) | Public JSON-RPC access and RPC documentation | +| [**Bridge**](/tools/core-infrastructure/bridge) | Transfer assets between Ethereum Sepolia and Status Network | +| [**Testnet Faucets**](/tools/core-infrastructure/testnet-faucets) | Get testnet assets for development | +| [**Block Explorers**](/tools/core-infrastructure/block-explorers) | Browse transactions, contracts, and network activity | + +## RPC + +For RPC documentation including public endpoints, JSON-RPC API reference, and self-hosted node setup, start with: + +- [RPC Endpoints](/tools/core-infrastructure/rpc-endpoints) — public endpoint URL, setup examples, rate limits, and supported methods overview +- [JSON-RPC API](/tools/rpc/json-rpc) — method reference and Status Network-specific RPC behavior +- [Running an RPC Node](/tools/rpc/running-an-rpc) — self-hosted node setup and operations guidance + +## Infrastructure Partners + +Status Network is onboarding infrastructure partners across indexing, oracles, data providers, wallets, security, and more. See the full list of categories and how to use them on the [Infrastructure Partners](/tools/infrastructure) page. + +Want to become a partner? [Apply here](https://statusnetwork.typeform.com/partner). + +## Quick Links + +- [Network Details](/overview/general-info/network-details) — Chain ID, RPC URL, and full network configuration +- [Add Status Network to your wallet](/overview/general-info/add-status-network) +- [Bridging Guide](/overview/general-info/bridge/bridging-testnet) — Step-by-step bridge instructions diff --git a/docs/tools/infrastructure.md b/docs/tools/infrastructure.md new file mode 100644 index 0000000..2367758 --- /dev/null +++ b/docs/tools/infrastructure.md @@ -0,0 +1,30 @@ +--- +title: Infrastructure Partners +description: Infrastructure partners and third-party integrations available on Status Network — RPC providers, oracles, indexers, account abstraction, dev tooling, and more. +keywords: [Status Network, infrastructure, partners, oracles, indexing, RPC, account abstraction, dev tooling, cross-chain, onramp] +sidebar_position: 6 +--- + +:::note Coming Soon +Status Network is actively onboarding infrastructure partners across the categories below. This page will be updated as integrations go live. +::: + +## Partner Categories + +| Category | Description | +|---|---| +| **RPC Providers** | Dedicated RPC infrastructure for reliable, low-latency node access | +| **Oracles & VRF** | Price feeds, RWA data, VRF for on-chain randomness, DEX data feeds | +| **Safe & Multisig** | Multi-signature wallets for treasury management and governance | +| **Indexers** | Decentralized and centralized indexing for smart contract events and on-chain data | +| **Account Abstraction** | Smart accounts, key management, and seamless user onboarding | +| **Developer Tooling** | SDKs, deployment tools and social login for Status Network | +| **Cross-Chain** | Cross-chain swap and bridging solutions | +| **Onramp Aggregators** | Fiat-to-crypto onramp and offramp solutions | + +## Become a Partner + +If you provide infrastructure services and want to integrate with Status Network: + +- [Apply to become a partner](https://statusnetwork.typeform.com/partner) +- [Join the builder community on Telegram](https://t.me/statusl2) diff --git a/docs/tools/rpc/json-rpc.md b/docs/tools/rpc/json-rpc.md new file mode 100644 index 0000000..945f50e --- /dev/null +++ b/docs/tools/rpc/json-rpc.md @@ -0,0 +1,57 @@ +--- +title: JSON-RPC API +description: Status Network JSON-RPC API reference for builders. +keywords: + [ + Status Network, + JSON-RPC, + Linea, + EIP-1559, + eth_estimateGas, + linea_estimateGas, + Karma, + gasless, + ] +--- + +Status Network is based on Linea zkEVM, meaning **most JSON-RPC methods behave exactly like a standard EVM node**. + +For the canonical list of supported methods and their standard semantics, refer to the following official documentations: + +- **[Ethereum JSON-RPC API Reference](https://ethereum.github.io/execution-apis/)** — standard Ethereum RPC methods +- **[Linea JSON-RPC API Reference](https://docs.linea.build/api/reference)** — Linea-specific methods, including `linea_estimateGas` + +## Status Network extensions + +Status Network extends the standard Linea JSON-RPC with Karma-aware fee estimation: + +### `linea_estimateGas` + +On Linea, [`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas) is the recommended way to estimate gas, returning `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas` in a single call. + +Status Network extends `linea_estimateGas` with Karma-aware behavior: + +- **Gasless users**: Returns zero `baseFeePerGas` and `priorityFeePerGas` for eligible users with available Karma quota +- **Deny-listed users**: Applies a premium multiplier to fee fields for users on the deny list + +### Status Network RPC differences + +On base Linea, `linea_estimateGas` is already the recommended method because it returns fee fields that account for L1 verification costs and data compression - something `eth_estimateGas` and other `eth_` namespace calls do not provide. +Status Network's fork extends `linea_estimateGas` further to be Karma-aware; all other JSON-RPC methods retain their standard semantics. + +That means using the traditional fee flow with `eth_` methods (for example `eth_gasPrice`, `eth_maxPriorityFeePerGas`, or `eth_feeHistory`) can lead to **inaccurate** fee suggestions: they miss both Linea's L2-specific pricing and Status Network's Karma adjustments. + +Use `linea_estimateGas` as the single source of truth for `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas` on Status Network. + +See [Linea's gas-fee guide](https://docs.linea.build/network/how-to/gas-fees) and [Linea's `linea_estimateGas` reference](https://docs.linea.build/api/reference/linea-estimategas) for the base Linea behavior. + +:::info +For detailed integration guidance including code examples, migration steps, and common pitfalls, see the [Using Karma](/build-for-karma/guides) guide. +::: + +### Additional resources + +- [Linea's gas-fee guide](https://docs.linea.build/network/how-to/gas-fees) +- [Linea's `linea_estimateGas` reference](https://docs.linea.build/api/reference/linea-estimategas) +- [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) — how Karma impacts gas fees +- [Gasless Transactions](/overview/general-info/gasless-transactions) — technical details of the RLN-based gasless system diff --git a/docs/tutorials/running-an-rpc.md b/docs/tools/rpc/running-an-rpc.md similarity index 98% rename from docs/tutorials/running-an-rpc.md rename to docs/tools/rpc/running-an-rpc.md index 0802d02..ffd1a0d 100644 --- a/docs/tutorials/running-an-rpc.md +++ b/docs/tools/rpc/running-an-rpc.md @@ -240,7 +240,7 @@ To optimize your RPC node performance: If you encounter any issues: - Check the [official README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md) for the latest updates -- Review our [Network Details](/general-info/network-details) and docs in general +- Review our [Network Details](/overview/general-info/network-details) and docs in general - Join our [Telegram Community](https://t.me/statusl2) for support ## Additional Resources diff --git a/docusaurus.config.ts b/docusaurus.config.ts index e9ac9a9..8aeb571 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,5 +1,7 @@ import type * as Preset from '@docusaurus/preset-classic'; import type { Config } from '@docusaurus/types'; +import remarkMath from 'remark-math'; +import rehypeKatex from 'rehype-katex'; const config: Config = { title: 'Status Network Documentation', @@ -42,9 +44,10 @@ const config: Config = { editUrl: 'https://github.com/status-im/docs.status.network/tree/develop', routeBasePath: '/', showLastUpdateTime: true, + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], }, blog: false, - pages: false, theme: { customCss: './src/css/custom.css', }, @@ -67,6 +70,21 @@ const config: Config = { src: 'img/sn_logo.svg', }, items: [ + { + label: 'Overview', + to: '/overview', + activeBasePath: 'overview', + }, + { + label: 'Build for Karma', + to: '/build-for-karma', + activeBasePath: 'build-for-karma', + }, + { + label: 'Tools', + to: '/tools', + activeBasePath: 'tools', + }, { type: 'localeDropdown', position: 'right', @@ -190,7 +208,93 @@ const config: Config = { scriptSrc: 'https://umami.bi.status.im/script.js', dataDomains: 'docs.status.network', }, - ] + ], + [ + '@docusaurus/plugin-client-redirects', + { + redirects: [ + // Old tutorials paths to build-for-karma + { + from: '/tutorials/deploying-contracts/using-se2', + to: '/build-for-karma/deploying-contracts/using-se2', + }, + { + from: '/tutorials/deploying-contracts/using-remix', + to: '/build-for-karma/deploying-contracts/using-remix', + }, + { + from: '/tutorials/deploying-contracts/using-hardhat', + to: '/build-for-karma/deploying-contracts/using-hardhat', + }, + { + from: '/tutorials/deploying-contracts/using-foundry', + to: '/build-for-karma/deploying-contracts/using-foundry', + }, + // Old tutorials paths to tools + { + from: '/tutorials/running-an-rpc', + to: '/tools/rpc/running-an-rpc', + }, + // Old root-level paths to overview + { + from: '/introduction/quick-start', + to: '/overview/introduction/quick-start', + }, + { + from: '/general-info/add-status-network', + to: '/overview/general-info/add-status-network', + }, + { + from: '/general-info/network-details', + to: '/overview/general-info/network-details', + }, + { + from: '/general-info/gasless-transactions', + to: '/overview/general-info/gasless-transactions', + }, + { + from: '/general-info/bridge/bridging-testnet', + to: '/overview/general-info/bridge/bridging-testnet', + }, + { + from: '/general-info/contract-addresses/tokens', + to: '/overview/general-info/contract-addresses/tokens', + }, + { + from: '/general-info/contract-addresses/testnet-contracts', + to: '/overview/general-info/contract-addresses/testnet-contracts', + }, + { + from: '/general-info/contract-addresses/pre-deposit', + to: '/overview/general-info/contract-addresses/pre-deposit', + }, + { + from: '/tokenomics/economic-model', + to: '/overview/tokenomics/economic-model', + }, + { + from: '/tokenomics/public-funding', + to: '/overview/tokenomics/public-funding', + }, + { + from: '/tokenomics/karmic-tokenomics', + to: '/overview/tokenomics/karmic-tokenomics', + }, + { + from: '/tokenomics/snt-staking', + to: '/overview/tokenomics/snt-staking', + }, + { + from: '/tokenomics/pre-deposits', + to: '/overview/tokenomics/pre-deposits', + }, + { + from: '/other/official-links', + to: '/overview/other/official-links', + }, + ], + }, + ], ] } satisfies Config; diff --git a/i18n/ja/code.json b/i18n/ja/code.json index a8bd1f7..368e359 100644 --- a/i18n/ja/code.json +++ b/i18n/ja/code.json @@ -436,5 +436,585 @@ "theme.tags.tagsPageTitle": { "message": "タグ", "description": "The title of the tag list page" + }, + "homepage.layout.title": { + "message": "Status Network ドキュメント", + "description": "Homepage layout title" + }, + "homepage.layout.description": { + "message": "Status Network ドキュメント — コンポーザブルなプライバシーと組み込みのスパム保護を備えた、ヒトとボットのための完全ガスレス Ethereum L2", + "description": "Homepage layout description" + }, + "homepage.hero.subtitle": { + "message": "ようこそ", + "description": "Homepage hero subtitle" + }, + "homepage.hero.title": { + "message": "Status Network ドキュメント", + "description": "Homepage hero title" + }, + "homepage.hero.description": { + "message": "コンポーザブルなプライバシーと組み込みのスパム保護を備えた、ヒトとボットのための完全ガスレス Ethereum L2", + "description": "Homepage hero description" + }, + "homepage.docs.sectionTitle": { + "message": "ドキュメントを探す", + "description": "Homepage docs section title" + }, + "homepage.docs.sectionSubtitle": { + "message": "今すぐ Status Network での開発を始めましょう", + "description": "Homepage docs section subtitle" + }, + "homepage.docCards.overview.title": { + "message": "概要", + "description": "Homepage docs card title for Overview" + }, + "homepage.docCards.overview.description": { + "message": "Status Network のアーキテクチャ、ガスレス取引、トークノミクス、持続可能な公的資金モデルについて", + "description": "Homepage docs card description for Overview" + }, + "homepage.docCards.overview.linkText": { + "message": "詳細を見る", + "description": "Homepage docs card link text for Overview" + }, + "homepage.docCards.build.title": { + "message": "Build for Karma", + "description": "Homepage docs card title for Build for Karma" + }, + "homepage.docCards.build.description": { + "message": "コントラクトのデプロイ、Karma の統合、ガスレスアプリの構築に関するガイド、チュートリアル、リファレンス", + "description": "Homepage docs card description for Build for Karma" + }, + "homepage.docCards.build.linkText": { + "message": "詳細を見る", + "description": "Homepage docs card link text for Build for Karma" + }, + "homepage.docCards.tools.title": { + "message": "ツール", + "description": "Homepage docs card title for Tools" + }, + "homepage.docCards.tools.description": { + "message": "RPC エンドポイント、ブリッジ、テストネットフォーセット、ブロックエクスプローラー、インフラパートナー", + "description": "Homepage docs card description for Tools" + }, + "homepage.docCards.tools.linkText": { + "message": "詳細を見る", + "description": "Homepage docs card link text for Tools" + }, + "homepage.quickStart.title": { + "message": "ビルドの準備はできましたか?", + "description": "Homepage quick start title" + }, + "homepage.quickStart.description": { + "message": "ウォレットを設定し、テストネットトークンを取得して、数分で最初のコントラクトをデプロイしましょう", + "description": "Homepage quick start description" + }, + "homepage.quickStart.button": { + "message": "クイックスタート", + "description": "Homepage quick start button label" + }, + "homepage.community.sectionTitle": { + "message": "コミュニティ", + "description": "Homepage community section title" + }, + "homepage.community.sectionSubtitle": { + "message": "Status Network コミュニティの最新情報をチェックしましょう", + "description": "Homepage community section subtitle" + }, + "homepage.community.telegram.title": { + "message": "Telegram に参加", + "description": "Homepage community card title for Telegram" + }, + "homepage.community.telegram.description": { + "message": "他の Status Network ビルダーと交流し、サポートを受けましょう", + "description": "Homepage community card description for Telegram" + }, + "homepage.community.github.title": { + "message": "GitHub で見る", + "description": "Homepage community card title for GitHub" + }, + "homepage.community.github.description": { + "message": "ソースコードを確認し、エコシステムに貢献しましょう", + "description": "Homepage community card description for GitHub" + }, + "homepage.community.official.title": { + "message": "公式リンク", + "description": "Homepage community card title for official links" + }, + "homepage.community.official.description": { + "message": "ウェブサイト、ソーシャルチャンネル、すべての公式リソースを一か所に", + "description": "Homepage community card description for official links" + }, + "ideaCatalog.filter.category": { + "message": "カテゴリ", + "description": "Filter group label" + }, + "ideaCatalog.filter.statusPrimitives": { + "message": "Status固有機能", + "description": "Filter group label" + }, + "ideaCatalog.filter.builderProfile": { + "message": "ビルダープロフィール", + "description": "Filter group label" + }, + "ideaCatalog.filter.difficulty": { + "message": "難易度", + "description": "Filter group label" + }, + "ideaCatalog.filter.fewerFilters": { + "message": "フィルターを閉じる", + "description": "Toggle button label" + }, + "ideaCatalog.filter.moreFilters": { + "message": "フィルターをもっと見る", + "description": "Toggle button label" + }, + "ideaCatalog.filter.domainExpertise": { + "message": "ドメイン専門性", + "description": "Filter group label" + }, + "ideaCatalog.filter.userSegment": { + "message": "ユーザーセグメント", + "description": "Filter group label" + }, + "ideaCatalog.filter.capitalRequirement": { + "message": "資本要件", + "description": "Filter group label" + }, + "ideaCatalog.status.showing": { + "message": "{totalCount}件中{visibleCount}件を表示", + "description": "Status text" + }, + "ideaCatalog.status.clearAll": { + "message": "すべてクリア", + "description": "Clear all filters button" + }, + "ideaCatalog.card.whyStatus": { + "message": "Why Status:", + "description": "Card detail label" + }, + "ideaCatalog.card.mvpScope": { + "message": "MVPスコープ:", + "description": "Card detail label" + }, + "ideaCatalog.card.security": { + "message": "セキュリティ", + "description": "Card meta badge label" + }, + "ideaCatalog.card.opsBurden": { + "message": "運用負担", + "description": "Card meta badge label" + }, + "ideaCatalog.empty.message": { + "message": "現在のフィルターに一致するアイデアはありません。", + "description": "Empty state message" + }, + "ideaCatalog.empty.clearAll": { + "message": "すべてのフィルターをクリア", + "description": "Empty state clear button" + }, + "ideaCatalog.securityCriticality.low": { + "message": "低", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.medium": { + "message": "中", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.high": { + "message": "高", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.critical": { + "message": "重大", + "description": "Security criticality label" + }, + "ideaCatalog.opsBurden.low": { + "message": "低", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.medium": { + "message": "中", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.high": { + "message": "高", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.veryHigh": { + "message": "非常に高い", + "description": "Ops burden label" + }, + "ideaCatalog.category.reputation": { + "message": "レピュテーション", + "description": "Category label" + }, + "ideaCatalog.category.privacy": { + "message": "プライバシー", + "description": "Category label" + }, + "ideaCatalog.category.social": { + "message": "ソーシャル", + "description": "Category label" + }, + "ideaCatalog.category.games": { + "message": "ゲーム", + "description": "Category label" + }, + "ideaCatalog.category.defi": { + "message": "DeFi", + "description": "Category label" + }, + "ideaCatalog.statusPrimitive.gasless": { + "message": "ガスレス", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.reputation": { + "message": "評判", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.privacy": { + "message": "プライバシー", + "description": "Status primitive label" + }, + "ideaCatalog.builderProfile.frontendDev": { + "message": "Web / アプリ開発", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.contractDev": { + "message": "スマートコントラクト開発", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.fullStack": { + "message": "フルスタック", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.protocolDev": { + "message": "プロトコル / 暗号学", + "description": "Builder profile label" + }, + "ideaCatalog.difficulty.lowMed": { + "message": "低〜中", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.med": { + "message": "中", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.medHigh": { + "message": "中〜高", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.high": { + "message": "高", + "description": "Difficulty label" + }, + "ideaCatalog.userSegment.consumer": { + "message": "コンシューマー", + "description": "User segment label" + }, + "ideaCatalog.userSegment.communityCreator": { + "message": "コミュニティ/クリエイター", + "description": "User segment label" + }, + "ideaCatalog.userSegment.daoOrgOps": { + "message": "DAO/組織運営", + "description": "User segment label" + }, + "ideaCatalog.userSegment.traderDefi": { + "message": "トレーダー/DeFi", + "description": "User segment label" + }, + "ideaCatalog.domainExpertise.communityDesign": { + "message": "コミュニティデザイン", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.defiMechanisms": { + "message": "DeFiメカニズム", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.privacy": { + "message": "プライバシー", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.paymentsFinops": { + "message": "決済/FinOps", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.consumerProduct": { + "message": "コンシューマープロダクト", + "description": "Domain expertise label" + }, + "ideaCatalog.capitalReq.none": { + "message": "不要", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.operatingTreasury": { + "message": "運用資金", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.seedLiquidity": { + "message": "シード流動性", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.deepLiquidity": { + "message": "深い流動性", + "description": "Capital requirement label" + }, + "ideaCatalog.idea.karmaGatedAccess.title": { + "message": "Karmaゲート付きコンテンツフィード", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaGatedAccess.what": { + "message": "クリエイターが最小Karmaティアを満たすフォロワーにのみ表示される投稿を公開するソーシャルフィード。Substackとオンチェーンレピュテーションの融合。", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaGatedAccess.whyStatus": { + "message": "Karmaティアはオンチェーンで解決されるため、アクセス制御はトラストレス。サブスクリプション課金なし、プラットフォームロックインなし、Sybil耐性を設計。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaGatedAccess.mvp": { + "message": "公開+ゲート付き投稿のあるフィード、ティアチェックミドルウェア(オプションでオンチェーン)、Karmaティア別のオーディエンス内訳を表示するクリエイターダッシュボード。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.title": { + "message": "Karmaブースト付きイールドボールト", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.what": { + "message": "より高いKarmaティアの預金者がブーストされたAPYを受け取るDeFiボールト。初期サポーターとアクティブ参加者がより良いリターンを得る。", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.whyStatus": { + "message": "ネイティブレピュテーショングラフにより、ボールトはトークン加重投票やオフチェーンの許可リストではなく、実証済みの参加度に基づいて報酬を配分できる。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.mvp": { + "message": "2つのイールドティアを持つ単一資産ボールト、預金時のオンチェーンKarmaティア検索、ティア別の実効APYを表示するダッシュボード。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaIncentiveMarket.title": { + "message": "Karmaバウンティボード", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaIncentiveMarket.what": { + "message": "Karma閾値を超えるユーザーのみがタスクを申請できるバウンティマーケットプレイス。プロジェクトチームが作業(バグ報告、翻訳、オンボーディングガイド)を投稿し、認証された貢献者に報酬を支払う。", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaIncentiveMarket.whyStatus": { + "message": "Karmaゲートによりスパムボットや低品質の提出を排除し、バウンティ発行者は申請者がネットワークに実際の実績を持つことを信頼できる。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaIncentiveMarket.mvp": { + "message": "バウンティ一覧ページ、Karmaゲート付き申請フロー、提出物レビューパネル、承認時のオンチェーン支払い。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaDynamicPricing.title": { + "message": "Karmaティア付きNFTマーケットプレイス", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaDynamicPricing.what": { + "message": "出品者・購入者のKarmaティアに基づいて出品手数料、ロイヤリティ、先行アクセス期間が調整されるNFTマーケットプレイス。信頼された参加者には自動的に有利な条件が適用される。", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaDynamicPricing.whyStatus": { + "message": "チェックアウト時のオンチェーン tier resolution により、動的価格設定がトラストレスに適用される。クーポンコードもバックエンド許可リストも不要。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaDynamicPricing.mvp": { + "message": "NFT出品+購入フロー(ティア付き手数料スケジュール)、チェックアウト時のオンチェーン tier check、購入者ティア別の売上を表示する出品者分析。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.stealthAddressPayments.title": { + "message": "ステルスアドレス決済", + "description": "Idea title" + }, + "ideaCatalog.idea.stealthAddressPayments.what": { + "message": "リンク不可能な支出パスを持つ使い捨て受信アドレス。", + "description": "Idea what" + }, + "ideaCatalog.idea.stealthAddressPayments.whyStatus": { + "message": "プライバシープリミティブ+低摩擦トランザクションUX。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.stealthAddressPayments.mvp": { + "message": "アドレス生成、受信フロー、プライベート支出フロー。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privatePayroll.title": { + "message": "プライベート給与・貯蓄", + "description": "Idea title" + }, + "ideaCatalog.idea.privatePayroll.what": { + "message": "残高と受取人を公開しない給与・貯蓄レール。", + "description": "Idea what" + }, + "ideaCatalog.idea.privatePayroll.whyStatus": { + "message": "公開台帳が期待に応えられない現実世界のニーズ。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privatePayroll.mvp": { + "message": "雇用主支払いバッチ+受取人請求+シールド付きボールト。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.shieldedMicrotransactions.title": { + "message": "シールド付きマイクロ決済 / カードレイヤー", + "description": "Idea title" + }, + "ideaCatalog.idea.shieldedMicrotransactions.what": { + "message": "金額・参加者を隠した低額決済とサブスクリプション。", + "description": "Idea what" + }, + "ideaCatalog.idea.shieldedMicrotransactions.whyStatus": { + "message": "Gasless相互作用により頻繁な決済が実現可能。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.shieldedMicrotransactions.mvp": { + "message": "定期認証付きプライベートチップ/サブスクリプションフロー。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privateLending.title": { + "message": "プライベート貸借", + "description": "Idea title" + }, + "ideaCatalog.idea.privateLending.what": { + "message": "公開ポジション漏洩を避ける借入・貸出フロー。", + "description": "Idea what" + }, + "ideaCatalog.idea.privateLending.whyStatus": { + "message": "プライバシー+Karmaベースの信頼シグナル。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privateLending.mvp": { + "message": "1種類の担保、1種類の借入資産、プライベートヘルスチェック。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privateMultisig.title": { + "message": "プライベート多重署名", + "description": "Idea title" + }, + "ideaCatalog.idea.privateMultisig.what": { + "message": "署名者、閾値、取引詳細が隠蔽される多重署名機能。", + "description": "Idea what" + }, + "ideaCatalog.idea.privateMultisig.whyStatus": { + "message": "プライバシー重視の組織でもオンチェーンで運営可能。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privateMultisig.mvp": { + "message": "ポリシー設定+署名フロー+選択的開示付き実行ログ。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.socialMiniApp.title": { + "message": "Gaslessマイクロブログプラットフォーム", + "description": "Idea title" + }, + "ideaCatalog.idea.socialMiniApp.what": { + "message": "すべての投稿、返信、いいねがユーザーに無料のオンチェーンアクションとなるTwitter風マイクロブログ。Karmaバッジで信頼された声を可視化。", + "description": "Idea what" + }, + "ideaCatalog.idea.socialMiniApp.whyStatus": { + "message": "Gaslessトランザクションにより投稿・アクションごとの経済が実現可能。Karmaバッジは任意の青チェックシステムを、実際のネットワーク参加に基づくレピュテーションに置き換える。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.socialMiniApp.mvp": { + "message": "タイムライン、投稿/返信/いいねアクション、Karma信頼バッジ付きユーザープロフィール、基本コンテンツモデレーション。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.creatorEconomyToolkit.title": { + "message": "ファンパスプラットフォーム", + "description": "Idea title" + }, + "ideaCatalog.idea.creatorEconomyToolkit.what": { + "message": "クリエイターが限定コンテンツ、グループチャット、IRLイベントアクセスをアンロックする無料デジタルパスをミントするプラットフォーム。ファンはGaslessでパスを収集。", + "description": "Idea what" + }, + "ideaCatalog.idea.creatorEconomyToolkit.whyStatus": { + "message": "ゼロコストのミントと請求により、コミュニティパスからのペイウォール摩擦を排除。クリエイターはファンにガス代を払わせることなくオーディエンスを拡大できる。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.creatorEconomyToolkit.mvp": { + "message": "パスミント付きクリエイターページ、ファン請求フロー、パスゲート付きコンテンツセクション、パス検証によるイベントチェックイン。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.communityGovernance.title": { + "message": "DAO提案・Karma加重投票アプリ", + "description": "Idea title" + }, + "ideaCatalog.idea.communityGovernance.what": { + "message": "コミュニティメンバーが提案を提出し、Karmaティアに比例した重みで投票するガバナンスアプリ。アクティブな貢献者は受動的なホルダーより大きな声を持つ。", + "description": "Idea what" + }, + "ideaCatalog.idea.communityGovernance.whyStatus": { + "message": "Karma加重投票はトークン蓄積ではなく実際の参加を報酬。Gasless投票はほとんどのDAOで投票率を抑えるコスト障壁を除去。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.communityGovernance.mvp": { + "message": "提案提出フォーム、オンチェーン集計付きKarma加重投票、ティア別参加内訳付き結果ダッシュボード。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.onchainStrategyGame.title": { + "message": "フォグオブウォー征服ゲーム", + "description": "Idea title" + }, + "ideaCatalog.idea.onchainStrategyGame.what": { + "message": "部隊の位置がプライベートステートで隠され、すべての移動がGaslessオンチェーントランザクションとなる六角グリッド領土争奪ゲーム。Riskボードゲームに本物のオンチェーンフォグオブウォーを融合。", + "description": "Idea what" + }, + "ideaCatalog.idea.onchainStrategyGame.whyStatus": { + "message": "プライバシープリミティブにより真の隠蔽情報(クライアントサイドのフォグのみではない)を実現。Gasless移動により戦略ゲームの迅速な往来が経済的に可能に。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.onchainStrategyGame.mvp": { + "message": "フォグオブウォー付き六角マップ、1種類のユニット、プライベート部隊配置、ターン解決、マッチリーダーボード。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.predictionMarket.title": { + "message": "予測市場", + "description": "Idea title" + }, + "ideaCatalog.idea.predictionMarket.what": { + "message": "低摩擦のエントリーとプライベート参加者ポジションを持つ市場。", + "description": "Idea what" + }, + "ideaCatalog.idea.predictionMarket.whyStatus": { + "message": "より良い市場参加とコピートレード行動の減少。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.predictionMarket.mvp": { + "message": "市場作成+ポジションエントリー+決済+基本分析。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.nativeDexCompanion.title": { + "message": "Karmaティア付きスワップルーター", + "description": "Idea title" + }, + "ideaCatalog.idea.nativeDexCompanion.what": { + "message": "最良のオンチェーンプールを経由して取引をルーティングし、高Karmaユーザーに手数料削減と優先実行を提供するスワップインターフェース。DEXレイヤーに組み込まれたロイヤルティプログラム。", + "description": "Idea what" + }, + "ideaCatalog.idea.nativeDexCompanion.whyStatus": { + "message": "Karmaティアによりルーターがトラストレスに手数料割引を提供。ネイティブ流動性との緊密な統合により、外部アグリゲーターの依存なしでより良いレートを実現。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.nativeDexCompanion.mvp": { + "message": "ティア付き手数料表示付きトークンスワップUI、Karma対応ルーティングロジック、LPポジションパネル、ティア別の節約手数料を表示する取引履歴。", + "description": "Idea mvp" + }, + "ideaCatalog.idea.publicFundingInterface.title": { + "message": "パブリックファンディングインターフェース", + "description": "Idea title" + }, + "ideaCatalog.idea.publicFundingInterface.what": { + "message": "エンドツーエンドのgrant発見、提案、投票、追跡ダッシュボード。", + "description": "Idea what" + }, + "ideaCatalog.idea.publicFundingInterface.whyStatus": { + "message": "エコシステム成長フライホイールを直接支援。", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.publicFundingInterface.mvp": { + "message": "提案ボード+投票画面+grant進捗トラッカー。", + "description": "Idea mvp" } } diff --git a/i18n/ja/docusaurus-plugin-content-docs/current.json b/i18n/ja/docusaurus-plugin-content-docs/current.json index a08623d..8d4a693 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current.json +++ b/i18n/ja/docusaurus-plugin-content-docs/current.json @@ -3,148 +3,176 @@ "message": "Next", "description": "The label for version current" }, - "sidebar.tutorialSidebar.category.INTRODUCTION": { + "sidebar.homeSidebar.category.INTRODUCTION": { "message": "はじめに", - "description": "The label for category INTRODUCTION in sidebar tutorialSidebar" + "description": "The label for category INTRODUCTION in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOKENOMICS": { + "sidebar.homeSidebar.category.TOKENOMICS": { "message": "トークノミクス", - "description": "The label for category TOKENOMICS in sidebar tutorialSidebar" + "description": "The label for category TOKENOMICS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.GENERAL INFO": { + "sidebar.homeSidebar.category.GENERAL INFO": { "message": "一般情報", - "description": "The label for category GENERAL INFO in sidebar tutorialSidebar" + "description": "The label for category GENERAL INFO in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🏡 Contract Addresses": { + "sidebar.homeSidebar.category.🏡 Contract Addresses": { "message": "🏡 コントラクトアドレス", - "description": "The label for category 🏡 Contract Addresses in sidebar tutorialSidebar" + "description": "The label for category 🏡 Contract Addresses in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🌉 Bridge": { + "sidebar.homeSidebar.category.🌉 Bridge": { "message": "🌉 ブリッジ", - "description": "The label for category 🌉 Bridge in sidebar tutorialSidebar" + "description": "The label for category 🌉 Bridge in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOOLS": { - "message": "ツール", - "description": "The label for category TOOLS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.TUTORIALS": { - "message": "チュートリアル", - "description": "The label for category TUTORIALS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.🚀 Deploying a Smart Contract": { - "message": "🚀 スマートコントラクトのデプロイ", - "description": "The label for category 🚀 Deploying a Smart Contract in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.OTHER DOCS": { + "sidebar.homeSidebar.category.OTHER DOCS": { "message": "その他のドキュメント", - "description": "The label for category OTHER DOCS in sidebar tutorialSidebar" + "description": "The label for category OTHER DOCS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🏠 Home": { - "message": "🏠 ホーム", - "description": "The label for the doc item 🏠 Home in sidebar tutorialSidebar, linking to the doc index" + "sidebar.homeSidebar.doc.🌴 Home": { + "message": "🌴 ホーム", + "description": "The label for the doc item 🌴 Home in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.⚡ Quick Start": { + "sidebar.homeSidebar.doc.⚡ Quick Start": { "message": "⚡ クイックスタート", - "description": "The label for the doc item ⚡ Quick Start in sidebar tutorialSidebar" + "description": "The label for the doc item ⚡ Quick Start in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Token": { - "message": "💎 SNT Token", - "description": "The label for the doc item 💎 SNT Token in sidebar tutorialSidebar, linking to the doc tokenomics/snt-token" - }, - "sidebar.tutorialSidebar.doc.💠 Karma Token": { - "message": "💠 Karma Token", - "description": "The label for the doc item 💠 Karma Token in sidebar tutorialSidebar, linking to the doc tokenomics/karma-token" - }, - "sidebar.tutorialSidebar.doc.🌐 Network Details": { - "message": "🌐 ネットワーク詳細", - "description": "The label for the doc item 🌐 Network Details in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.➕ Add Status Network": { - "message": "➕ Status ネットワークの追加", - "description": "The label for the doc item ➕ Add Status Network in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.💰 Tokens": { - "message": "💰 トークン", - "description": "The label for the doc item 💰 Tokens in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Testnet Contracts": { - "message": "🧪 テストネットコントラクト", - "description": "The label for the doc item 🧪 Testnet Contracts in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Bridging Testnet": { - "message": "🧪 テストネットブリッジ", - "description": "The label for the doc item 🧪 Bridging Testnet in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔌 RPC": { - "message": "🔌 RPC", - "description": "The label for the doc item 🔌 RPC in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌉 Bridge": { - "message": "🌉 ブリッジ", - "description": "The label for the doc item 🌉 Bridge in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🚰 Testnet Faucets": { - "message": "🚰 テストネットフォーセット", - "description": "The label for the doc item 🚰 Testnet Faucets in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔎 Block Explorers": { - "message": "🔎 ブロックエクスプローラー", - "description": "The label for the doc item 🔎 Block Explorers in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎩 Using Hardhat": { - "message": "🎩 Hardhatの使用", - "description": "The label for the doc item 🎩 Using Hardhat in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.⚒️ Using Foundry": { - "message": "⚒️ Foundryの使用", - "description": "The label for the doc item ⚒️ Using Foundry in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎛️ Using Remix": { - "message": "🎛️ Remixの使用", - "description": "The label for the doc item 🎛️ Using Remix in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🏗 Using Scaffold-ETH 2": { - "message": "🏗 Scaffold-ETH 2 使用", - "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔗 Official Links": { - "message": "🔗 公式リンク", - "description": "The label for the doc item 🔗 Official Links in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌴 Home": { - "message": "🌴 Home", - "description": "The label for the doc item 🌴 Home in sidebar tutorialSidebar, linking to the doc index" - }, - "sidebar.tutorialSidebar.doc.🤝 Economic Model": { + "sidebar.homeSidebar.doc.🤝 Economic Model": { "message": "🤝 経済モデル", - "description": "The label for the doc item 🤝 Economic Model in sidebar tutorialSidebar" + "description": "The label for the doc item 🤝 Economic Model in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Public Funding": { + "sidebar.homeSidebar.doc.💰 Public Funding": { "message": "💰 公募資金", - "description": "The label for the doc item 💰 Public Funding in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Public Funding in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🐉 Karmic Tokenomics": { + "sidebar.homeSidebar.doc.🐉 Karmic Tokenomics": { "message": "🐉 カルミックトークノミクス", - "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar tutorialSidebar" + "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Staking": { + "sidebar.homeSidebar.doc.💎 SNT Staking": { "message": "💎 SNTステーキング", - "description": "The label for the doc item 💎 SNT Staking in sidebar tutorialSidebar" + "description": "The label for the doc item 💎 SNT Staking in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposits": { + "sidebar.homeSidebar.doc.💰 Pre-Deposits": { "message": "💰 事前預入", - "description": "The label for the doc item 💰 Pre-Deposits in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Pre-Deposits in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🪙 Tokens": { + "sidebar.homeSidebar.doc.🌐 Network Details": { + "message": "🌐 ネットワーク詳細", + "description": "The label for the doc item 🌐 Network Details in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.⛽ Gasless Transactions": { + "message": "⛽ ガスレストランザクション", + "description": "The label for the doc item ⛽ Gasless Transactions in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.➕ Add Status Network": { + "message": "➕ Status ネットワークの追加", + "description": "The label for the doc item ➕ Add Status Network in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🪙 Tokens": { "message": "🪙 トークン", - "description": "The label for the doc item 🪙 Tokens in sidebar tutorialSidebar" + "description": "The label for the doc item 🪙 Tokens in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposit Vault Contracts": { + "sidebar.homeSidebar.doc.🧪 Testnet Contracts": { + "message": "🧪 テストネットコントラクト", + "description": "The label for the doc item 🧪 Testnet Contracts in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.💰 Pre-Deposit Vault Contracts": { "message": "💰 プリ・デポジット金庫コントラクト", - "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🌐 Running an RPC node": { + "sidebar.homeSidebar.doc.🧪 Bridging Testnet": { + "message": "🧪 テストネットブリッジ", + "description": "The label for the doc item 🧪 Bridging Testnet in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🔗 Official Links": { + "message": "🔗 公式リンク", + "description": "The label for the doc item 🔗 Official Links in sidebar homeSidebar" + }, + "sidebar.buildForKarmaSidebar.category.BUILD FOR KARMA": { + "message": "Karma開発", + "description": "The label for category BUILD FOR KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🌟 Why Status Network": { + "message": "🌟 なぜStatus Networkか", + "description": "The label for the doc item 🌟 Why Status Network in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.💡 What to Build": { + "message": "💡 アイデアカタログ", + "description": "The label for the doc item 💡 What to Build in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.USING KARMA": { + "message": "Karmaを使う", + "description": "The label for category USING KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⛽ Gasless Integration": { + "message": "⛽ ガスレス統合", + "description": "The label for the doc item ⛽ Gasless Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🔰 Reputation Integration": { + "message": "🔰 レピュテーション統合", + "description": "The label for the doc item 🔰 Reputation Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.DEPLOYING CONTRACTS": { + "message": "コントラクトのデプロイ", + "description": "The label for category DEPLOYING CONTRACTS in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎩 Using Hardhat": { + "message": "🎩 Hardhatの使用", + "description": "The label for the doc item 🎩 Using Hardhat in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⚒️ Using Foundry": { + "message": "⚒️ Foundryの使用", + "description": "The label for the doc item ⚒️ Using Foundry in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎛️ Using Remix": { + "message": "🎛️ Remixの使用", + "description": "The label for the doc item 🎛️ Using Remix in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🏗 Using Scaffold-ETH 2": { + "message": "🏗 Scaffold-ETH 2 使用", + "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar buildForKarmaSidebar" + }, + "sidebar.toolsSidebar.category.TOOLS": { + "message": "ツール", + "description": "The label for category TOOLS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.CORE INFRASTRUCTURE": { + "message": "コアインフラストラクチャ", + "description": "The label for category CORE INFRASTRUCTURE in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.📡 RPC Endpoints": { + "message": "📡 RPCエンドポイント", + "description": "The label for the doc item 📡 RPC Endpoints in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌉 Bridge": { + "message": "🌉 ブリッジ", + "description": "The label for the doc item 🌉 Bridge in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🚰 Testnet Faucets": { + "message": "🚰 テストネットフォーセット", + "description": "The label for the doc item 🚰 Testnet Faucets in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔎 Block Explorers": { + "message": "🔎 ブロックエクスプローラー", + "description": "The label for the doc item 🔎 Block Explorers in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.RPC": { + "message": "RPC", + "description": "The label for category RPC in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔌 JSON-RPC API": { + "message": "🔌 JSON-RPC API", + "description": "The label for the doc item 🔌 JSON-RPC API in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌐 Running an RPC Node": { "message": "🌐 RPCノードの運用", - "description": "The label for the doc item 🌐 Running an RPC node in sidebar tutorialSidebar" + "description": "The label for the doc item 🌐 Running an RPC Node in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.PARTNERS": { + "message": "パートナー", + "description": "The label for category PARTNERS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🤝 Infrastructure Partners": { + "message": "🤝 インフラパートナー", + "description": "The label for the doc item 🤝 Infrastructure Partners in sidebar toolsSidebar" } } diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md new file mode 100644 index 0000000..263b598 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md @@ -0,0 +1,72 @@ +--- +id: deploying-contracts-index +title: 最初のコントラクトをデプロイする +description: Status Networkでスマートコントラクトを稼働させるためのデプロイツールを選択してください。Hardhat、Foundry、Remix、Scaffold-ETH 2のガイドがあります。 +keywords: [deploy smart contract, Status Network, Hardhat, Foundry, Remix, Scaffold-ETH 2, blockchain deployment, EVM] +slug: /build-for-karma/deploying-contracts +sidebar_position: 1 +--- + +Status Networkは完全なEVM互換なので、標準的なイーサリアムツールチェーンを使ってコントラクトをデプロイできます。ワークフローに合ったツールを選び、ステップバイステップのガイドに従ってテストネットに最初のコントラクトをデプロイしましょう。 + +:::tip 開始前に +[ウォレットにStatus Networkを追加](/overview/general-info/add-status-network)し、[テストネットETH](/tools/core-infrastructure/testnet-faucets)を入手しておいてください。 +::: + +## デプロイツールを選ぶ + +
+ + +
🎩
+
+

Hardhat

+

Solidityコントラクトのコンパイル、テスト、デプロイのための業界標準の開発環境。Hardhat IgnitionとTypeScriptサポート付き。

+ TypeScript · テスト · Ignition +
+
+ + +
⚒️
+
+

Foundry

+

Rustベースの高速スマートコントラクト開発ツールキット。Solidityでテストを書き、Castでコントラクトとやり取り。

+ Solidityテスト · Cast · 高速ビルド +
+
+ + +
🎛️
+
+

Remix IDE

+

ゼロセットアップのブラウザベースIDE。クイックプロトタイピング、学習、ローカルツールなしでのシンプルなコントラクトのデプロイに最適。

+ ブラウザベース · セットアップ不要 · 初心者向け +
+
+ + +
🏗️
+
+

Scaffold-ETH 2

+

Status Network拡張がプリ設定されたフルスタックスターターキット。NextJSフロントエンド、コントラクトのホットリロード、HardhatとFoundryの両方に対応。

+ フルスタック · NextJS · ホットリロード +
+
+ +
+ +## どれを選べばいいか迷っている場合 + +| ツール | 最適な用途 | 必要なセットアップ | +|---|---|---| +| **Hardhat** | 複雑なテストとデプロイパイプラインを持つ本番プロジェクト | Node.js + npm | +| **Foundry** | Solidityネイティブのテストと高速コンパイルを好む開発者 | Rustツールチェーン | +| **Remix** | クイック実験、学習、シンプルな単発デプロイ | 不要(ブラウザ) | +| **Scaffold-ETH 2** | 初日からフロントエンドが必要なフルスタックdApp | Node.js + npm | + +## デプロイ後 + +コントラクトが稼働したら、次のステップは以下の通りです: + +- [ガスレス取引の統合](/build-for-karma/guides/gasless-integration) — Karmaを通じてユーザーがガス代を支払わずに済む +- [レピュテーション統合ガイドを読む](/build-for-karma/guides/reputation-integration) — Karmaを使ったレピュテーション対応機能の構築 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md similarity index 97% rename from i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md rename to i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md index 60e3d18..dd9886d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md @@ -9,7 +9,7 @@ - **Foundry**: [公式Foundryブック](https://book.getfoundry.sh/getting-started/installation)からインストール - **Ethereumウォレット**: Status Networkテストネット用のプライベートキー - **テストネットETH**: Status NetworkテストネットのETHが必要です - - Status NetworkテストネットのETHは[フォーセット](/tools/testnet-faucets)から入手できます + - Status NetworkテストネットのETHは[フォーセット](/tools/core-infrastructure/testnet-faucets)から入手できます - **基本知識**: Solidityとコマンドラインの基礎知識 ## 達成目標 @@ -200,7 +200,7 @@ forge test 問題が発生した場合: - [Telegramコミュニティ](https://t.me/statusl2)に参加 -- [ネットワーク詳細](/general-info/network-details)を参照 +- [ネットワーク詳細](/overview/general-info/network-details)を参照 ## 追加リソース diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md similarity index 96% rename from i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md rename to i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md index d69f45f..7666ce8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md @@ -9,7 +9,7 @@ - **Node.jsとnpm**: [公式Node.jsウェブサイト](https://nodejs.org/)からダウンロードしてインストール - **Ethereumウォレット**: Status Networkテストネット用のプライベートキーを持つMetaMaskまたは他のウォレット - **テストネットETH**: Status NetworkテストネットのETHが必要です - - Status NetworkテストネットのETHは[フォーセット](/tools/testnet-faucets)から入手できます + - Status NetworkテストネットのETHは[フォーセット](/tools/core-infrastructure/testnet-faucets)から入手できます - **基本知識**: Solidity、Hardhat、コマンドラインの基礎知識 ## 達成目標 @@ -158,4 +158,4 @@ npx hardhat run scripts/interact.ts --network statusTestnet 問題が発生した場合: - [Telegramコミュニティ](https://t.me/statusl2)に参加 -- [ネットワーク詳細](/general-info/network-details)を参照 +- [ネットワーク詳細](/overview/general-info/network-details)を参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md similarity index 93% rename from i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md rename to i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md index 2da05d1..a9523f0 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md @@ -9,8 +9,8 @@ - **Webブラウザ**: ChromeやFirefoxなどの最新のブラウザ - **MetaMask**: [MetaMask](https://metamask.io)ブラウザ拡張機能をインストール - **テストネットETH**: Status NetworkテストネットのETHが必要です - - Status NetworkテストネットのETHは[フォーセット](/tools/testnet-faucets)から入手できます -- **ネットワーク設定**: [ネットワーク追加ガイド](/general-info/add-status-network)に従ってMetaMaskにStatus Networkテストネットを追加 + - Status NetworkテストネットのETHは[フォーセット](/tools/core-infrastructure/testnet-faucets)から入手できます +- **ネットワーク設定**: [ネットワーク追加ガイド](/overview/general-info/add-status-network)に従ってMetaMaskにStatus Networkテストネットを追加 ## 手順 @@ -91,7 +91,7 @@ contract HelloWorld { 問題が発生した場合: - [Telegramコミュニティ](https://t.me/statusl2)に参加 -- [ネットワーク詳細](/general-info/network-details)を参照 +- [ネットワーク詳細](/overview/general-info/network-details)を参照 ## 追加リソース diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md similarity index 94% rename from i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md rename to i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md index 5c34ddd..76379dc 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md @@ -14,7 +14,7 @@ keywords: [Scaffold-ETH 2, スマートコントラクトデプロイ, Status Ne - **Foundry** (オプション): Foundryワークフローを選択する場合 - **Ethereumウォレット** (オプション): テスト用のEVMウォレットの秘密鍵ですが、持っていなくても問題ありません -> **注意**: Status Networkはガスレス取引をサポートしているため、テストネットETHはオプションです。それでもテストネットETHが必要な場合は、[Faucet](/tools/testnet-faucets)から取得してください。 +> **注意**: Status Networkはガスレス取引をサポートしているため、テストネットETHはオプションです。それでもテストネットETHが必要な場合は、[Faucet](/tools/core-infrastructure/testnet-faucets)から取得してください。 ## クイックスタート @@ -58,4 +58,4 @@ keywords: [Scaffold-ETH 2, スマートコントラクトデプロイ, Status Ne 詳細な設定オプション、トラブルシューティング、高度な使用方法については: - 包括的なドキュメントについては[拡張機能README](https://github.com/status-im/status-network-scaffold-extension)を確認 - [Telegramコミュニティ](https://t.me/statusl2)に参加してサポートを求める -- [ネットワーク詳細](/general-info/network-details)を表示 +- [ネットワーク詳細](/overview/general-info/network-details)を表示 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md new file mode 100644 index 0000000..b7740b9 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md @@ -0,0 +1,365 @@ +--- +title: ガスレス統合ガイド +description: Status Networkでガスレスなユーザー体験を構築するための実践的な統合ガイド。 +keywords: [gasless, linea_estimateGas, Status Network, deny list, builder, zero gas, UX] +slug: /build-for-karma/guides/gasless-integration +sidebar_position: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Status Networkはプロトコルレベルでガスレストランザクションを提供します。ペイマスターやリレイヤーは不要です。ビルダーとしての中心的なタスクは、送信者の状態に応じて手数料を正確に推定し表示することです。 + +:::important 基本ルール +トランザクションUXを準備する際、ガス手数料の信頼できるソースとして`linea_estimateGas` RPCメソッドを使用してください。 +::: + +その他のJSON-RPCメソッドのリファレンスについては、[JSON-RPC API](/tools/rpc/json-rpc)を参照してください。 + +## Karma対応の手数料推定 + +Lineaでは、[`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas)はすでにガス推定の推奨メソッドです。 +**1回の呼び出し**で`gasLimit`、`baseFeePerGas`、`priorityFeePerGas`を返し、手数料フィールドは圧縮されたトランザクションサイズ、L1検証コスト、L1/L2ガス価格比率を反映します — `eth_`名前空間のメソッドでは把握できない要素です。 + +Status Networkは`linea_estimateGas`をさらに拡張し、手数料フィールドに**Karma**システムを組み込んでいます。対象ユーザーの手数料がゼロに削減されたり、拒否リストに載ったユーザーの手数料が増加したりする場合があります。 + +```mermaid +flowchart TD + A[ユーザーがトランザクションを開始] --> B["fromパラメータ付きでlinea_estimateGasを呼び出し"] + B --> C{手数料の結果} + C -->|base+priority = 0| D[ガスレスUXを表示] + C -->|プレミアム手数料| F[プレミアム手数料UXを表示] + D --> G[トランザクションを送信] + F --> G +``` + +*図: `linea_estimateGas`を使用したガス推定フロー* + +これが、ビルダーがStatus Networkでトランザクションコストの推定やユーザー向けEIP-1559手数料フィールドの事前入力に`linea_estimateGas`を使用すべき理由です。 + +:::info 詳細 +Karmaとガス手数料およびトランザクション特権への影響に関する詳細な説明は、[カルミックトークノミクス](../../overview/tokenomics/karmic-tokenomics)ページを参照してください。 + +ガスレスシステムの実装と適用方法の技術的な詳細は、[ガスレストランザクション](../../overview/general-info/gasless-transactions)ドキュメントを参照してください。 +::: + +## `linea_estimateGas`のリクエスト/レスポンス形式 + +### リクエスト + +`linea_estimateGas`は`eth_estimateGas`と**同じトランザクション呼び出しオブジェクト**を受け取ります。 +`gasLimit`(`eth_estimateGas`と同じEVM実行ロジックを使用)と、LineaのL2固有の価格設定とStatus NetworkのKarmaルールの両方を反映した手数料フィールドを、単一のレスポンスで返します。 + +:::important +**必ず`from`を含めてください。** これがないと、ノードはKarma/クォータ/拒否リストのロジックを適用できません。 +::: + +### レスポンス + +`linea_estimateGas`は以下を含むオブジェクトを返します: + +- `gasLimit`: 16進数 - EVM実行のための推定ガスユニット(`eth_estimateGas`と同じ計算) +- `baseFeePerGas`: 16進数 - Status NetworkのKarmaルールを反映した次のブロックの基本手数料 +- `priorityFeePerGas`: 16進数 - Status NetworkのKarmaルールを反映した推奨優先手数料 + +これらの手数料フィールドは、`eth_gasPrice`、`eth_maxPriorityFeePerGas`、`eth_feeHistory`などの`eth_`名前空間の呼び出しが返す値とは大きく異なる場合があります。これらはLineaのL2固有の価格設定やStatus NetworkのKarma調整を認識していません。 + + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "gasLimit": "0x5208", + "baseFeePerGas": "0x0", + "priorityFeePerGas": "0x0" + } +} +``` + + + + +標準EVMフローでは、ガスリミットと手数料データを収集するために複数の`eth_`呼び出しが必要です: + +**eth_estimateGas** + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5208" +} +``` + +**eth_maxPriorityFeePerGas** + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": "0x59682f00" +} +``` + +**eth_getBlockByNumber** + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "number": ..., + "baseFeePerGas": "0x3b9aca00", + ... + } +} +``` + + + + + +## 移行ガイド: 複数の`eth_`呼び出しから`linea_estimateGas`へ + +このセクションでは、一般的な「複数の`eth_`呼び出しによるEIP-1559」フローから単一の`linea_estimateGas`呼び出しへの移行方法を説明します。Status Networkでより正確なL2固有の手数料データとKarma対応の価格設定を提供します。 + +### 移行前: `eth_`名前空間を使用したEVMチェーンでの一般的なEIP-1559推定フロー + +多くのEVMチェーンでは、一般的なEIP-1559推定フローは次のようになります: + +1. **ガスリミットの推定** — `eth_estimateGas` +2. **`maxPriorityFeePerGas`の取得** — `eth_maxPriorityFeePerGas`および/または`eth_feeHistory` +3. **`baseFeePerGas`の取得** — `eth_getBlockByNumber` +4. 以下を使用してEIP-1559トランザクションを構築: + - `gas` + - `maxPriorityFeePerGas` + - `maxFeePerGas`、通常は $2 \cdot \mathrm{baseFeePerGas} + \mathrm{maxPriorityFeePerGas}$ + + + + + +```bash +# 1) Gas limit (EVM execution) +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"eth_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_RPC_URL + +# 2) Fetch suggested tip amount +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":2,"method":"eth_maxPriorityFeePerGas","params":[]}' \ + https://YOUR_RPC_URL + +# 3) Fetch base fee +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":3,"method":"eth_getBlockByNumber","params":["pending",false]}' \ + https://YOUR_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const gas = await provider.estimateGas(call); +const maxPriorityFeePerGas = await provider.send('eth_maxPriorityFeePerGas', []); +const pendingBlock = await provider.getBlock('pending'); + +const baseFeePerGas = pendingBlock?.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + BigInt(maxPriorityFeePerGas); + +console.log({ + gas: `0x${gas.toString(16)}`, + maxPriorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_RPC_URL'), +}); + +const call = { + account: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const gas = await client.estimateGas(call); +const maxPriorityFeePerGas = await client.getMaxPriorityFeePerGas(); +const pendingBlock = await client.getBlock({ blockTag: 'pending' }); + +const baseFeePerGas = pendingBlock.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + maxPriorityFeePerGas; + +console.log({ + gas, + maxPriorityFeePerGas, + maxFeePerGas, +}); +``` + + + + + +### 移行後: `linea_estimateGas`を使用したStatus Networkのガス推定フロー + +Status Networkでは、`linea_estimateGas`から手数料の提案を取得する必要があります。正確な手数料推奨がKarmaに依存するためです: + +- アカウントが**ガスレス**トランザクションの対象になる可能性があります +- 拒否リストに載ったアカウントは**プレミアムガス手数料**を支払う必要がある場合があります + + + + + +```bash +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"linea_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_STATUS_NETWORK_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_STATUS_NETWORK_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await provider.send( + 'linea_estimateGas', + [call], +); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_STATUS_NETWORK_RPC_URL'), +}); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await client.request({ + method: 'linea_estimateGas', + params: [call], +}); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + + +:::tip ツールの統合 +多くのイーサリアムライブラリは内部的に`eth_estimateGas`を呼び出します(例: `provider.estimateGas(...)`)。Status Networkでは標準の`eth_`メソッドにはそれらのライブラリを引き続き使用しつつ、ユーザー向けのトランザクションパラメータを構築または表示する際は**ガスリミットと手数料フィールドを`linea_estimateGas`で明示的に取得してください**。 +::: + +## UIでの手数料シナリオの処理 + +### 1) ガスレス + +`baseFeePerGas`と`priorityFeePerGas`が両方ゼロの場合: + +- 明確な無料トランザクション状態を表示します。 +- 不要な手数料警告をスキップします。 + +### 2) プレミアム手数料 + +送信者が拒否リストに載っている場合(クォータ超過またはRLNポリシー): + +- 手数料の金額を表示し、クォータまたはスパムポリシーによりプレミアムガスが適用されることを説明します。 +- 送信者が手数料を支払うか、クォータ期間がリフレッシュされるまで待つことができることを明確にします。 +- トランザクションを可能に保ちます。完全にブロックしないでください。 + +## よくある落とし穴 + +| 落とし穴 | 対処法 | +|---|---| +| 手数料判定に`eth_`メソッドを使用(`eth_gasPrice`、`eth_maxPriorityFeePerGas`、`eth_feeHistory`) | `linea_estimateGas`を使用 | +| `linea_estimateGas`呼び出し時に`from`を省略 | Karma対応の推定を受け取るため、常に送信者アドレスを渡す | +| 手数料の前提をハードコーディング | 返された`baseFeePerGas`と`priorityFeePerGas`の値から手数料UIを構築 | +| すべてのユーザーがガスレスであると仮定 | ガスレス(手数料ゼロ)と拒否リスト(プレミアム手数料)の両方を処理 | +| リトライ時に推定値をキャッシュ | 送信時に近いタイミングで再推定 — 送信者のKarma状態は変更される可能性がある | + +## 次のステップ + +- [JSON-RPC API](/tools/rpc/json-rpc) +- [レピュテーション統合](/build-for-karma/guides/reputation-integration) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md new file mode 100644 index 0000000..1a1e286 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md @@ -0,0 +1,20 @@ +--- +title: Karmaを使う +description: Status NetworkでKarmaベースのガスレスUXとレピュテーション対応機能を統合するためのエントリーポイント。 +keywords: [Karma, gasless, reputation, integration, Status Network] +slug: /build-for-karma/guides +sidebar_position: 3 +--- + +KarmaはStatus Networkでガスレストランザクション特権とレピュテーションを提供します。 +このセクションでは、アプリにガスレス動作とティア対応のプロダクトロジックを統合する方法を説明します。 + +## はじめに + +**トランザクションを処理しますか?** + +- [ガスレス統合](/build-for-karma/guides/gasless-integration)から始めて、`linea_estimateGas`をガスレスとプレミアム手数料の判定における唯一の信頼できるソースとして使用してください。 + +**レピュテーションで機能を制限しますか?** + +- [レピュテーション統合](/build-for-karma/guides/reputation-integration)に進み、オンチェーンでKarma残高とティアを読み取り、コントラクトのゲーティングを行い、ティア対応のフロントエンドを設計する方法を学びましょう。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md new file mode 100644 index 0000000..d9109ac --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md @@ -0,0 +1,451 @@ +--- +title: レピュテーション統合ガイド +description: Status NetworkでKarmaティアを読み取り、レピュテーションで機能をゲーティングし、Karma対応のスマートコントラクトとフロントエンドを構築する方法。 +keywords: [Karma, integration, smart contract, soulbound token, reputation, tiers, gasless, Status Network, developer guide] +slug: /build-for-karma/guides/reputation-integration +sidebar_position: 4 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +KarmaはStatus Networkのソウルバウンドレピュテーショントークンです。すべてのアドレスは、SNTステーキング、アセットのブリッジ、流動性提供、アプリの使用、プレミアムガス手数料の支払いなど、ネットワークへの真正な参加を通じてKarmaを獲得します。Karmaは購入、売却、転送することができません。 + +このガイドでは、Karmaデータの読み取り方法と、ユーザーのレピュテーションティアに応じたアプリの構築方法を説明します。 + +## オンチェーンでのKarma読み取り + +Karmaの状態は2つのコントラクトに分かれています: + +- **Karma** — ソウルバウンドERC-20トークン。`balanceOf`はスラッシング後の純残高を返します。転送と承認は常にリバートします。 +- **KarmaTiers** — 残高をティアにマッピングします。`getTierIdByKarmaBalance(balance)`を呼び出してから`getTierById(tierId)`を呼び出し、ユーザーのティアとその`txPerEpoch`クォータを解決します。 + + + + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/// @notice Minimal interface for the Karma soulbound token. +interface IKarma { + /// @notice Net Karma balance of `account` after slashing. + function balanceOf(address account) external view returns (uint256); + + /// @notice Total amount slashed from `account` across all distributors. + function slashedAmountOf(address account) external view returns (uint256); +} + +/// @notice Minimal interface for the KarmaTiers registry. +interface IKarmaTiers { + struct Tier { + uint256 minKarma; + uint256 maxKarma; + string name; + uint32 txPerEpoch; // gasless transactions allowed per epoch + } + + /// @notice Returns the highest tier ID the given karma balance qualifies for. + function getTierIdByKarmaBalance(uint256 karmaBalance) external view returns (uint8); + + /// @notice Returns the full Tier struct for a given tier ID. + function getTierById(uint8 tierId) external view returns (Tier memory); + + /// @notice Returns the total number of configured tiers. + function getTierCount() external view returns (uint256); +} + +contract KarmaGated { + IKarma public karma; + IKarmaTiers public karmaTiers; + + constructor(address _karmaContract, address _karmaTiersContract) { + karma = IKarma(_karmaContract); + karmaTiers = IKarmaTiers(_karmaTiersContract); + } + + /// @notice Resolves the tier ID for `user` from their current Karma balance. + function tierIdOf(address user) public view returns (uint8) { + return karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + } + + modifier onlyTier(uint8 minTier) { + require(tierIdOf(msg.sender) >= minTier, "Karma tier too low"); + _; + } + + function premiumAction() external onlyTier(3) { + // Only users at tier 3 or above can call this + } + + function getDiscount(address user) external view returns (uint256) { + uint8 tierId = tierIdOf(user); + // Higher tiers get bigger discounts + return uint256(tierId) * 5; // 0%, 5%, 10%, ... + } +} +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider( + 'https://public.sepolia.rpc.status.network' +); + +const KARMA_ABI = [ + 'function balanceOf(address account) view returns (uint256)', + 'function slashedAmountOf(address account) view returns (uint256)', +]; + +const KARMA_TIERS_ABI = [ + 'function getTierIdByKarmaBalance(uint256 karmaBalance) view returns (uint8)', + 'function getTierById(uint8 tierId) view returns (tuple(uint256 minKarma, uint256 maxKarma, string name, uint32 txPerEpoch))', + 'function getTierCount() view returns (uint256)', +]; + +const karma = new ethers.Contract(KARMA_ADDRESS, KARMA_ABI, provider); +const karmaTiers = new ethers.Contract(KARMA_TIERS_ADDRESS, KARMA_TIERS_ABI, provider); + +// ユーザーのKarma残高を読み取り、ティアを解決 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +console.log(`Karma残高: ${ethers.formatEther(balance)} KARMA`); +console.log(`ティア: ${tier.name} (ID ${tierId})`); +console.log(`エポックあたりのTx: ${tier.txPerEpoch}`); +``` + + + + +```ts +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://public.sepolia.rpc.status.network'), +}); + +const karmaAbi = [ + { + name: 'balanceOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, + { + name: 'slashedAmountOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, +] as const; + +const karmaTiersAbi = [ + { + name: 'getTierIdByKarmaBalance', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'karmaBalance', type: 'uint256' }], + outputs: [{ name: '', type: 'uint8' }], + }, + { + name: 'getTierById', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'tierId', type: 'uint8' }], + outputs: [{ + name: 'tier', + type: 'tuple', + components: [ + { name: 'minKarma', type: 'uint256' }, + { name: 'maxKarma', type: 'uint256' }, + { name: 'name', type: 'string' }, + { name: 'txPerEpoch', type: 'uint32' }, + ], + }], + }, +] as const; + +// 2回の順次読み取り: 残高 → ティアID → ティア詳細 +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +console.log(`ティア: ${tier.name} (ID ${tierId})`); +console.log(`エポックあたりのTx: ${tier.txPerEpoch}`); +``` + + + + + +:::note コントラクトアドレス +KarmaとKarmaTiersのテストネットコントラクトアドレスは[コントラクトアドレス](/overview/general-info/contract-addresses/testnet-contracts)ページに掲載されています。 +::: + +## 考えられる統合パターン + +### 機能ゲーティング + +Karmaティアに基づいて機能をアンロックします。[オンチェーンでのKarma読み取り](#オンチェーンでのkarma読み取り)セクションの`onlyTier`モディファイアがコントラクトレベルでアクセスを制御します: + + + + + +```solidity +function accessPremiumContent() external onlyTier(3) { + // Only users at tier 3 or above can call this +} +``` + + + + +```js +// Karma残高からティアを解決し、UI機能をゲーティング +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + + +### ダイナミックプライシング + +高Karmaユーザーに割引やより良いレートを提供します: + + + + + +```solidity +function calculateFee(address user, uint256 baseAmount) public view returns (uint256) { + uint8 tierId = karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + // Each tier gives 5% discount + uint256 discount = uint256(tierId) * 5; + return baseAmount * (100 - discount) / 100; +} +``` + + + + +```js +// ユーザーの現在のティアからクライアント側で割引手数料を計算 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +const discount = BigInt(tierId) * 5n; // ティアごとに5%割引 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`ティア ${tierId}: ${discount}% 割引 → 手数料 = ${fee}`); +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const discount = BigInt(tierId) * 5n; // ティアごとに5%割引 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`ティア ${tierId}: ${discount}% 割引 → 手数料 = ${fee}`); +``` + + + + + +### レピュテーション表示 + +`KarmaTiers`コントラクトから直接名前を読み取って、UIにKarmaティアを信頼シグナルとして表示します: + + + + + +```js +// オンチェーンでティア名を取得 — ハードコードされた配列は不要 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +function KarmaBadge({ tierName }) { + return {tierName}; +} + +// 使用方法 + +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +function KarmaBadge({ tierName }: { tierName: string }) { + return {tierName}; +} + +// 使用方法 + +``` + + + + + +### 加重ガバナンス + +アプリのガバナンスでKarmaを投票の重み付けに使用します: + + + + + +```solidity +function vote(uint256 proposalId, bool support) external { + uint256 weight = karma.balanceOf(msg.sender); + proposals[proposalId].votes += support ? int256(weight) : -int256(weight); +} +``` + + + + +```js +// ユーザーのKarma残高を投票の重みとして読み取り、送信 +const weight = await karma.balanceOf(userAddress); +console.log(`投票の重み: ${ethers.formatEther(weight)} KARMA`); + +// ガバナンスコントラクトを呼び出し +const tx = await governanceContract.vote(proposalId, support); +await tx.wait(); +``` + + + + +```ts +import { formatEther, parseAbi } from 'viem'; + +// Karma残高から投票の重みを読み取り +const weight = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); +console.log(`投票の重み: ${formatEther(weight)} KARMA`); + +// ガバナンスコントラクトを通じて投票を送信 +const { request } = await client.simulateContract({ + address: GOVERNANCE_ADDRESS, + abi: parseAbi(['function vote(uint256 proposalId, bool support) external']), + functionName: 'vote', + args: [proposalId, support], + account: userAddress, +}); +await walletClient.writeContract(request); +``` + + + + + +## 次のステップ + +- [ガスレス統合](/build-for-karma/guides/gasless-integration)を参照して、ガスレストランザクションにKarmaを統合する方法を学ぶ +- [カルミックトークノミクス](/overview/tokenomics/karmic-tokenomics)でKarmaの獲得と使用の仕組みを確認する +- [ガスレストランザクション](/overview/general-info/gasless-transactions)でRLNベースのガスレスシステムの技術的詳細を理解する diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/index.md new file mode 100644 index 0000000..47cf973 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/index.md @@ -0,0 +1,21 @@ +--- +id: build-for-karma-index +title: Build for Karma +description: Status Networkで構築するために必要なすべて — ガスレス・レピュテーション統合ガイド、デプロイチュートリアル、アプリアイデア。 +keywords: [Status Network, builder guides, Karma, gasless integration, reputation, deploy contracts, app ideas, developer documentation] +slug: /build-for-karma +sidebar_position: 1 +--- + +このセクションは、Status Networkのビルダーハブです。ここで構築するメリットを理解したい方、何を作るか探したい方、ガスレストランザクションの実装方法を学びたい方、最初のスマートコントラクトをデプロイしたい方 — Karma中心の開発に必要なすべてがここにあります。 + +## はじめに + +- [**なぜStatus Networkか**](/build-for-karma/why-status-network):ここで構築すべき理由 — ガスレス経済、Karma、パブリックファンディング、他のL2との比較。 +- [**何を作るか**](/build-for-karma/what-to-build):フィルタリング可能なアプリアイデアのインタラクティブカタログ。 +- [**Karmaを使う**](/build-for-karma/guides):ガスレストランザクションとレピュテーション対応機能をアプリに統合するための技術ガイド。 +- [**最初のコントラクトをデプロイ**](/build-for-karma/deploying-contracts):Hardhat、Foundry、Remix、またはScaffold-ETH 2を使ったステップバイステップのコントラクトデプロイ。 + +## コミュニティ + +- [Telegramビルダーコミュニティ](https://t.me/statusl2)に参加して、Status Networkでの構築に関するサポートを受けましょう diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md new file mode 100644 index 0000000..d030b8e --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md @@ -0,0 +1,31 @@ +--- +title: Status Networkで何を構築するか +description: Status Network向けの高レバレッジなアプリアイデアのスキャンファーストカタログ。カテゴリ、工数、デリバリープロファイル別に整理。 +keywords: [Status Network, app ideas, builder ideas, Karma apps, privacy apps, gasless apps, DeFi, social apps, games, MVP] +sidebar_position: 3 +--- + +import IdeaCatalog from '@site/src/components/IdeaCatalog/IdeaCatalog'; + +Status NetworkはガスレスUX、Karmaレピュテーション、プライバシープリミティブを組み合わせています。 +これにより、他のチェーンではうまく構築しにくいプロダクトが実現可能になります。 + +以下はStatus Networkに最適な例として考えられるプロダクトの一部です。もちろん、これらのアイデアに限定されるわけではありません。 + +フィルターを使って、あなたの専門性と野心に合ったアイデアを見つけてください。カードをクリックすると詳細を確認できます。 + + + +## 今すぐ構築を始める + +- [クイックスタート](/overview/introduction/quick-start) +- [Karmaを使ったガスレスとレピュテーションの使い方](/build-for-karma/guides) +- [Status Networkへのコントラクトデプロイ](/build-for-karma/deploying-contracts) +- [Telegram Builder's Community](https://t.me/statusl2) + +## エコシステムと資金 + +ビルダーはKarmaホルダーがガバナンスする公共資金プールから継続的な資金を得られます。 +アプリのトラクションが増えるほど、Karmaと将来の配分に対する影響力が強くなります。 + +詳細 → [エコシステムと資金](/overview/tokenomics/public-funding) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md new file mode 100644 index 0000000..dac946a --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md @@ -0,0 +1,138 @@ +--- +title: なぜStatus Networkで構築するのか +description: Status Networkで構築する理由 — ガスレス取引、Karmaレピュテーション、持続可能な公共資金、他L2との比較。 +keywords: [Status Network, why build, L2 comparison, gasless, Karma, public funding, developer advantages, Linea zkEVM] +sidebar_position: 2 +--- + +選択できるL2は数多くあります。Status Networkが注目に値する理由をご紹介します。 + +
+ +
+
開発者資金
+
+
+
Status Network
+

アプリのトラクションに応じてスケールする継続的な収益プール

+
+
+
一般的なL2
+

数ヶ月ごとに再申請する一度きりのグラント

+
+
+
+
+ +
+
ユーザーのガス
+
+
+
Status Network
+

Karmaで無料 — ペイマスター、リレイヤー、アカウント抽象化のセットアップ不要

+
+
+
一般的なL2
+

ユーザーがガスを支払うか、開発者がペイマスター+リレイヤーインフラを運用

+
+
+
+
+ +
+
ユーザーレピュテーション
+
+
+
Status Network
+

Karmaによるネットワーク全体のレピュテーションシステム — スパム耐性、トラストシグナル、機能ゲーティング

+
+
+
一般的なL2
+

なし — 自前で構築するかサードパーティソリューションを統合

+
+
+
+
+ +
+
プライバシー
+
+
+
Status Network
+

ネイティブZKベースのツール — Rate Limiting Nullifiersなど

+
+
+
一般的なL2
+

サードパーティ統合

+
+
+
+
+
+ +## 持続可能な公共資金 + +Status Networkは一度きりのグラントや財団の資金に依存しません。代わりに、以下のソースから継続的に供給される公共資金プールを有しています: + +- **ネイティブ利回り** — ブリッジされた利回り付き資産(当初はETHとステーブルコイン)から +- **DEX手数料** — ネイティブ分散型取引所から +- **プレミアムガス手数料** — 拒否リスト入りユーザーから +- **将来のネイティブアプリ手数料** — レンディング、NFT、ローンチパッドなど + +詳細 → [経済モデル](/overview/tokenomics/economic-model) + +Karmaホルダーがこの公共資金プールをアプリとビルダーにどう配分するかを投票します。アプリがネットワークに貢献するほど(アクティビティと取引量を生み出すほど)、あなたとユーザーが獲得するKarmaが増え、将来の配分に対する影響力も大きくなります。 + +**ビルダーにとっての意味:** + +- 数ヶ月ごとに再申請する一度きりのグラントではなく、継続的な収益ストリーム +- 資金はアプリのトラクションに応じてスケール — ユーザーが増えればKarmaも増え、インセンティブも増加 +- コミュニティガバナンスによる配分、財団の門番なし + +詳細 → [公共資金](/overview/tokenomics/public-funding) + +## デフォルトでガスレス + +多くのチェーンでは「ガスレス」はペイマスターのセットアップ、リレイヤーの運用、アカウント抽象化SDKの統合を意味します。Status Networkでは、ガスレスがデフォルトの動作です。 + +正のKarma残高を持つすべてのアドレスは無料取引枠を取得します。ペイマスター不要。リレイヤー不要。特別なウォレット設定不要。対象ユーザーにはアプリがガス料金なしでそのまま動作します。 + +**ビルダーにとっての意味:** + +- ガスによるUXの摩擦なし。オンボーディングファネルで「ガス用にETHをブリッジして」のステップでユーザーを失わない +- ERC-4337、メタトランザクション、ガスリレーパターンの統合が不要 +- ユーザーに代わってガスをスポンサーするインフラコストが不要 + +ガスレスシステムは[Rate Limiting Nullifiers(RLN)](/overview/general-info/gasless-transactions/#rln)(ゼロ知識スパム防止メカニズム)によりシーケンサーレベルで強制されています。 + +## Karmaによる組み込みレピュテーション + +Karmaは、ステーキング、ブリッジ、流動性提供、アプリ利用、プレミアムガス支払など、本物のネットワーク参加を通じて全ユーザーが獲得するソウルバウンド(譲渡不可)トークンです。購入や譲渡はできません。 + +**ビルダーにとっての意味:** + +- **トラストシグナル**:高Karmaユーザーは検証済みのアクティブ参加者であり、エアドロップ農家やシビルではない +- **機能ゲーティング**:ビルダーはプレミアム機能、優先アクセス、優遇レートなどをユーザーのKarmaティアに基づいてゲートできる +- **スパム耐性**:ネットワーク自体がRLNメカニズムでスパムをゲートしており、Karmaティアがガスレス取引枠を直接制御するため、高Karmaユーザーは本質的にスパムしにくい +- **コールドスタート問題なし**:アプリはエコシステム全体で構築されたレピュテーションの恩恵を受ける + +詳細 → [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) + +## プライバシー重視のシビルグッズ + +Status Networkは[Institute of Free Technology(IFT)](https://free.technology)の技術で構築されています。特に、ガスレス取引システムは[Vac](https://vac.dev)(IFTの研究部門)が開発したゼロ知識スパム防止メカニズムである[RLN(Rate Limiting Nullifiers)](https://vac.dev/rln)を使用しています。 + +私たちは、デジタル時代の市民的自由を守る公共財を構築するというIFTの技術ビジョンに沿っています。Status Networkはガスレス性を活かしたプライバシー重視モジュールを追加していきます。 + + + +## 完全なEVM等価性 + +Status Networkは[Linea zkEVM](https://linea.build)スタック上に構築されています。つまりビルダーは以下が可能です: + +- 既存のSolidityコントラクトを修正なしでデプロイ +- Hardhat、Foundry、ethers.js、viemなどの標準イーサリアムツールを使用 +- 標準JSON-RPCメソッドを使用(ガス料金関連の一部メソッドを除く。詳細は[JSON-RPC API](/tools/rpc/json-rpc)を参照) +- Lineaのロールアップアーキテクチャから継承したゼロ知識証明ベースのセキュリティ + +カスタムVMなし。非標準オペコードなし。コントラクトやバックエンドの書き直しなし。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/add-status-network.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md similarity index 100% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/add-status-network.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md similarity index 100% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md similarity index 99% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md index 018f92d..fe88390 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md @@ -9,9 +9,9 @@ keywords: [Status Network, プリ・デポジット, キャンペーン, ボー [Aragon](https://www.aragon.org/)と協力して、Status Networkユーザー向けのプリ・デポジットキャンペーンを実施しています。 このページでは、キャンペーンのすべての重要なコントラクトアドレスを一覧表示します。 -:::note +::::note ボールトのトークンに応じて、EthereumメインネットまたはLineaメインネットにデプロイされます -::: +:::: ## ボールト - **SNT Vault** diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md similarity index 100% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md similarity index 100% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md similarity index 78% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md index 57190ad..22686e4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md @@ -9,9 +9,11 @@ keywords: [Status Network, ガスレストランザクション, Linea, RLN, Rat Status Networkは大規模なガスレストランザクションの導入を目指しています。このガスレスアプローチの主要コンポーネントは、VacのRate Limiting Nullifierで、従来のガス手数料を必要とせずにトランザクション速度制限を可能にします。この文書では、ガスレストランザクションを安全に有効にするために必要なアーキテクチャと統合要素について説明します。 -これらのガスレストランザクションの実装コードは、[Status Networkモノレポ](https://github.com/status-im/status-network-monorepo)で利用可能です。 +ガスレストランザクションの実装コードは、[Status Networkモノレポ](https://github.com/status-im/status-network-monorepo?tab=readme-ov-file#architecture-components)で利用可能です。 -### 1.2 RLN +ガスレスの運用レベルの実装についての詳細は、[Karma統合ガイド](/build-for-karma/guides)を参照してください。 + +## RLN RLNは、違反が発生しない限りユーザーのプライバシーを損なうことなくスパムを防ぐように設計されたゼロ知識システムです。ZKPとShamirの秘密分散を通じて実行される暗号化速度制限で従来のガス手数料を置き換えます。 @@ -21,7 +23,7 @@ RLNの特徴: - **Shamirの秘密分散とNullifier:** ユーザーはトランザクションの一意のnullifierを生成するために使用される秘密鍵を保持します。ユーザーがエポック(ブロックやタイムスタンプなど)内でトランザクション制限を超えると、秘密鍵が回復可能になり、露出します。 - **スパム検出:** 制限を超えるユーザーは効果的に自分の秘密を明かすことになり、拒否リストへの追加、将来の高いガス費用、または潜在的なトークンスラッシングなどのペナルティを受けます。 -### 1.3. RLNメンバーシップ管理 +### RLNメンバーシップ管理 RLNは大規模なメンバーシップ証明を効率的に処理するためにスパースマークルツリーを使用します。ベンチマーク研究により、100万アカウントをサポートする高さ20のツリーが証明生成と検証に最適なパフォーマンスを提供することが判明しました。100万アカウントを超えるスケーラビリティのために、レジストリと共に複数のSMTを使用してユーザーを適切なツリーに誘導できます。 @@ -34,20 +36,28 @@ graph TD B -->|ソウルバウンドトークン| C{ティア割り当て} subgraph "ティア制限" - D[Basic] - E[Active] - F[Regular] - G[Power User] - H[High-Throughput] - I[S-Tier] + T1[Entry] + T2[Newbie] + T3[Basic] + T4[Active] + T5[Regular] + T6[Power User] + T7[Pro User] + T8[High-Throughput] + T9[S-Tier] + T10[Legendary] end - C --> D - C --> E - C --> F - C --> G - C --> H - C --> I + C --> T1 + C --> T2 + C --> T3 + C --> T4 + C --> T5 + C --> T6 + C --> T7 + C --> T8 + C --> T9 + C --> T10 %% RLNフロー A -->|ガスレスTx送信| J[RPCノード] @@ -96,15 +106,15 @@ graph TD class A wallet class B,L karma class C tier - class D,E,F,G,H,I tierNode + class T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 tierNode class J,K,K1,K2,K3,M,N,O rln class P,Q,R,S,T,U,V,W sequencer class X,Y,Z,AA gas ``` -## 3. システムコンポーネント +## システムコンポーネント -### 3.1 Prover +### Prover Proverは3つのサービスで構成されるシステムです: @@ -114,7 +124,7 @@ Proverは3つのサービスで構成されるシステムです: これらのサービスは安全な認証情報管理、証明生成、トランザクション追跡を保証し、gRPCがSequencerとの低遅延通信を可能にします。 -### 3.2 RLN Verifier +### RLN Verifier RLN Verifierはsequencer内のbesuプラグインで、Java Native Interfaceを介してRLNのZerokit Rustライブラリを活用します。 Verifierは: @@ -125,7 +135,7 @@ Verifierは: 検証に失敗したトランザクションは拒否され、ユーザーは一時的に拒否リストに追加される場合があります。 -### 3.3 拒否リスト +### 拒否リスト 拒否リストはクォータを超過したりスパムに関与したりするユーザーを一時的に制限します: @@ -133,10 +143,16 @@ Verifierは: - ユーザーはプレミアムガス手数料を支払うことで制限を回避できます - プレミアム手数料を支払うとユーザーがリストから削除され、追加のKarmaを獲得します -### 3.4 `linea_estimateGas` RPC修正 +## `linea_estimateGas` RPC修正 -linea_estimateGasメソッドは拒否リストのユーザーを考慮するようにカスタマイズされています: +Status Networkは、ベースのLinea `linea_estimateGas`をKarma対応の動作で拡張しており、返される**手数料フィールド**は送信者アドレス`from`のKarma残高に依存する場合があります。 +`gasLimit`の計算は、ベースのLinea実装(内部的に標準の`eth_estimateGas`ロジックを使用)から変更されていません。 -- ユーザーの拒否リストステータスをチェックします -- 必要に応じてプレミアムガス倍率を追加します -- ユーザーに透明性と正確なガス推定を提供します \ No newline at end of file +具体的には、Status Networkの`linea_estimateGas`は: + +- **拒否リストプレミアムの適用**: 送信者が拒否リストに掲載されている場合、ノードは通常の手数料見積もりを計算し、**手数料フィールド**にプレミアム倍率を適用します。 +- **対象ユーザーへのガスレス見積もりの返却**: 送信者に利用可能なKarmaクォータがある場合、メソッドはゼロの`baseFeePerGas`と`priorityFeePerGas`を返します。 + +上記のロジックは、[Status Networkモノレポのこのセクション](https://github.com/status-im/status-network-monorepo/blob/v1.0.1/besu-plugins/linea-sequencer/sequencer/src/main/java/net/consensys/linea/rpc/methods/LineaEstimateGas.java#L218)でオープンソース化されている修正版`LineaEstimateGas`実装に含まれています。 + +Karma対応の手数料見積もり動作と`linea_estimateGas`の詳細については、[JSON-RPC API](/tools/rpc/json-rpc)を参照してください。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/network-details.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md similarity index 91% rename from i18n/ja/docusaurus-plugin-content-docs/current/general-info/network-details.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md index 525dcbe..30eb598 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/general-info/network-details.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md @@ -18,4 +18,4 @@ - ネットワークへのdAppsの接続 - スマートコントラクトの検証 -ウォレットへのネットワークの追加方法については、[Status Network追加ガイド](./add-status-network.md)をご参照ください。 +ウォレットへのネットワークの追加方法については、[Status Network追加ガイド](/overview/general-info/add-status-network)をご参照ください。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md new file mode 100644 index 0000000..d213500 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md @@ -0,0 +1 @@ +# Status Networkとプライバシーの関係 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/index.md similarity index 83% rename from i18n/ja/docusaurus-plugin-content-docs/current/index.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/index.md index 914a10a..1a0a646 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/index.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/index.md @@ -3,7 +3,7 @@ id: index title: Status Networkへようこそ description: Status Networkは、シームレスで手数料無料の分散型アプリケーションを実現するガスレスなレイヤー2ブロックチェーンネットワークです。簡単なウォレット設定、フォーセット、デプロイメントツールで開発を始めましょう。 keywords: [Status Network, レイヤー2, ガスレスブロックチェーン, イーサリアムスケーリング, L2, バリディウム, web3開発, dapp開発, ブロックチェーン開発] -slug: / +slug: /overview sidebar_position: 1 --- @@ -41,16 +41,16 @@ Status NetworkはStatus Wallet、Keycard、Waku、Codexなど、[IFT](https://fr 説明部分をスキップして直接開発を始めたいですか?以下が始め方です: -1. [Status NetworkをウォレットへAdd](/general-info/add-status-network) -2. [テストネットETHを入手](/tools/testnet-faucets) -3. [アセットをブリッジ](/general-info/bridge/bridging-testnet) -4. [最初のコントラクトをデプロイ](/tutorials/deploying-contracts/using-remix) +1. [Status NetworkをウォレットへAdd](/overview/general-info/add-status-network) +2. [テストネットETHを入手](/tools/core-infrastructure/testnet-faucets) +3. [アセットをブリッジ](/overview/general-info/bridge/bridging-testnet) +4. [最初のコントラクトをデプロイ](/build-for-karma/deploying-contracts/using-remix) ## サポート&リソース コミュニティに参加し、必要なリソースにアクセスしましょう: - [Telegramビルダーズコミュニティ](https://t.me/statusl2)に参加 -- [ネットワーク詳細](/general-info/network-details)を確認 -- [コントラクトアドレス](/general-info/contract-addresses/testnet-contracts)を閲覧 +- [ネットワーク詳細](/overview/general-info/network-details)を確認 +- [コントラクトアドレス](/overview/general-info/contract-addresses/testnet-contracts)を閲覧 素晴らしいものを作る準備はできていますか?今すぐフリーネットワークでの旅を始めましょう! diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/introduction/quick-start.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md similarity index 91% rename from i18n/ja/docusaurus-plugin-content-docs/current/introduction/quick-start.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md index d2065c3..f403ba2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/introduction/quick-start.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md @@ -10,7 +10,7 @@ 1. **Status NetworkテストネットをMetaMaskに追加**: - MetaMaskにStatus Networkテストネットを追加する方法については、[Status Network追加ガイド](/general-info/add-status-network)の手順に従ってください。 + MetaMaskにStatus Networkテストネットを追加する方法については、[Status Network追加ガイド](/overview/general-info/add-status-network)の手順に従ってください。 2. **テストETHを入手**: @@ -102,8 +102,8 @@ contract SimpleStorage { - **サポートを受ける**: - サポートが必要な場合は[Telegramコミュニティ](https://t.me/statusl2)に参加 - - 詳細については[ネットワークの詳細](/general-info/network-details)をチェック - - Status Networkへの[トークンのブリッジ](/general-info/bridge/bridging-testnet)について学ぶ + - 詳細については[ネットワークの詳細](/overview/general-info/network-details)をチェック + - Status Networkへの[トークンのブリッジ](/overview/general-info/bridge/bridging-testnet)について学ぶ ## まとめ @@ -114,5 +114,5 @@ contract SimpleStorage { - 数値の保存と取得によってデプロイしたコントラクトと対話 より高度な開発については、以下を使用したデプロイのガイドをチェックしてください: -- [Hardhat](/tutorials/deploying-contracts/using-hardhat) -- [Foundry](/tutorials/deploying-contracts/using-foundry) +- [Hardhat](/build-for-karma/deploying-contracts/using-hardhat) +- [Foundry](/build-for-karma/deploying-contracts/using-foundry) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/other/official-links.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/other/official-links.md similarity index 92% rename from i18n/ja/docusaurus-plugin-content-docs/current/other/official-links.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/other/official-links.md index a8a8b42..ea780e8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/other/official-links.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/other/official-links.md @@ -22,4 +22,4 @@ - **Telegramコミュニティ**: [t.me/statusl2](https://t.me/statusl2) - **X/twitter**: [x.com/statusL2](https://x.com/statusL2) -ウォレットへのネットワークの追加方法については、[ネットワーク追加ガイド](/general-info/add-status-network)をご参照ください。 +ウォレットへのネットワークの追加方法については、[ネットワーク追加ガイド](/overview/general-info/add-status-network)をご参照ください。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md similarity index 99% rename from i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md index ad848ec..d62f985 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md @@ -15,4 +15,3 @@ - **将来のネイティブアプリ**: ネットワークは後に、レンディングマーケット、NFTマーケットプレイス、トークンローンチパッドなどの追加の収益源を導入し、それぞれが生成された手数料の一部をL2の運営に還元します。 このモデルにより、Status Networkは無料取引を提供しながら、経済的な持続可能性を確保します。TVLとそれに関連するネイティブ収益、および取引量を活用することで、Status Networkはユーザー、流動性提供者、開発者間のインセンティブを調整し、インフレ的なトークン発行に依存しない自己持続的なエコシステムを作り出します。 - diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md similarity index 99% rename from i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md index 2845adb..993f0af 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md @@ -44,4 +44,4 @@ 4. より高いネイティブ収益と手数料が、ユーザーが追加の利回り生成資産をブリッジすることでより多くのTVLを引き付けます。 -TVLと採用が成長するにつれて、資金調達の機会も増加し、ネットワークの持続可能性を強化します。 \ No newline at end of file +TVLと採用が成長するにつれて、資金調達の機会も増加し、ネットワークの持続可能性を強化します。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md similarity index 93% rename from i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md index 162be59..5569c05 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md @@ -34,7 +34,7 @@ SNT、LINEA、ETHボールトは、[Aragon](https://aragon.org/)がStatus Networ ### デプロイ済みコントラクト -アドレスとネットワークの完全なリストは、[事前預入ボールトコントラクト](../general-info/contract-addresses/pre-deposit)を参照してください。 +アドレスとネットワークの完全なリストは、[事前預入ボールトコントラクト](/overview/general-info/contract-addresses/pre-deposit)を参照してください。 ## Generic Protocol ボールト (GUSD) @@ -50,9 +50,9 @@ GUSDボールトは、[Steakhouse Financial](https://steakhouse.financial/)と[M 生成された利回りの一部は、メインネットローンチ時にStatus Networkのネイティブファンディングプールに充当されます。 -:::note +::::note GUSDボールトは受領トークンを発行**しません**。預入記録はGeneric Protocolのコントラクトに記録されます。[Hub](https://hub.status.network/pre-deposits)でウォレットを接続するか、オンチェーンで直接確認できます。 -::: +:::: ### DepositorHelper コントラクト @@ -78,7 +78,7 @@ Generic Protocolの構造(GUSDトークノミクス、ブリッジングイン 事前預入者は以下を獲得します: -- **Karma**:譲渡不可のガバナンストークン;ガスレススループットと投票権を付与(詳細は[Karmicトークノミクス](./karmic-tokenomics)を参照)。 +- **Karma**:譲渡不可のガバナンストークン;ガスレススループットと投票権を付与(詳細は[Karmicトークノミクス](/overview/tokenomics/karmic-tokenomics)を参照)。 - **流動性インセンティブ**:ボールト全体に1,500万SNTと2,000万LINEAトークンを配布。 - **ステーブルコイン預入者向けGeneric Protocolポイント**:Generic ProtocolがStatus Networkメインネットにローンチした際に使用可能なポイント。 - **ネイティブアプリポイント**:ネイティブアプリがトークノミクスを公開次第確定予定。 @@ -114,8 +114,8 @@ Generic Protocolの構造(GUSDトークノミクス、ブリッジングイン ## 関連資料 -- [事前預入ボールトコントラクト](../general-info/contract-addresses/pre-deposit) — デプロイ済みアドレス情報 -- [Karmicトークノミクス](./karmic-tokenomics) — Karmaの獲得方法と使用方法 -- [経済モデル](./economic-model) — Status Networkの持続可能な収益モデル +- [事前預入ボールトコントラクト](/overview/general-info/contract-addresses/pre-deposit) — デプロイ済みアドレス情報 +- [Karmicトークノミクス](/overview/tokenomics/karmic-tokenomics) — Karmaの獲得方法と使用方法 +- [経済モデル](/overview/tokenomics/economic-model) — Status Networkの持続可能な収益モデル - [Aragonドキュメント](https://docs.aragon.org/) - [Generic Protocolドキュメント](https://docs.generic.money/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md similarity index 97% rename from i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md index ec72d9a..a5a1112 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md @@ -18,4 +18,4 @@ Status Networkの最も重要なコンポーネントの1つは、ネットワ - **ビルダーとネットワークの成長の連携**: ネットワークの利用と採用に積極的に貢献する開発者は、カルマの形でより多くの投票力を受け取り、自分たちに投票することができ、価値のあるアプリケーションを作成するインセンティブを強化します。 -このメカニズムにより、ビルダーは継続的で非搾取的な資本源を確保でき、成功するアプリケーションの作成に集中することができます。 \ No newline at end of file +このメカニズムにより、ビルダーは継続的で非搾取的な資本源を確保でき、成功するアプリケーションの作成に集中することができます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md similarity index 99% rename from i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md rename to i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md index c773f75..d8b3b0e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md @@ -28,4 +28,4 @@ Status NetworkテストネットでのSNTステーキング契約の展開が近 - **カルマの獲得**: ステーカーはカルマを蓄積し、これによりガバナンス力とガスレス取引へのアクセスが付与されます。 - **より高い無料取引枠**: より多くのカルマを持つユーザーは、より大きなガスレス取引制限を享受できます。 - **強化されたガバナンスの影響力**: カルマを蓄積することで、SNTステーカーは公的資金の配分、流動性インセンティブ付与、ネットワークポリシーの決定において重要な役割を果たすことができます。 -- **より高い評価**: SNTをステーキングすることで、保有者はエコシステムとの連携を示し、カルマの形で評価スコアを示すことができます。エコシステム内のアプリは、高い評価を持つユーザーを引き付ける強いインセンティブを持っています。 \ No newline at end of file +- **より高い評価**: SNTをステーキングすることで、保有者はエコシステムとの連携を示し、カルマの形で評価スコアを示すことができます。エコシステム内のアプリは、高い評価を持つユーザーを引き付ける強いインセンティブを持っています。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/block-explorers.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/block-explorers.md deleted file mode 100644 index 9792965..0000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tools/block-explorers.md +++ /dev/null @@ -1,35 +0,0 @@ -# Status Networkテストネットエクスプローラー - -Status Networkブロックエクスプローラーは[sepoliascan.status.network](https://sepoliascan.status.network)で利用できます。 - -### 機能 -- トランザクションの詳細とステータスの確認 -- トークンの転送と残高の追跡 -- スマートコントラクトのソースコード検証 -- ガス価格とネットワークアクティビティの監視 -- 検証済みスマートコントラクトの表示と対話 -- 任意のアドレスのトークン保有状況の追跡 - -## Sepoliaエクスプローラー(レイヤー1) - -Sepolia(レイヤー1)上のトランザクションを追跡するには、[Sepolia Etherscan](https://sepolia.etherscan.io)を使用します。 - -これは特に以下の用途に便利です: -- L1からL2へのブリッジトランザクションの監視 -- トークンの入出金の追跡 -- L1コントラクトの対話の確認 - -## コントラクト検証 - -Status Networkエクスプローラーでスマートコントラクトを検証するには: - -1. [コントラクト検証](https://sepoliascan.status.network/contract-verification)に移動 -2. コントラクトアドレスを入力 -3. ソースコードをアップロードしコンパイル詳細を提供 -4. 検証のために送信 - -検証が完了すると、コントラクトのソースコードが公開され、ユーザーはエクスプローラーを通じて直接対話できるようになります。 - -## API アクセス - -Status Networkエクスプローラーは開発者向けにAPIエンドポイントを提供しています。APIのドキュメントは近日公開予定です。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/bridge.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/bridge.md deleted file mode 100644 index 9817d9d..0000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tools/bridge.md +++ /dev/null @@ -1,45 +0,0 @@ -# Status Networkテストネットブリッジ - -Status Networkテストネットブリッジを使用すると、Sepolia(レイヤー1)とStatus Networkテストネット(レイヤー2)間でトークンを転送できます。ブリッジインターフェースは[bridge.status.network](https://bridge.status.network)で利用できます。 - -## 概要 - -ブリッジは以下を可能にする重要なインフラストラクチャコンポーネントとして機能します: -- SepoliaからStatus Networkテストネットへのトークン転送 -- Status NetworkテストネットからSepoliaへのトークン引き出し -- L1とL2間のメッセージ受け渡し - -## ブリッジコントラクト - -### レイヤー1(Sepolia) -- **トークンブリッジ**: [`0x01b44C5Ea321f921D93476cf54Aa8460db17a548`](https://sepolia.etherscan.io/address/0x01b44C5Ea321f921D93476cf54Aa8460db17a548) - -### レイヤー2(Status Network) -- **トークンブリッジ**: [`0xbC7f9571152a8e21942b2aEa4831a27f1149af19`](https://sepoliascan.status.network/address/0xbC7f9571152a8e21942b2aEa4831a27f1149af19) - -## 機能 - -- **トークンブリッジング**: ネットワーク間でERC-20トークンを転送 -- **ETHブリッジング**: SepoliaとStatus Network間でETHをブリッジ -- **トランザクション追跡**: ブリッジトランザクションのステータスを監視 -- **ガス見積もり**: ブリッジ前に推定ガスコストを確認 - -## サポートされているトークン - -サポートされているトークンとそのコントラクトアドレスの最新リストについては、[トークンリストリポジトリ](https://github.com/status-im/status-network-token-list)をご参照ください。 - -## ブリッジの使用 - -ブリッジの使用方法の詳細な手順や重要なセキュリティ上の考慮事項については、[ブリッジングガイド](../general-info/bridge/bridging-testnet.md)をご参照ください。 - -## ブリッジトランザクションの監視 - -以下を使用してブリッジトランザクションを監視できます: -- L2トランザクションには[Status Networkエクスプローラー](https://sepoliascan.status.network) -- L1トランザクションには[Sepolia Etherscan](https://sepolia.etherscan.io) - -## サポート - -ブリッジ使用中に問題が発生した場合: -- 一般的な解決策については[ブリッジングガイド](../general-info/bridge/bridging-testnet.md)をチェック -- サポートについては[Telegramコミュニティ](https://t.me/statusl2)に参加 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md new file mode 100644 index 0000000..7203084 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md @@ -0,0 +1,25 @@ +--- +title: ブロックエクスプローラー +description: トランザクションの確認、コントラクトの検証、ネットワーク活動のモニタリングのための Status Network ブロックエクスプローラー。 +keywords: [ブロックエクスプローラー, トランザクション追跡, スマートコントラクト検証] +--- + +# ブロックエクスプローラー + +## Status Network メインネット + +*近日公開予定。* + +## Status Network テストネット (Sepolia) + +| エクスプローラー | URL | 機能 | +|----------|-----|----------| +| Sepoliascan | [sepoliascan.status.network](https://sepoliascan.status.network) | トランザクション検索、スマートコントラクトの検証と対話、残高追跡 | + +コントラクト検証については、Sepoliascan の[コントラクト検証](https://sepoliascan.status.network/contract-verification)ページをご覧ください。 + +Sepolia での L1 活動は [Sepolia Etherscan](https://sepolia.etherscan.io) で追跡できます。 + +## Status Network テストネット (Hoodi) + +*近日公開予定。* diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md new file mode 100644 index 0000000..0254178 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md @@ -0,0 +1,44 @@ +--- +title: Status Network ブリッジ +description: Sepolia と Status Network テストネット間のトークン転送のための Status Network ブリッジ使用ガイド。 +keywords: [Status Network ブリッジ, トークンブリッジ, クロスチェーン転送, L1 L2 ブリッジ, Sepolia ブリッジ] +--- + +# Status Network テストネットブリッジ + +Status Network テストネットブリッジを使用すると、Sepolia(レイヤー1)と Status Network テストネット(レイヤー2)間でトークンを転送しメッセージを受け渡しできます。ブリッジインターフェースは [bridge.status.network](https://bridge.status.network) で利用できます。 + +## ブリッジコントラクト + +### レイヤー1(Sepolia) +- **トークンブリッジ**: [`0x01b44C5Ea321f921D93476cf54Aa8460db17a548`](https://sepolia.etherscan.io/address/0x01b44C5Ea321f921D93476cf54Aa8460db17a548) + +### レイヤー2(Status Network) +- **トークンブリッジ**: [`0xbC7f9571152a8e21942b2aEa4831a27f1149af19`](https://sepoliascan.status.network/address/0xbC7f9571152a8e21942b2aEa4831a27f1149af19) + +## 機能 + +- **トークンブリッジング**: ネットワーク間で ERC-20 トークンを転送 +- **ETH ブリッジング**: Sepolia と Status Network 間で ETH をブリッジ +- **トランザクション追跡**: ブリッジトランザクションのステータスを監視 +- **ガス見積もり**: ブリッジ前に推定ガスコストを確認 + +## サポートされているトークン + +サポートされているトークンとそのコントラクトアドレスの最新リストについては、[トークンリストリポジトリ](https://github.com/status-im/status-network-token-list)をご参照ください。 + +## ブリッジの使用 + +ブリッジの使用方法の詳細な手順や重要なセキュリティ上の考慮事項については、[ブリッジングガイド](/overview/general-info/bridge/bridging-testnet)をご参照ください。 + +## ブリッジトランザクションの監視 + +以下を使用してブリッジトランザクションを監視できます: +- L2 トランザクションには [Status Network エクスプローラー](https://sepoliascan.status.network) +- L1 トランザクションには [Sepolia Etherscan](https://sepolia.etherscan.io) + +## サポート + +ブリッジ使用中に問題が発生した場合: +- 一般的な解決策については[ブリッジングガイド](/overview/general-info/bridge/bridging-testnet)をチェック +- サポートについては [Telegram コミュニティ](https://t.me/statusl2)に参加 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md similarity index 94% rename from i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc.md rename to i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md index 40ac813..0310c9f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md @@ -1,3 +1,7 @@ +--- +slug: /tools/core-infrastructure/rpc-endpoints +--- + # RPCエンドポイント Status Networkは、ネットワークとの対話を可能にする公開RPC(Remote Procedure Call)エンドポイントを提供しています。 @@ -11,7 +15,7 @@ https://public.sepolia.rpc.status.network ## RPCの使用 ### MetaMaskへの追加 -このRPCを使用してStatus Networkをウォレットに追加する方法については、[ネットワーク追加ガイド](../general-info/add-status-network.md)をご参照ください。 +このRPCを使用してStatus Networkをウォレットに追加する方法については、[ネットワーク追加ガイド](/overview/general-info/add-status-network)をご参照ください。 ### Web3ライブラリの設定 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md similarity index 94% rename from i18n/ja/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md rename to i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md index e34ceeb..126781d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md @@ -35,7 +35,7 @@ Sepolia ETH を入手したら、[Status Network ブリッジ](https://bridge.st ## Status Network STT フォーセット -Status Test Token (STT) は SNT の 테스트넷 에 상당하는 것입니다. Status Network テストネットのエコシステム内でテストアセットとして使用されます。 +Status Test Token (STT) は SNT のテストネット版です。Status Network テストネットのエコシステム内でテストアセットとして使用されます。 ### 詳細 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/index.md new file mode 100644 index 0000000..92be9d1 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/index.md @@ -0,0 +1,33 @@ +--- +id: tools-index +title: ツールとインフラストラクチャ +description: Status Network で利用可能な開発者ツール、インフラサービス、統合 — RPC エンドポイント、ブリッジ、フォーセット、エクスプローラー、パートナー統合。 +keywords: [Status Network, 開発者ツール, RPC, ブリッジ, フォーセット, ブロックエクスプローラー, インフラストラクチャ] +slug: /tools +sidebar_position: 1 +--- + +Status Network で利用可能な開発者ツール、インフラサービス、統合の完全なリファレンスです。 + +## コアインフラストラクチャ + +Status Network でのビルドとテストに必要な基本サービス: + +| ツール | 説明 | リンク | +|---|---|---| +| **RPC エンドポイント** | パブリック JSON-RPC および WebSocket アクセス | [RPC →](/tools/core-infrastructure/rpc-endpoints) | +| **ブリッジ** | Ethereum Sepolia と Status Network 間のアセット転送 | [ブリッジ →](/tools/core-infrastructure/bridge) | +| **テストネットフォーセット** | 開発用テストネットアセットの取得 | [フォーセット →](/tools/core-infrastructure/testnet-faucets) | +| **ブロックエクスプローラー** | トランザクション、コントラクト、ネットワーク活動の閲覧 | [エクスプローラー →](/tools/core-infrastructure/block-explorers) | + +## インフラストラクチャパートナー + +Status Network はインデクシング、オラクル、データプロバイダー、ウォレット、セキュリティなどの分野でインフラパートナーをオンボーディングしています。[インフラストラクチャパートナー](/tools/infrastructure)ページで全カテゴリと使用方法をご確認ください。 + +パートナーになりませんか?[こちらから申請](https://statusnetwork.typeform.com/partner)。 + +## クイックリンク + +- [ネットワーク詳細](/overview/general-info/network-details) — Chain ID、RPC URL、完全なネットワーク構成 +- [ウォレットに Status Network を追加](/overview/general-info/add-status-network) +- [ブリッジングガイド](/overview/general-info/bridge/bridging-testnet) — ステップバイステップのブリッジ手順 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/infrastructure.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/infrastructure.md new file mode 100644 index 0000000..3a59766 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/infrastructure.md @@ -0,0 +1,32 @@ +--- +title: インフラストラクチャパートナー +description: Status Network で利用可能なインフラパートナーとサードパーティ統合 — RPC プロバイダー、オラクル、インデクサー、アカウントアブストラクション、開発ツールなど。 +keywords: [Status Network, インフラストラクチャ, パートナー, オラクル, インデクシング, RPC, アカウントアブストラクション, 開発ツール, クロスチェーン, オンランプ] +sidebar_position: 6 +--- + +# インフラストラクチャパートナー + +:::note 近日公開予定 +Status Network は以下のカテゴリのインフラパートナーを積極的にオンボーディングしています。統合が稼働次第、このページを更新します。 +::: + +## パートナーカテゴリ + +| カテゴリ | 説明 | +|---|---| +| **RPC プロバイダー** | 信頼性が高く低レイテンシーなノードアクセスのための専用 RPC インフラ | +| **オラクルと VRF** | 価格フィード、RWA データ、オンチェーンランダム性のための VRF、DEX データフィード | +| **Safe と多重署名** | 財務管理とガバナンスのための多重署名ウォレット | +| **インデクサー** | スマートコントラクトイベントとオンチェーンデータのための分散型・中央集権型インデクシング | +| **アカウントアブストラクション** | スマートアカウント、鍵管理、シームレスなユーザーオンボーディング | +| **開発ツール** | SDK、デプロイツール、Status Network ソーシャルログイン | +| **クロスチェーン** | クロスチェーンスワップとブリッジングソリューション | +| **オンランプアグリゲーター** | 法定通貨から暗号通貨へのオンランプ・オフランプソリューション | + +## パートナーになる + +インフラサービスを提供し、Status Network と統合したい場合: + +- [パートナー申請](https://statusnetwork.typeform.com/partner) +- [Telegram ビルダーコミュニティに参加](https://t.me/statusl2) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md new file mode 100644 index 0000000..3d522eb --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md @@ -0,0 +1,57 @@ +--- +title: JSON-RPC API +description: ビルダー向けStatus Network JSON-RPC APIリファレンス。 +keywords: + [ + Status Network, + JSON-RPC, + Linea, + EIP-1559, + eth_estimateGas, + linea_estimateGas, + Karma, + gasless, + ] +--- + +Status NetworkはLinea zkEVMをベースとしており、**ほとんどのJSON-RPCメソッドは標準的なEVMノードと同じ動作をします**。 + +サポートされているメソッドとその標準セマンティクスの一覧については、以下の公式ドキュメントを参照してください: + +- **[イーサリアムJSON-RPC API](https://ethereum.github.io/execution-apis/api-documented/)** — 標準イーサリアムRPCメソッド +- **[Linea JSON-RPC APIリファレンス](https://docs.linea.build/api/reference)** — `linea_estimateGas`を含むLinea固有のメソッド + +## Status Networkの拡張 + +Status Networkは標準のLinea JSON-RPCにKarma対応の手数料推定を追加しています: + +### `linea_estimateGas` + +Lineaでは、[`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas)がガス推定の推奨メソッドであり、1回の呼び出しで`gasLimit`、`baseFeePerGas`、`priorityFeePerGas`を返します。 + +Status Networkは`linea_estimateGas`にKarma対応の動作を追加しています: + +- **ガスレスユーザー**: 利用可能なKarmaクォータを持つ対象ユーザーに対して、`baseFeePerGas`と`priorityFeePerGas`をゼロで返します +- **拒否リストユーザー**: 拒否リストに載っているユーザーの手数料フィールドにプレミアム乗数を適用します + +### Status Network RPCの違い + +ベースのLineaでも、`linea_estimateGas`はすでに推奨メソッドです。L1検証コストとデータ圧縮を考慮した手数料フィールドを返すためで、これは`eth_estimateGas`やその他の`eth_`名前空間の呼び出しでは提供されない情報です。 +Status Networkのフォークは`linea_estimateGas`をさらに拡張してKarma対応にしており、その他のJSON-RPCメソッドはすべて標準セマンティクスを維持しています。 + +つまり、`eth_`メソッドを使用した従来の手数料フロー(例: `eth_gasPrice`、`eth_maxPriorityFeePerGas`、`eth_feeHistory`)は**不正確な**手数料提案につながる可能性があります。LineaのL2固有の価格設定とStatus NetworkのKarma調整の両方が欠落するためです。 + +Status Networkでは、`linea_estimateGas`を`gasLimit`、`baseFeePerGas`、`priorityFeePerGas`の唯一の信頼できるソースとして使用してください。 + +ベースLineaの動作については、[Lineaのガス手数料ガイド](https://docs.linea.build/network/how-to/gas-fees)と[Lineaの`linea_estimateGas`リファレンス](https://docs.linea.build/api/reference/linea-estimategas)を参照してください。 + +:::info +コード例、移行手順、よくある落とし穴を含む詳細な統合ガイドは、[Karma の使い方](/build-for-karma/guides)ガイドを参照してください。 +::: + +### その他のリソース + +- [Lineaのガス手数料ガイド](https://docs.linea.build/network/how-to/gas-fees) +- [Lineaの`linea_estimateGas`リファレンス](https://docs.linea.build/api/reference/linea-estimategas) +- [カルミックトークノミクス](/overview/tokenomics/karmic-tokenomics) — Karmaがガス手数料に与える影響 +- [ガスレストランザクション](/overview/general-info/gasless-transactions) — RLNベースのガスレスシステムの技術的詳細 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md b/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md similarity index 96% rename from i18n/ja/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md rename to i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md index 7ec0dc1..f1ebb89 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md @@ -4,8 +4,6 @@ description: 公式RPCツールを使用してStatus Network用の独自RPCノ keywords: [RPCノード, Status Network RPC, ブロックチェーンノード, WebSocket, wss, セルフホストRPC, ネットワークインフラ, Status L2 RPCツール] --- -# 独自のRPCノードの運用 - このチュートリアルでは、Status Network用の独自のRemote Procedure Call (RPC)ノードをセットアップして運用するプロセスをガイドします。独自のRPCノードを運用することで、Status Networkとのやり取りをより強力に制御し、プライバシーを強化し、サードパーティサービスへの依存を減らすことができます。 ## はじめに @@ -13,14 +11,15 @@ keywords: [RPCノード, Status Network RPC, ブロックチェーンノード, [Status Network RPCツールリポジトリ](https://github.com/status-im/status-l2-rpc-tools)は、独自のRPCノードを運用するために必要なすべてのツール、ジェネシスファイル、セットアップスクリプトを提供します。 ### 完全セットアップガイド -詳細なセットアップ手順、前提条件、システム要件、ステップバイステップのガイダンスについては、リポジトリ内の**[公式README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)**を参照してください。 + +詳細なセットアップ手順、前提条件、システム要件、ステップバイステップのガイダンスについては、リポジトリ内の[**公式README**](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)を参照してください。 ## ノードオプション セットアップスクリプトは、選択可能な2つのノード実装を提供します: -- **Besuノード**: `http://localhost:8545`で実行 -- **Gethノード**: `http://localhost:8445`で実行 +- **Besuノード**: ポート `8545` で実行 +- **Gethノード**: ポート `8445` で実行 必要に応じて、どちらか一方または両方を同時に実行できます。 @@ -55,6 +54,7 @@ keywords: [RPCノード, Status Network RPC, ブロックチェーンノード, - **ルーティングルール**: それ以外のメソッドは Geth にルーティング ## ノードの検証 + 以下の例では、Besuを使用している場合は``を`8545`に、Gethを使用している場合は`8445`に置き換えてください。 ### 基本検証 @@ -88,6 +88,7 @@ curl -X POST \ ``` 最新で健全なノードは以下を示すはずです: + - `eth_blockNumber`が信頼できる参照(公開RPCやブロックエクスプローラーなど)と一致する - `eth_syncing`が`false`を返す(完全に同期済み) - `net_peerCount`が0より大きい(ピアに接続済み) @@ -117,7 +118,6 @@ ws://localhost:8446 # Geth {"jsonrpc":"2.0","method":"eth_unsubscribe","params":["0x..."],"id":1} ``` - ## 高度な機能 ### バッチリクエスト @@ -144,6 +144,7 @@ ws://localhost:8446 # Geth ### よくある問題 1. **ポートがすでに使用中** + ```bash # ポート8545(Besu)または8445(Geth)を使用しているものを確認 lsof -i :8545 @@ -154,6 +155,7 @@ ws://localhost:8446 # Geth ``` 2. **Dockerコンテナの問題** + ```bash # 実行中のコンテナを確認 docker ps @@ -238,7 +240,7 @@ RPCノードのパフォーマンスを最適化するには: 問題が発生した場合: - 最新の更新については[公式README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)を確認 -- [ネットワーク詳細](/general-info/network-details)およびドキュメント全般を確認 +- [ネットワーク詳細](/overview/general-info/network-details)およびドキュメント全般を確認 - サポートについては[Telegramコミュニティ](https://t.me/statusl2)に参加 ## 追加リソース diff --git a/i18n/ja/docusaurus-theme-classic/navbar.json b/i18n/ja/docusaurus-theme-classic/navbar.json index 8064df5..55c6e4b 100644 --- a/i18n/ja/docusaurus-theme-classic/navbar.json +++ b/i18n/ja/docusaurus-theme-classic/navbar.json @@ -1,14 +1,22 @@ { "title": { - "message": "Status Network Docs", + "message": "Status Network ドキュメント", "description": "The title in the navbar" }, "logo.alt": { - "message": "Status Network Logo", + "message": "Status Network ロゴ", "description": "The alt text of navbar logo" }, - "item.label.Hub": { - "message": "Hub", - "description": "Navbar item with label Hub" + "item.label.Overview": { + "message": "概要", + "description": "Navbar item with label Overview" + }, + "item.label.Build for Karma": { + "message": "Karma でビルド", + "description": "Navbar item with label Build for Karma" + }, + "item.label.Tools": { + "message": "ツール", + "description": "Navbar item with label Tools" } } diff --git a/i18n/ko/code.json b/i18n/ko/code.json index e91247a..0f0632c 100644 --- a/i18n/ko/code.json +++ b/i18n/ko/code.json @@ -436,5 +436,585 @@ "theme.tags.tagsPageTitle": { "message": "태그", "description": "The title of the tag list page" + }, + "homepage.layout.title": { + "message": "Status Network 문서", + "description": "Homepage layout title" + }, + "homepage.layout.description": { + "message": "Status Network 문서 — 조합 가능한 프라이버시와 내장형 스팸 방지 기능을 갖춘 완전한 가스리스 이더리움 L2, 인간과 봇 모두를 위해 설계되었습니다", + "description": "Homepage layout description" + }, + "homepage.hero.subtitle": { + "message": "환영합니다", + "description": "Homepage hero subtitle" + }, + "homepage.hero.title": { + "message": "Status Network 문서", + "description": "Homepage hero title" + }, + "homepage.hero.description": { + "message": "조합 가능한 프라이버시와 내장형 스팸 방지 기능을 갖춘 완전한 가스리스 이더리움 L2, 인간과 봇 모두를 위해 설계되었습니다", + "description": "Homepage hero description" + }, + "homepage.docs.sectionTitle": { + "message": "문서 탐색", + "description": "Homepage docs section title" + }, + "homepage.docs.sectionSubtitle": { + "message": "지금 바로 스테이터스 네트워크에서 개발을 시작하세요", + "description": "Homepage docs section subtitle" + }, + "homepage.docCards.overview.title": { + "message": "개요", + "description": "Homepage docs card title for Overview" + }, + "homepage.docCards.overview.description": { + "message": "스테이터스 네트워크의 아키텍처, 가스리스 트랜잭션, 토큰이코노믹스, 지속 가능한 공공 자금 모델에 대해 알아보세요", + "description": "Homepage docs card description for Overview" + }, + "homepage.docCards.overview.linkText": { + "message": "자세히 보기", + "description": "Homepage docs card link text for Overview" + }, + "homepage.docCards.build.title": { + "message": "카르마를 위해 개발하기", + "description": "Homepage docs card title for Build for Karma" + }, + "homepage.docCards.build.description": { + "message": "컨트랙트 배포, Karma 적용 및 가스리스 앱 구축을 위한 가이드, 튜토리얼, 레퍼런스", + "description": "Homepage docs card description for Build for Karma" + }, + "homepage.docCards.build.linkText": { + "message": "자세히 보기", + "description": "Homepage docs card link text for Build for Karma" + }, + "homepage.docCards.tools.title": { + "message": "도구", + "description": "Homepage docs card title for Tools" + }, + "homepage.docCards.tools.description": { + "message": "RPC 엔드포인트, 브릿지, 테스트넷 파우셋, 블록 익스플로러, 인프라 파트너", + "description": "Homepage docs card description for Tools" + }, + "homepage.docCards.tools.linkText": { + "message": "자세히 보기", + "description": "Homepage docs card link text for Tools" + }, + "homepage.quickStart.title": { + "message": "빌드할 준비가 되셨나요?", + "description": "Homepage quick start title" + }, + "homepage.quickStart.description": { + "message": "지갑을 설정하고 테스트넷 토큰을 받아 몇 분 만에 첫 번째 컨트랙트를 배포하세요", + "description": "Homepage quick start description" + }, + "homepage.quickStart.button": { + "message": "빠른 시작", + "description": "Homepage quick start button label" + }, + "homepage.community.sectionTitle": { + "message": "커뮤니티", + "description": "Homepage community section title" + }, + "homepage.community.sectionSubtitle": { + "message": "스테이터스 네트워크 커뮤니티의 최신 소식을 확인하세요", + "description": "Homepage community section subtitle" + }, + "homepage.community.telegram.title": { + "message": "Telegram 참여", + "description": "Homepage community card title for Telegram" + }, + "homepage.community.telegram.description": { + "message": "다른 스테이터스 네트워크 빌더들과 교류하고 지원을 받으세요", + "description": "Homepage community card description for Telegram" + }, + "homepage.community.github.title": { + "message": "GitHub 확인하기", + "description": "Homepage community card title for GitHub" + }, + "homepage.community.github.description": { + "message": "소스 코드를 탐색하고 생태계에 기여하세요", + "description": "Homepage community card description for GitHub" + }, + "homepage.community.official.title": { + "message": "공식 링크", + "description": "Homepage community card title for official links" + }, + "homepage.community.official.description": { + "message": "웹사이트, 소셜 채널, 모든 공식 리소스를 한 곳에서 확인하세요", + "description": "Homepage community card description for official links" + }, + "ideaCatalog.filter.category": { + "message": "카테고리", + "description": "Filter group label" + }, + "ideaCatalog.filter.statusPrimitives": { + "message": "스테이터스 고유 기능", + "description": "Filter group label" + }, + "ideaCatalog.filter.builderProfile": { + "message": "빌더 프로필", + "description": "Filter group label" + }, + "ideaCatalog.filter.difficulty": { + "message": "난이도", + "description": "Filter group label" + }, + "ideaCatalog.filter.fewerFilters": { + "message": "필터 접기", + "description": "Toggle button label" + }, + "ideaCatalog.filter.moreFilters": { + "message": "필터 더보기", + "description": "Toggle button label" + }, + "ideaCatalog.filter.domainExpertise": { + "message": "도메인 전문성", + "description": "Filter group label" + }, + "ideaCatalog.filter.userSegment": { + "message": "사용자 계층", + "description": "Filter group label" + }, + "ideaCatalog.filter.capitalRequirement": { + "message": "자본 요건", + "description": "Filter group label" + }, + "ideaCatalog.status.showing": { + "message": "{totalCount}개 중 {visibleCount}개 표시", + "description": "Status text" + }, + "ideaCatalog.status.clearAll": { + "message": "모두 지우기", + "description": "Clear all filters button" + }, + "ideaCatalog.card.whyStatus": { + "message": "Why Status:", + "description": "Card detail label" + }, + "ideaCatalog.card.mvpScope": { + "message": "MVP 범위:", + "description": "Card detail label" + }, + "ideaCatalog.card.security": { + "message": "보안", + "description": "Card meta badge label" + }, + "ideaCatalog.card.opsBurden": { + "message": "운영 부담", + "description": "Card meta badge label" + }, + "ideaCatalog.empty.message": { + "message": "현재 필터에 맞는 아이디어가 없습니다.", + "description": "Empty state message" + }, + "ideaCatalog.empty.clearAll": { + "message": "모든 필터 지우기", + "description": "Empty state clear button" + }, + "ideaCatalog.securityCriticality.low": { + "message": "낮음", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.medium": { + "message": "중간", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.high": { + "message": "높음", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.critical": { + "message": "중요", + "description": "Security criticality label" + }, + "ideaCatalog.opsBurden.low": { + "message": "낮음", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.medium": { + "message": "중간", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.high": { + "message": "높음", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.veryHigh": { + "message": "매우 높음", + "description": "Ops burden label" + }, + "ideaCatalog.category.reputation": { + "message": "평판", + "description": "Category label" + }, + "ideaCatalog.category.privacy": { + "message": "프라이버시", + "description": "Category label" + }, + "ideaCatalog.category.social": { + "message": "소셜", + "description": "Category label" + }, + "ideaCatalog.category.games": { + "message": "게임", + "description": "Category label" + }, + "ideaCatalog.category.defi": { + "message": "DeFi", + "description": "Category label" + }, + "ideaCatalog.statusPrimitive.gasless": { + "message": "가스리스", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.reputation": { + "message": "평판", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.privacy": { + "message": "프라이버시", + "description": "Status primitive label" + }, + "ideaCatalog.builderProfile.frontendDev": { + "message": "웹 / 앱 개발", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.contractDev": { + "message": "스마트 컨트랙트 개발", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.fullStack": { + "message": "풀스택", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.protocolDev": { + "message": "프로토콜 / 암호학", + "description": "Builder profile label" + }, + "ideaCatalog.difficulty.lowMed": { + "message": "낮음-중간", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.med": { + "message": "중간", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.medHigh": { + "message": "중간-높음", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.high": { + "message": "높음", + "description": "Difficulty label" + }, + "ideaCatalog.userSegment.consumer": { + "message": "소비자", + "description": "User segment label" + }, + "ideaCatalog.userSegment.communityCreator": { + "message": "커뮤니티/크리에이터", + "description": "User segment label" + }, + "ideaCatalog.userSegment.daoOrgOps": { + "message": "DAO/조직 운영", + "description": "User segment label" + }, + "ideaCatalog.userSegment.traderDefi": { + "message": "트레이더/DeFi", + "description": "User segment label" + }, + "ideaCatalog.domainExpertise.communityDesign": { + "message": "커뮤니티 디자인", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.defiMechanisms": { + "message": "DeFi 메커니즘", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.privacy": { + "message": "프라이버시", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.paymentsFinops": { + "message": "결제/FinOps", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.consumerProduct": { + "message": "소비자 제품", + "description": "Domain expertise label" + }, + "ideaCatalog.capitalReq.none": { + "message": "없음", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.operatingTreasury": { + "message": "운영 자금", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.seedLiquidity": { + "message": "시드 유동성", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.deepLiquidity": { + "message": "깊은 유동성", + "description": "Capital requirement label" + }, + "ideaCatalog.idea.karmaGatedAccess.title": { + "message": "카르마로 제한된 콘텐츠 피드", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaGatedAccess.what": { + "message": "크리에이터가 최소 카르마 등급을 충족하는 팔로워에게만 보이는 게시물을 발행하는 소셜 피드. 일종의 Substack + 온체인 평판", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaGatedAccess.whyStatus": { + "message": "카르마 등급이 온체인에서 해결되므로 신뢰 없이도 접근 제어가 가능합니다. 구독 결제, 플랫폼 제약 따위 없으며, 시빌 공격 저항적입니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaGatedAccess.mvp": { + "message": "공개된 + 제한된 피드, 티어 확인 미들웨어(온체인 가능), 카르마 등급별 청중 구성을 보여주는 크리에이터 대시보드.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.title": { + "message": "카르마로 부스트된 수익 볼트", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.what": { + "message": "높은 카르마 등급 예치자의 APY가 인상되는 DeFi 금고. 초기 지지자와 적극적인 참여자들이 더 나은 수익을 얻을 수 있는 메커니즘", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.whyStatus": { + "message": "네이티브 평판 그래프로 금고가 토큰에 기반한 가중 투표나 오프체인 허용 목록과 같은 방식 대신 검증된 참여로 보상 가중치를 매길 수 있습니다.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.mvp": { + "message": "단일 자산 금고에 두 개의 수익 티어, 예치 시 온체인 카르마 등급 확인, 티어별로 다른 유효 APY를 보여주는 대시보드.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaIncentiveMarket.title": { + "message": "카르마 현상금 시장", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaIncentiveMarket.what": { + "message": "카르마 임계값 이상의 사용자만 작업을 청구할 수 있는 현상금 시장. 프로젝트 팀이 작업(버그 리포트, 번역, 온보딩 가이드)을 게시하고 검증된 기여자에게 보상금을 지급", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaIncentiveMarket.whyStatus": { + "message": "카르마 관문이 스팸 봇과 저품질 제출을 걸러내어, 현상금 발행자가 청구인이 네트워크에서 실제 실적이 있다는 확신을 갖게 합니다.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaIncentiveMarket.mvp": { + "message": "현상금 목록 페이지, 카르마로 제한된 청구 플로우, 제출 검토 패널, 승인에 따른 온체인 지불.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.karmaDynamicPricing.title": { + "message": "카르마 등급제 NFT 마켓플레이스", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaDynamicPricing.what": { + "message": "구매자와 판매자의 카르마 등급에 따라 리스팅 수수료, 로열티, 얼리 액세스 기간이 조정되는 NFT 마켓플레이스. 신뢰받는 참여자가 자동으로 더 나은 조건을 받는 구조", + "description": "Idea what" + }, + "ideaCatalog.idea.karmaDynamicPricing.whyStatus": { + "message": "결제 시 온체인 티어 검증으로 동적 가격이 적용됩니다. 쿠폰 코드 X, 백엔드 허용 목록 X.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.karmaDynamicPricing.mvp": { + "message": "NFT 리스팅 + 구매 플로우, 티어별 수수료 일정, 결제 시 온체인 티어 체크, 구매자 티어별 매출을 보여주는 판매자 분석.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.stealthAddressPayments.title": { + "message": "스텔스 주소 결제", + "description": "Idea title" + }, + "ideaCatalog.idea.stealthAddressPayments.what": { + "message": "지출 경로를 숨길 수 있는 일회용 수신 주소.", + "description": "Idea what" + }, + "ideaCatalog.idea.stealthAddressPayments.whyStatus": { + "message": "프라이버시 프리미티브 + 마찰이 적은 트랜잭션 UX.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.stealthAddressPayments.mvp": { + "message": "주소 생성, 수신 플로우, 비공개의 지출 플로우가 구현된 시스템", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privatePayroll.title": { + "message": "프라이빗 급여 및 저축", + "description": "Idea title" + }, + "ideaCatalog.idea.privatePayroll.what": { + "message": "잔액과 수령인을 노출하지 않는 급여 및 저축 서비스", + "description": "Idea what" + }, + "ideaCatalog.idea.privatePayroll.whyStatus": { + "message": "비공개적인 급여 지급과 저축을 요구하는 실질적인 수요에 미치지 못하는 현대의 블록체인들의 공개성", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privatePayroll.mvp": { + "message": "고용주의 일괄 지급 + 수령인의 청구 + 차폐 금고 구조", + "description": "Idea mvp" + }, + "ideaCatalog.idea.shieldedMicrotransactions.title": { + "message": "차폐 소액 결제 / 카드 레이어", + "description": "Idea title" + }, + "ideaCatalog.idea.shieldedMicrotransactions.what": { + "message": "금액 및 참여자를 숨길 수 있는 소액 결제 및 구독 서비스", + "description": "Idea what" + }, + "ideaCatalog.idea.shieldedMicrotransactions.whyStatus": { + "message": "가스리스 상호작용 덕분에 빈번한 결제가 가능해집니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.shieldedMicrotransactions.mvp": { + "message": "비공개 팁/구독 플로우와 반복 승인이 있는 시스템", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privateLending.title": { + "message": "비공개 대출 및 차입", + "description": "Idea title" + }, + "ideaCatalog.idea.privateLending.what": { + "message": "공개적인 포지션 유출을 막는 차입/대출 플로우가 구현된 시스템", + "description": "Idea what" + }, + "ideaCatalog.idea.privateLending.whyStatus": { + "message": "프라이버시 + 카르마 기반 신용이 기본적으로 탑재됨", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privateLending.mvp": { + "message": "단일 담보 유형, 단일 차입 자산, 비공개적 헬스체크", + "description": "Idea mvp" + }, + "ideaCatalog.idea.privateMultisig.title": { + "message": "프라이빗 다중서명", + "description": "Idea title" + }, + "ideaCatalog.idea.privateMultisig.what": { + "message": "서명자, 임계값, 트랜잭션 등의 세부사항이 숨겨진 다중서명 기능", + "description": "Idea what" + }, + "ideaCatalog.idea.privateMultisig.whyStatus": { + "message": "프라이버시에 민감한 조직도 온체인에서 운영할 수 있게 됩니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.privateMultisig.mvp": { + "message": "정책 설정 + 서명 플로우 + 선택적으로 공개가 가능한 실행 로그 구현", + "description": "Idea mvp" + }, + "ideaCatalog.idea.socialMiniApp.title": { + "message": "가스리스 마이크로블로그 플랫폼", + "description": "Idea title" + }, + "ideaCatalog.idea.socialMiniApp.what": { + "message": "Twitter 스타일 마이크로블로그로, 모든 게시·답글·좋아요가 온체인에서 작동하면서도 비용이 들지 않고, 카르마 배지로 신뢰할 수 있는 목소리들을 부각시킬 수 있습니다", + "description": "Idea what" + }, + "ideaCatalog.idea.socialMiniApp.whyStatus": { + "message": "가스리스 트랜잭션으로 게시 당 액션 경제적이며, 카르마 배지가 임의의 블루체크 시스템을 실제 네트워크 참여로 얻은 평판으로 대체합니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.socialMiniApp.mvp": { + "message": "타임라인 피드, 게시/답글/좋아요 액션, 카르마 신뢰 배지가 있는 사용자 프로필, 기본 콘텐츠 관리 컨트롤 구현", + "description": "Idea mvp" + }, + "ideaCatalog.idea.creatorEconomyToolkit.title": { + "message": "팬 패스 플랫폼", + "description": "Idea title" + }, + "ideaCatalog.idea.creatorEconomyToolkit.what": { + "message": "크리에이터가 독점 콘텐츠, 그룹 채팅, 오프라인 행사 등의 접근을 제공하게 되는 무료 디지털 패스를 민팅하는 플랫폼. 팬은 가스비 없이 패스를 수집할 수 있습니다", + "description": "Idea what" + }, + "ideaCatalog.idea.creatorEconomyToolkit.whyStatus": { + "message": "무료 민팅과 무료 청구로 커뮤니티 패스의 페이월 마찰이 제거되어, 크리에이터가 팬에게 가스 비용을 요구하지 않으면서 보다 쉽게 팬층을 키울 수 있습니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.creatorEconomyToolkit.mvp": { + "message": "패스 민팅이 있는 크리에이터 페이지, 팬 청구 플로우, 패스로 제한된 콘텐츠 섹션, 패스 검증을 통한 행사 체크인 기능 구현", + "description": "Idea mvp" + }, + "ideaCatalog.idea.communityGovernance.title": { + "message": "DAO 제안 & 카르마 가중 투표 앱", + "description": "Idea title" + }, + "ideaCatalog.idea.communityGovernance.what": { + "message": "커뮤니티 구성원이 제안을 제출하고 카르마 등급에 비례한 가중치로 투표하는 거버넌스 앱. 간단한 방식으로 적극 기여자가 수동 보유자보다 더 큰 목소리를 냅니다", + "description": "Idea what" + }, + "ideaCatalog.idea.communityGovernance.whyStatus": { + "message": "카르마 가중 투표가 토큰 축적보다 실제 참여를 보상하고, 가스리스 투표가 대부분 DAO에서 투표율을 억누르는 비용 장벽을 제거합니다.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.communityGovernance.mvp": { + "message": "제안 제출 폼, 온체인 집계가 있는 카르마 가중 투표, 티어별로 참여 구성을 보여주는 결과 대시보드.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.onchainStrategyGame.title": { + "message": "전장의 안개 정복 게임", + "description": "Idea title" + }, + "ideaCatalog.idea.onchainStrategyGame.what": { + "message": "육각형 그리드 영토 지배 게임으로, 부대 위치가 프라이빗 상태로 숨겨지고 모든 이동이 Gasless 온체인 트랜잭션입니다 — Risk 보드 게임에 온체인 실제 전장의 안개를 더한 것을 생각해 보세요.", + "description": "Idea what" + }, + "ideaCatalog.idea.onchainStrategyGame.whyStatus": { + "message": "프라이버시 프리미티브로 클라이언트 측 안개가 아닌 진정한 숨겨진 정보가 가능하며, Gasless 이동으로 전략 게임의 빠른 주고받기가 경제적으로 실현 가능해집니다.", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.onchainStrategyGame.mvp": { + "message": "전장의 안개가 있는 육각형 맵, 단일 유닛 유형, 프라이빗 부대 배치, 턴 해결, 매치 리더보드.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.predictionMarket.title": { + "message": "예측 시장", + "description": "Idea title" + }, + "ideaCatalog.idea.predictionMarket.what": { + "message": "저마찰 진입과 프라이빗 참여자 포지션이 있는 시장.", + "description": "Idea what" + }, + "ideaCatalog.idea.predictionMarket.whyStatus": { + "message": "더 나은 시장 참여와 더 적은 카피 트레이딩 행동을 유도합니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.predictionMarket.mvp": { + "message": "시장 생성 + 포지션 진입 + 결산 + 기본 분석.", + "description": "Idea mvp" + }, + "ideaCatalog.idea.nativeDexCompanion.title": { + "message": "Karma 등급별 스왑 라우터", + "description": "Idea title" + }, + "ideaCatalog.idea.nativeDexCompanion.what": { + "message": "최고 온체인 풀을 통해 거래를 라우팅하고 고-Karma 사용자에게 수수료 감면과 우선 실행을 제공하는 스왑 인터페이스 — DEX 레이어에 구워진 로열티 프로그램", + "description": "Idea what" + }, + "ideaCatalog.idea.nativeDexCompanion.whyStatus": { + "message": "카르마 등급으로 라우터가 신뢰 없이도 수수료 할인을 제공하고, 네이티브 유동성과의 긴밀한 통합으로 외부 애그리게이터 의존 없이 더 나은 비율을 제공합니다", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.nativeDexCompanion.mvp": { + "message": "티어별 수수료 표시가 있는 토큰 스왑 UI, 카르마 인식 라우팅 로직, LP 포지션 패널, 티어별 절약 수수료를 보여주는 거래 내역", + "description": "Idea mvp" + }, + "ideaCatalog.idea.publicFundingInterface.title": { + "message": "공공 자금 인터페이스", + "description": "Idea title" + }, + "ideaCatalog.idea.publicFundingInterface.what": { + "message": "보조금 발견, 제안, 투표, 추적 대시보드의 엔드투엔드 기능 구현", + "description": "Idea what" + }, + "ideaCatalog.idea.publicFundingInterface.whyStatus": { + "message": "생태계 성장 플라이휠을 직접 지원하는 구조", + "description": "Idea whyStatus" + }, + "ideaCatalog.idea.publicFundingInterface.mvp": { + "message": "제안 게시판 + 투표 화면 + 보조금 진행 추적 기능 구현", + "description": "Idea mvp" } } diff --git a/i18n/ko/docusaurus-plugin-content-docs/current.json b/i18n/ko/docusaurus-plugin-content-docs/current.json index 5fb0834..2f3f86f 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current.json +++ b/i18n/ko/docusaurus-plugin-content-docs/current.json @@ -3,148 +3,176 @@ "message": "Next", "description": "The label for version current" }, - "sidebar.tutorialSidebar.category.INTRODUCTION": { + "sidebar.homeSidebar.category.INTRODUCTION": { "message": "소개", - "description": "The label for category INTRODUCTION in sidebar tutorialSidebar" + "description": "The label for category INTRODUCTION in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOKENOMICS": { + "sidebar.homeSidebar.category.TOKENOMICS": { "message": "토크노믹스", - "description": "The label for category TOKENOMICS in sidebar tutorialSidebar" + "description": "The label for category TOKENOMICS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.GENERAL INFO": { + "sidebar.homeSidebar.category.GENERAL INFO": { "message": "일반 정보", - "description": "The label for category GENERAL INFO in sidebar tutorialSidebar" + "description": "The label for category GENERAL INFO in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🏡 Contract Addresses": { + "sidebar.homeSidebar.category.🏡 Contract Addresses": { "message": "🏡 컨트랙트 주소", - "description": "The label for category 🏡 Contract Addresses in sidebar tutorialSidebar" + "description": "The label for category 🏡 Contract Addresses in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🌉 Bridge": { + "sidebar.homeSidebar.category.🌉 Bridge": { "message": "🌉 브릿지", - "description": "The label for category 🌉 Bridge in sidebar tutorialSidebar" + "description": "The label for category 🌉 Bridge in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOOLS": { - "message": "도구", - "description": "The label for category TOOLS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.TUTORIALS": { - "message": "튜토리얼", - "description": "The label for category TUTORIALS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.🚀 Deploying a Smart Contract": { - "message": "🚀 스마트 컨트랙트 배포", - "description": "The label for category 🚀 Deploying a Smart Contract in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.OTHER DOCS": { + "sidebar.homeSidebar.category.OTHER DOCS": { "message": "기타 문서", - "description": "The label for category OTHER DOCS in sidebar tutorialSidebar" + "description": "The label for category OTHER DOCS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🏠 Home": { - "message": "🏠 홈", - "description": "The label for the doc item 🏠 Home in sidebar tutorialSidebar" + "sidebar.homeSidebar.doc.🌴 Home": { + "message": "🌴 홈", + "description": "The label for the doc item 🌴 Home in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.⚡ Quick Start": { + "sidebar.homeSidebar.doc.⚡ Quick Start": { "message": "⚡ 빠른 시작", - "description": "The label for the doc item ⚡ Quick Start in sidebar tutorialSidebar" + "description": "The label for the doc item ⚡ Quick Start in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Token": { - "message": "💎 SNT Token", - "description": "The label for the doc item 💎 SNT Token in sidebar tutorialSidebar, linking to the doc tokenomics/snt-token" - }, - "sidebar.tutorialSidebar.doc.💠 Karma Token": { - "message": "💠 Karma Token", - "description": "The label for the doc item 💠 Karma Token in sidebar tutorialSidebar, linking to the doc tokenomics/karma-token" - }, - "sidebar.tutorialSidebar.doc.🌐 Network Details": { - "message": "🌐 네트워크 세부정보", - "description": "The label for the doc item 🌐 Network Details in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.➕ Add Status Network": { - "message": "➕ Status 네트워크 추가", - "description": "The label for the doc item ➕ Add Status Network in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.💰 Tokens": { - "message": "💰 토큰", - "description": "The label for the doc item 💰 Tokens in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Testnet Contracts": { - "message": "🧪 테스트넷 컨트랙트", - "description": "The label for the doc item 🧪 Testnet Contracts in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Bridging Testnet": { - "message": "🧪 테스트넷 브릿징", - "description": "The label for the doc item 🧪 Bridging Testnet in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔌 RPC": { - "message": "🔌 RPC", - "description": "The label for the doc item 🔌 RPC in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌉 Bridge": { - "message": "🌉 브릿지", - "description": "The label for the doc item 🌉 Bridge in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🚰 Testnet Faucets": { - "message": "🚰 테스트넷 파우셋", - "description": "The label for the doc item 🚰 Testnet Faucets in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔎 Block Explorers": { - "message": "🔎 블록 익스플로러", - "description": "The label for the doc item 🔎 Block Explorers in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎩 Using Hardhat": { - "message": "🎩 Hardhat 사용하기", - "description": "The label for the doc item 🎩 Using Hardhat in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.⚒️ Using Foundry": { - "message": "⚒️ Foundry 사용하기", - "description": "The label for the doc item ⚒️ Using Foundry in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎛️ Using Remix": { - "message": "🎛️ Remix 사용하기", - "description": "The label for the doc item 🎛️ Using Remix in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🏗 Using Scaffold-ETH 2": { - "message": "🏗 Scaffold-ETH 2 사용하기", - "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔗 Official Links": { - "message": "🔗 공식 링크", - "description": "The label for the doc item 🔗 Official Links in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌴 Home": { - "message": "🌴 Home", - "description": "The label for the doc item 🌴 Home in sidebar tutorialSidebar, linking to the doc index" - }, - "sidebar.tutorialSidebar.doc.🤝 Economic Model": { + "sidebar.homeSidebar.doc.🤝 Economic Model": { "message": "🤝 경제 모델", - "description": "The label for the doc item 🤝 Economic Model in sidebar tutorialSidebar" + "description": "The label for the doc item 🤝 Economic Model in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Public Funding": { + "sidebar.homeSidebar.doc.💰 Public Funding": { "message": "💰 공공 자금", - "description": "The label for the doc item 💰 Public Funding in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Public Funding in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🐉 Karmic Tokenomics": { + "sidebar.homeSidebar.doc.🐉 Karmic Tokenomics": { "message": "🐉 카르마 토크노믹스", - "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar tutorialSidebar" + "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Staking": { + "sidebar.homeSidebar.doc.💎 SNT Staking": { "message": "💎 SNT 스테이킹", - "description": "The label for the doc item 💎 SNT Staking in sidebar tutorialSidebar" + "description": "The label for the doc item 💎 SNT Staking in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposits": { + "sidebar.homeSidebar.doc.💰 Pre-Deposits": { "message": "💰 사전예치", - "description": "The label for the doc item 💰 Pre-Deposits in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Pre-Deposits in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🪙 Tokens": { + "sidebar.homeSidebar.doc.🌐 Network Details": { + "message": "🌐 네트워크 세부정보", + "description": "The label for the doc item 🌐 Network Details in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.⛽ Gasless Transactions": { + "message": "⛽ 가스리스 트랜잭션", + "description": "The label for the doc item ⛽ Gasless Transactions in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.➕ Add Status Network": { + "message": "➕ Status 네트워크 추가", + "description": "The label for the doc item ➕ Add Status Network in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🪙 Tokens": { "message": "🪙 토큰", - "description": "The label for the doc item 🪙 Tokens in sidebar tutorialSidebar" + "description": "The label for the doc item 🪙 Tokens in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposit Vault Contracts": { + "sidebar.homeSidebar.doc.🧪 Testnet Contracts": { + "message": "🧪 테스트넷 컨트랙트", + "description": "The label for the doc item 🧪 Testnet Contracts in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.💰 Pre-Deposit Vault Contracts": { "message": "💰 사전예치 금고 컨트랙트", - "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🌐 Running an RPC node": { + "sidebar.homeSidebar.doc.🧪 Bridging Testnet": { + "message": "🧪 테스트넷 브릿징", + "description": "The label for the doc item 🧪 Bridging Testnet in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🔗 Official Links": { + "message": "🔗 공식 링크", + "description": "The label for the doc item 🔗 Official Links in sidebar homeSidebar" + }, + "sidebar.buildForKarmaSidebar.category.BUILD FOR KARMA": { + "message": "카르마를 위해 개발하기", + "description": "The label for category BUILD FOR KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🌟 Why Status Network": { + "message": "🌟 왜 스테이터스 네트워크인가", + "description": "The label for the doc item 🌟 Why Status Network in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.💡 What to Build": { + "message": "💡 아이디어 카탈로그", + "description": "The label for the doc item 💡 What to Build in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.USING KARMA": { + "message": "카르마 사용", + "description": "The label for category USING KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⛽ Gasless Integration": { + "message": "⛽ 가스리스 적용하기", + "description": "The label for the doc item ⛽ Gasless Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🔰 Reputation Integration": { + "message": "🔰 평판 적용하기", + "description": "The label for the doc item 🔰 Reputation Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.DEPLOYING CONTRACTS": { + "message": "컨트랙트 배포", + "description": "The label for category DEPLOYING CONTRACTS in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎩 Using Hardhat": { + "message": "🎩 Hardhat 사용하기", + "description": "The label for the doc item 🎩 Using Hardhat in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⚒️ Using Foundry": { + "message": "⚒️ Foundry 사용하기", + "description": "The label for the doc item ⚒️ Using Foundry in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎛️ Using Remix": { + "message": "🎛️ Remix 사용하기", + "description": "The label for the doc item 🎛️ Using Remix in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🏗 Using Scaffold-ETH 2": { + "message": "🏗 Scaffold-ETH 2 사용하기", + "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar buildForKarmaSidebar" + }, + "sidebar.toolsSidebar.category.TOOLS": { + "message": "도구", + "description": "The label for category TOOLS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.CORE INFRASTRUCTURE": { + "message": "핵심 인프라", + "description": "The label for category CORE INFRASTRUCTURE in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.📡 RPC Endpoints": { + "message": "📡 RPC 엔드포인트", + "description": "The label for the doc item 📡 RPC Endpoints in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌉 Bridge": { + "message": "🌉 브릿지", + "description": "The label for the doc item 🌉 Bridge in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🚰 Testnet Faucets": { + "message": "🚰 테스트넷 파우셋", + "description": "The label for the doc item 🚰 Testnet Faucets in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔎 Block Explorers": { + "message": "🔎 블록 익스플로러", + "description": "The label for the doc item 🔎 Block Explorers in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.RPC": { + "message": "RPC", + "description": "The label for category RPC in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔌 JSON-RPC API": { + "message": "🔌 JSON-RPC API", + "description": "The label for the doc item 🔌 JSON-RPC API in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌐 Running an RPC Node": { "message": "🌐 RPC 노드 운영하기", - "description": "The label for the doc item 🌐 Running an RPC node in sidebar tutorialSidebar" + "description": "The label for the doc item 🌐 Running an RPC Node in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.PARTNERS": { + "message": "파트너", + "description": "The label for category PARTNERS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🤝 Infrastructure Partners": { + "message": "🤝 인프라 파트너", + "description": "The label for the doc item 🤝 Infrastructure Partners in sidebar toolsSidebar" } } diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md new file mode 100644 index 0000000..5f600ba --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md @@ -0,0 +1,72 @@ +--- +id: deploying-contracts-index +title: 첫 번째 컨트랙트 배포하기 +description: 선호하는 배포 도구를 선택하여 Status Network에 스마트 컨트랙트를 배포하세요. Hardhat, Foundry, Remix, Scaffold-ETH 2 가이드를 제공합니다. +keywords: [deploy smart contract, Status Network, Hardhat, Foundry, Remix, Scaffold-ETH 2, blockchain deployment, EVM] +slug: /build-for-karma/deploying-contracts +sidebar_position: 1 +--- + +스테이터스 네트워크는 EVM 호환이므로 표준 이더리움 도구 체인을 사용하여 컨트랙트를 배포할 수 있습니다. 워크플로에 맞는 도구를 선택하고 단계별 가이드를 따라 테스트넷에 첫 번째 컨트랙트를 배포하세요. + +:::tip 시작하기 전에 +[지갑에 스테이터스 네트워크를 추가](/overview/general-info/add-status-network)하고 [테스트넷 ETH](/tools/core-infrastructure/testnet-faucets)를 받아두었는지 확인하세요. +::: + +## 배포 도구 선택 + +
+ + +
🎩
+
+

Hardhat

+

Solidity 컨트랙트 컴파일, 테스트, 배포를 위한 업계 표준 개발 환경. Hardhat Ignition 및 TypeScript 지원 포함.

+ TypeScript · Testing · Ignition +
+
+ + +
⚒️
+
+

Foundry

+

스마트 컨트랙트 개발을 위한 Rust 기반 초고속 툴킷. Solidity로 테스트를 작성하고 Cast로 컨트랙트와 상호작용하세요.

+ Solidity Tests · Cast · Fast Builds +
+
+ + +
🎛️
+
+

Remix IDE

+

설치 없이 브라우저에서 사용하는 IDE — 빠른 프로토타이핑, 학습, 로컬 도구 설치 없이 간단한 컨트랙트 배포에 완벽합니다.

+ Browser-Based · No Setup · Beginner-Friendly +
+
+ + +
🏗️
+
+

Scaffold-ETH 2

+

스테이터스 네트워크 확장이 사전 구성된 풀스택 스타터 키트. NextJS 프론트엔드, 컨트랙트 핫 리로드, Hardhat 및 Foundry 지원 포함.

+ Full-Stack · NextJS · Hot Reload +
+
+ +
+ +## 어떤 것을 선택할지 모르시겠어요? + +| 도구 | 적합한 용도 | 필요한 설정 | +|---|---|---| +| **Hardhat** | 복잡한 테스트 및 배포 파이프라인이 있는 프로덕션 프로젝트 | Node.js + npm | +| **Foundry** | Solidity-native 테스트와 빠른 컴파일을 선호하는 개발자 | Rust toolchain | +| **Remix** | 빠른 실험, 학습, 간단한 일회성 배포 | None (browser) | +| **Scaffold-ETH 2** | 처음부터 프론트엔드가 필요한 풀스택 app | Node.js + npm | + +## 배포 후 + +컨트랙트가 배포되면 다음 단계를 진행하세요: + +- Karma를 통해 [가스리스 트랜잭션을 적용](/build-for-karma/guides/gasless-integration)하여 사용자가 가스비를 지불할 필요 없도록 하기 +- Karma를 사용한 평판 인식 기능 구축을 위한 [평판 적용 가이드 읽기](/build-for-karma/guides/reputation-integration) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md similarity index 96% rename from i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md rename to i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md index 5e9def2..2801960 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md @@ -9,7 +9,7 @@ - **Foundry**: [공식 Foundry 문서](https://book.getfoundry.sh/getting-started/installation)에서 설치 - **이더리움 지갑**: Status Network 테스트넷용 개인키 - **테스트넷 ETH**: Status Network 테스트넷 ETH가 필요합니다 - - Status Network 테스트넷 ETH는 [파우셋](/tools/testnet-faucets)에서 받을 수 있습니다 + - Status Network 테스트넷 ETH는 [파우셋](/tools/core-infrastructure/testnet-faucets)에서 받을 수 있습니다 - **기본 지식**: Solidity와 명령줄 사용 경험 ## 달성 목표 @@ -200,7 +200,7 @@ forge test 문제가 발생한 경우: - [텔레그램 커뮤니티](https://t.me/statusl2)에 참여 -- [네트워크 세부정보](/general-info/network-details) 참조 +- [네트워크 세부정보](/overview/general-info/network-details) 참조 ## 추가 리소스 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md similarity index 95% rename from i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md rename to i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md index 1d62c33..915e4f3 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md @@ -9,7 +9,7 @@ - **Node.js와 npm**: [공식 Node.js 웹사이트](https://nodejs.org/)에서 다운로드 및 설치 - **이더리움 지갑**: Status Network 테스트넷용 개인키가 있는 MetaMask 또는 다른 지갑 - **테스트넷 ETH**: Status Network 테스트넷 ETH가 필요합니다 - - Status Network 테스트넷 ETH는 [파우셋](/tools/testnet-faucets)에서 받을 수 있습니다 + - Status Network 테스트넷 ETH는 [파우셋](/tools/core-infrastructure/testnet-faucets)에서 받을 수 있습니다 - **기본 지식**: Solidity, Hardhat, 명령줄 사용 경험 ## 달성 목표 @@ -158,4 +158,4 @@ npx hardhat run scripts/interact.ts --network statusTestnet 문제가 발생한 경우: - [텔레그램 커뮤니티](https://t.me/statusl2)에 참여 -- [네트워크 세부정보](/general-info/network-details) 참조 +- [네트워크 세부정보](/overview/general-info/network-details) 참조 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md similarity index 89% rename from i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md rename to i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md index 71e238b..f57c897 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md @@ -9,8 +9,8 @@ - **웹 브라우저**: Chrome이나 Firefox와 같은 최신 브라우저 - **MetaMask**: [MetaMask](https://metamask.io) 브라우저 확장 프로그램 설치 - **테스트넷 ETH**: Status Network 테스트넷 ETH가 필요합니다 - - Status Network 테스트넷 ETH는 [파우셋](/tools/testnet-faucets)에서 받을 수 있습니다 -- **네트워크 구성**: [네트워크 추가 가이드](/general-info/add-status-network)에 따라 MetaMask에 Status Network 테스트넷 추가 + - Status Network 테스트넷 ETH는 [파우셋](/tools/core-infrastructure/testnet-faucets)에서 받을 수 있습니다 +- **네트워크 구성**: [네트워크 추가 가이드](/overview/general-info/add-status-network)에 따라 MetaMask에 Status Network 테스트넷 추가 ## 단계 @@ -91,7 +91,7 @@ contract HelloWorld { 문제가 발생한 경우: - [텔레그램 커뮤니티](https://t.me/statusl2)에 참여 -- [네트워크 세부정보](/general-info/network-details) 참조 +- [네트워크 세부정보](/overview/general-info/network-details) 참조 ## 추가 리소스 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md similarity index 91% rename from i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md rename to i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md index 416d97c..cc250bd 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md @@ -14,7 +14,7 @@ keywords: [Scaffold-ETH 2, 스마트 컨트랙트 배포, Status Network 개발, - **Foundry** (선택사항): Foundry 워크플로우를 선택하는 경우 - **Ethereum 지갑** (선택사항): 테스트용 EVM 지갑 개인 키, 없어도 가능 -> **참고**: Status Network는 가스 없는 트랜잭션을 지원하므로 테스트넷 ETH는 선택사항입니다. 여전히 테스트넷 ETH가 필요하다면 [Faucet](/tools/testnet-faucets)를 참고하세요. +> **참고**: Status Network는 가스 없는 트랜잭션을 지원하므로 테스트넷 ETH는 선택사항입니다. 여전히 테스트넷 ETH가 필요하다면 [Faucet](/tools/core-infrastructure/testnet-faucets)를 참고하세요. ## 빠른 시작 @@ -58,4 +58,4 @@ keywords: [Scaffold-ETH 2, 스마트 컨트랙트 배포, Status Network 개발, 자세한 구성 옵션, 문제 해결 및 사용법에 대해서는: - 포괄적인 문서는 [확장 README](https://github.com/status-im/status-network-scaffold-extension)를 확인하세요 - [Telegram 커뮤니티](https://t.me/statusl2)에 참여하여 지원을 요청하세요 -- [네트워크 세부사항](/general-info/network-details)을 확인하세요 +- [네트워크 세부사항](/overview/general-info/network-details)을 확인하세요 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md new file mode 100644 index 0000000..05b13f4 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md @@ -0,0 +1,365 @@ +--- +title: 가스리스 적용 가이드 +description: Status Network에서 가스리스 UX를 구축하기 위한 실용적인 통합 가이드. +keywords: [가스리스, linea_estimateGas, 스테이터스 네트워크, deny list, 빌더, 가스리스, UX] +slug: /build-for-karma/guides/gasless-integration +sidebar_position: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Status Network는 프로토콜 레벨에서 가스리스 트랜잭션을 제공합니다. 페이마스터나 릴레이어가 필요하지 않습니다. 빌더로서 핵심 작업은 sender의 상태에 따라 수수료를 정확하게 추정하고 표시하는 것입니다. + +:::important 핵심 규칙 +트랜잭션 UX를 준비할 때 신뢰할 수 있는 가스비 값 출처로 `linea_estimateGas` RPC 메서드를 사용하세요. +::: + +기타 JSON-RPC 메서드 레퍼런스는 [JSON-RPC API](/tools/rpc/json-rpc)를 참조하세요. + +## 카르마가 적용된 수수료 추정법 + +Linea에서 [`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas)는 이미 가스 추정을 위한 권장 방법입니다. +**단일 호출**에서 `gasLimit`, `baseFeePerGas`, `priorityFeePerGas`를 반환하며, 수수료 관련 필드들은 압축된 트랜잭션의 크기, L1 검증 비용, L1/L2 가스 가격 비율을 반영합니다. 이는 `eth_` 네임스페이스 메서드에는 적용되지 않은 요소들입니다. + +Status Network는 `linea_estimateGas`를 더욱 확장하여 수수료 필드에 **카르마 시스템**을 반영합니다. 자격이 있는 사용자의 경우 수수료가 0으로 줄어들 수 있고, 거부 목록에 있는 사용자의 수수료는 증가할 수 있습니다. + +```mermaid +flowchart TD + A[사용자 트랜잭션 호출] --> B["from 파라미터와 함께 linea_estimateGas 호출"] + B --> C{수수료 계산} + C -->|base+priority = 0| D[가스리스 UX 표시] + C -->|프리미엄 수수료| F[프리미엄 수수료 UX 표시] + D --> G[트랜잭션 전송] + F --> G +``` + +*그림: `linea_estimateGas`를 사용한 가스 추정 플로우* + +이것이 빌더가 Status Network에서 트랜잭션 비용을 추정하거나 사용자를 위한 EIP-1559 수수료 필드를 입력해줄 때 `linea_estimateGas`를 사용해야 하는 이유입니다. + +:::info 자세히 보기 +카르마와 가스비 및 트랜잭션 권한에 미치는 영향에 대한 자세한 설명은 [카르마 토크노믹스](../../overview/tokenomics/karmic-tokenomics) 페이지를 참조하세요. + +가스리스 시스템이 어떻게 구현되고 적용되는지에 대한 기술적 세부사항은 [가스리스 트랜잭션](../../overview/general-info/gasless-transactions) 문서를 참조하세요. +::: + +## `linea_estimateGas` 요청/응답 형태 + +### 요청 + +`linea_estimateGas`는 `eth_estimateGas`와 **동일한 트랜잭션 호출 객체**를 받습니다. +`gasLimit`(`eth_estimateGas`와 동일한 EVM 실행 로직 사용)과 함께 Linea의 L2 전용 가격 책정과 Status Network의 카르마 규칙을 모두 반영한 수수료 필드를 단일 응답으로 반환합니다. + +:::important +**항상 `from`을 포함하세요.** 해당 값이 없으면 노드가 카르마/할당량/거부 목록 로직을 적용할 수 없습니다. +::: + +### 응답 + +`linea_estimateGas`는 다음을 포함하는 객체를 반환합니다: + +- `gasLimit`: 16진수 숫자값 - EVM 실행을 위한 추정 가스 단위(`eth_estimateGas`와 동일한 계산 결과) +- `baseFeePerGas`: 16진수 숫자값 - Status Network의 카르마 규칙을 반영한 다음 블록의 기본 수수료 +- `priorityFeePerGas`: 16진수 숫자값 - Status Network의 카르마 규칙을 반영한 제안 우선순위 수수료 + +이러한 수수료 필드는 `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`와 같은 `eth_` 네임스페이스 호출이 반환하는 값과 크게 다를 수 있습니다. `eth_` 네임스페이스들은 Linea의 L2 전용 가격 책정이나 Status Network의 카르마 조정을 인식하지 못합니다. + + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "gasLimit": "0x5208", + "baseFeePerGas": "0x0", + "priorityFeePerGas": "0x0" + } +} +``` + + + + +표준 EVM 플로우에서는 가스 한도와 수수료 데이터를 수집하기 위해 별도의 `eth_` 호출이 여러 번 필요합니다: + +**eth_estimateGas** + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5208" +} +``` + +**eth_maxPriorityFeePerGas** + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": "0x59682f00" +} +``` + +**eth_getBlockByNumber** + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "number": ..., + "baseFeePerGas": "0x3b9aca00", + ... + } +} +``` + + + + + +## 마이그레이션 안내: 다중 `eth_` 호출에서 단일 `linea_estimateGas`로 + +이 섹션은 일반적인 "다중 `eth_` 호출을 통한 EIP-1559" 플로우에서 단일 `linea_estimateGas` 호출로 마이그레이션하는 방법을 보여줍니다. Status Network에서의 더 정확한 L2 전용 수수료 데이터와 카르마 인식 가격 책정을 제공합니다. + +### 이전: `eth_` 네임스페이스를 사용한 일반적인 EVM 체인의 EIP-1559 추정 플로우 + +많은 EVM 체인에서 일반적인 EIP-1559 추정 플로우는 다음과 같습니다: + +1. **가스 한도 추정** — `eth_estimateGas` +2. **`maxPriorityFeePerGas` 조회** — `eth_maxPriorityFeePerGas` 및 `eth_feeHistory` +3. **`baseFeePerGas` 조회** — `eth_getBlockByNumber` +4. 위 값들을 조합하여 EIP-1559 트랜잭션 구성: + - `gas` + - `maxPriorityFeePerGas` + - `maxFeePerGas`, 일반적으로 $2 \cdot \mathrm{baseFeePerGas} + \mathrm{maxPriorityFeePerGas}$ + + + + + +```bash +# 1) Gas limit (EVM execution) +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"eth_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_RPC_URL + +# 2) Fetch suggested tip amount +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":2,"method":"eth_maxPriorityFeePerGas","params":[]}' \ + https://YOUR_RPC_URL + +# 3) Fetch base fee +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":3,"method":"eth_getBlockByNumber","params":["pending",false]}' \ + https://YOUR_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const gas = await provider.estimateGas(call); +const maxPriorityFeePerGas = await provider.send('eth_maxPriorityFeePerGas', []); +const pendingBlock = await provider.getBlock('pending'); + +const baseFeePerGas = pendingBlock?.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + BigInt(maxPriorityFeePerGas); + +console.log({ + gas: `0x${gas.toString(16)}`, + maxPriorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_RPC_URL'), +}); + +const call = { + account: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const gas = await client.estimateGas(call); +const maxPriorityFeePerGas = await client.getMaxPriorityFeePerGas(); +const pendingBlock = await client.getBlock({ blockTag: 'pending' }); + +const baseFeePerGas = pendingBlock.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + maxPriorityFeePerGas; + +console.log({ + gas, + maxPriorityFeePerGas, + maxFeePerGas, +}); +``` + + + + + +### 이후: `linea_estimateGas`를 사용한 Status Network 가스 추정 플로우 + +Status Network에서는 `linea_estimateGas`를 통해 수수료 제안을 가져와야 합니다. 정확한 수수료 추천이 트랜잭션 전송자의 카르마 보유량에 따라 달라지기 때문입니다: + +- 계정이 **가스리스** 트랜잭션 대상일 수 있습니다 +- 거부 목록에 있는 계정은 **프리미엄 가스비**를 지불해야 할 수 있습니다 + + + + + +```bash +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"linea_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_STATUS_NETWORK_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_STATUS_NETWORK_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await provider.send( + 'linea_estimateGas', + [call], +); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_STATUS_NETWORK_RPC_URL'), +}); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await client.request({ + method: 'linea_estimateGas', + params: [call], +}); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + + +:::tip 툴링 구현 +많은 이더리움 라이브러리가 내부적으로 `eth_estimateGas`를 호출합니다(예: `provider.estimateGas(...)`). Status Network에서는 표준 `eth_` 메서드에 대해 해당 라이브러리 사용을 유지하되, 사용자를 위한 트랜잭션 파라미터를 구성하거나 표시할 때만은 **가스 한도와 수수료 필드를 `linea_estimateGas`를 통해 명시적으로 가져오는 것을 권고합니다.**. +::: + +## UI에서의 수수료 처리 시나리오 + +### 1) 가스리스 + +`baseFeePerGas`와 `priorityFeePerGas`가 모두 0일 때: + +- 명확한 무료 트랜잭션 상태를 표시합니다. +- 불필요한 수수료 경고를 건너뜁니다. + +### 2) 프리미엄 수수료 + +sender가 거부 목록에 있을 때(할당량 초과 또는 RLN 정책): + +- 수수료 금액을 표시하고 할당량 초과 또는 스팸 정책으로 인해 프리미엄 가스가 적용됨을 설명합니다. +- sender가 수수료를 지불하거나 할당량 기간이 갱신될 때까지 기다릴 수 있음을 명확히 합니다. +- 프리미엄 가스를 지불할 의향이 있다면 트랜잭션 전송이 가능하도록 유지합니다. 완전히 차단하지 마세요. + +## 주로 빠지는 함정들 + +| 함정 | 해결법 | +|---|---| +| 수수료 결정에 `eth_` 메서드 사용(`eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`) | `linea_estimateGas` 사용 | +| `linea_estimateGas` 호출 시 `from` 생략 | 카르마가 적용된 추정값을 받으려면 항상 sender 주소를 전달 | +| 수수료값을 가정하여 하드코딩 | 반환된 `baseFeePerGas`와 `priorityFeePerGas` 값으로 수수료 UI 구성 | +| 모든 트랜잭션이 가스리스라고 가정 | 가스리스(수수료 0)와 거부 목록(프리미엄 수수료) 각각 처리 | +| 재시도 시 가스비 추정값 캐싱 | 전송 시점 인근에 재추정 필요 — sender의 카르마 상태가 변경될 수 있음 | + +## 다음 단계 + +- [JSON-RPC API](/tools/rpc/json-rpc) +- [평판 적용하기](/build-for-karma/guides/reputation-integration) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md new file mode 100644 index 0000000..b282b25 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md @@ -0,0 +1,20 @@ +--- +title: 카르마 사용하기 +description: Status Network에서 카르마 기반 가스리스 UX 및 평판 인식 기능을 통합하기 위한 시작점입니다. +keywords: [카르마, gasless, reputation, integration, Status Network] +slug: /build-for-karma/guides +sidebar_position: 3 +--- + +카르마는 Status Network에서 가스리스 트랜잭션 권한과 평판을 제공합니다. +이 섹션은 앱에서 가스리스 동작과 티어 기반 프로덕트 로직을 적용하는 방법을 안내합니다. + +## 시작하기 + +**트랜잭션을 처리하시나요?** + +- [가스리스 적용](/build-for-karma/guides/gasless-integration)를 참고하여 `linea_estimateGas`를 가스리스와 프리미엄 수수료 결과의 단일 진실 공급원으로 사용하세요. + +**평판에 따라 기능을 제한하고 싶나요?** + +- [평판 적용](/build-for-karma/guides/reputation-integration)으로 넘어가 온체인에서 카르마 잔액과 티어를 읽고, 컨트랙트단 제한을 적용하며, 티어 인식 프론트엔드를 설계하는 방법을 알아보세요. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md new file mode 100644 index 0000000..53afea8 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md @@ -0,0 +1,453 @@ +--- +title: 평판 적용 가이드 +description: Status Network에서 카르마 티어를 읽고, 평판에 따라 기능을 제한하고, 카르마가 적용된 스마트 컨트랙트와 프론트엔드를 구축하는 방법. +keywords: [카르마, 적용, 스마트 컨트랙트, 소울바운드 토큰, 평판, 계층, 가스리스, 스테이터스 네트워크, 개발자 가이드] +slug: /build-for-karma/guides/reputation-integration +sidebar_position: 4 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +카르마는 Status Network의 소울바운드 평판 토큰입니다. 인간과 봇을 포함한 모든 이의 계정은 SNT 스테이킹, 자산 브릿징, 유동성 제공, 앱 사용, 프리미엄 가스비 지불 등 실제 네트워크 참여를 통해 카르마를 획득합니다. 카르마는 구매, 판매 또는 전송할 수 없습니다. + +본 가이드는 카르마 정보를 읽고 사용자의 평판 티어에 따라 다르게 반응하는 앱을 구축하는 방법을 다룹니다. + +## 온체인에서 카르마 읽기 + +카르마 상태는 두 개의 컨트랙트에 분산되어 있습니다: + +- **Karma** — 소울바운드 ERC-20 토큰. `balanceOf`는 해당 계정의 슬래싱량이 제외된 순 잔액을 반환합니다. `transfer`나 `approve` 함수 호출은 모두 거절됩니다. +- **KarmaTiers** — 잔액에 해당하는 티어를 알려줍니다. `getTierIdByKarmaBalance(balance)`를 호출한 후 `getTierById(tierId)`를 호출하여 사용자의 티어와 `txPerEpoch` 할당량을 확인합니다. + + + + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/// @notice Minimal interface for the Karma soulbound token. +interface IKarma { + /// @notice Net Karma balance of `account` after slashing. + function balanceOf(address account) external view returns (uint256); + + /// @notice Total amount slashed from `account` across all distributors. + function slashedAmountOf(address account) external view returns (uint256); +} + +/// @notice Minimal interface for the KarmaTiers registry. +interface IKarmaTiers { + struct Tier { + uint256 minKarma; + uint256 maxKarma; + string name; + uint32 txPerEpoch; // gasless transactions allowed per epoch + } + + /// @notice Returns the highest tier ID the given karma balance qualifies for. + function getTierIdByKarmaBalance(uint256 karmaBalance) external view returns (uint8); + + /// @notice Returns the full Tier struct for a given tier ID. + function getTierById(uint8 tierId) external view returns (Tier memory); + + /// @notice Returns the total number of configured tiers. + function getTierCount() external view returns (uint256); +} + +contract KarmaGated { + IKarma public karma; + IKarmaTiers public karmaTiers; + + constructor(address _karmaContract, address _karmaTiersContract) { + karma = IKarma(_karmaContract); + karmaTiers = IKarmaTiers(_karmaTiersContract); + } + + /// @notice Resolves the tier ID for `user` from their current Karma balance. + function tierIdOf(address user) public view returns (uint8) { + return karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + } + + modifier onlyTier(uint8 minTier) { + require(tierIdOf(msg.sender) >= minTier, "Karma tier too low"); + _; + } + + function premiumAction() external onlyTier(3) { + // Only users at tier 3 or above can call this + } + + function getDiscount(address user) external view returns (uint256) { + uint8 tierId = tierIdOf(user); + // Higher tiers get bigger discounts + return uint256(tierId) * 5; // 0%, 5%, 10%, ... + } +} +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider( + 'https://public.sepolia.rpc.status.network' +); + +const KARMA_ABI = [ + 'function balanceOf(address account) view returns (uint256)', + 'function slashedAmountOf(address account) view returns (uint256)', +]; + +const KARMA_TIERS_ABI = [ + 'function getTierIdByKarmaBalance(uint256 karmaBalance) view returns (uint8)', + 'function getTierById(uint8 tierId) view returns (tuple(uint256 minKarma, uint256 maxKarma, string name, uint32 txPerEpoch))', + 'function getTierCount() view returns (uint256)', +]; + +const karma = new ethers.Contract(KARMA_ADDRESS, KARMA_ABI, provider); +const karmaTiers = new ethers.Contract(KARMA_TIERS_ADDRESS, KARMA_TIERS_ABI, provider); + +// 사용자의 Karma 잔액을 읽고 티어를 확인 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +console.log(`Karma 잔액: ${ethers.formatEther(balance)} KARMA`); +console.log(`티어: ${tier.name} (ID ${tierId})`); +console.log(`에폭당 Tx 할당량: ${tier.txPerEpoch}`); +``` + + + + +```ts +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://public.sepolia.rpc.status.network'), +}); + +const karmaAbi = [ + { + name: 'balanceOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, + { + name: 'slashedAmountOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, +] as const; + +const karmaTiersAbi = [ + { + name: 'getTierIdByKarmaBalance', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'karmaBalance', type: 'uint256' }], + outputs: [{ name: '', type: 'uint8' }], + }, + { + name: 'getTierById', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'tierId', type: 'uint8' }], + outputs: [{ + name: 'tier', + type: 'tuple', + components: [ + { name: 'minKarma', type: 'uint256' }, + { name: 'maxKarma', type: 'uint256' }, + { name: 'name', type: 'string' }, + { name: 'txPerEpoch', type: 'uint32' }, + ], + }], + }, +] as const; + +// 두 번의 순차 읽기: 잔액 → 티어 ID → 티어 상세 +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +console.log(`티어: ${tier.name} (ID ${tierId})`); +console.log(`에폭당 Tx 할당량: ${tier.txPerEpoch}`); +``` + + + + + +:::note 컨트랙트 주소 +Karma와 KarmaTiers의 테스트넷 컨트랙트 주소는 [컨트랙트 주소](/overview/general-info/contract-addresses/testnet-contracts) 페이지에 게시되어 있습니다. +::: + +## 가능한 적용 패턴 + +### 기능 제한 + +앱 내 기능을 카르마 티어에 따라 잠금 해제합니다. +[온체인에서 카르마 읽기](#온체인에서-카르마-읽기) 섹션에서 확인할 수 있는 `onlyTier` modifier가 컨트랙트 레벨에서 접근을 제어합니다. +혹은 코드 내에서 `tierId`흫 활용하여 제어할 수도 있습니다: + + + + + +```solidity +function accessPremiumContent() external onlyTier(3) { + // Only users at tier 3 or above can call this +} +``` + + + + +```js +// Karma 잔액에서 티어를 확인한 후 UI 기능을 제한한다 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + + +### 동적 가격 책정 + +높은 카르마 사용자에게 할인 요금을 제공합니다: + + + + + +```solidity +function calculateFee(address user, uint256 baseAmount) public view returns (uint256) { + uint8 tierId = karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + // Each tier gives 5% discount + uint256 discount = uint256(tierId) * 5; + return baseAmount * (100 - discount) / 100; +} +``` + + + + +```js +// 사용자의 현재 티어를 기반으로 할인율 계산 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +const discount = BigInt(tierId) * 5n; // 티어당 5% 할인 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`티어 ${tierId}: ${discount}% 할인 → 수수료 = ${fee}`); +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const discount = BigInt(tierId) * 5n; // 티어당 5% 할인 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`티어 ${tierId}: ${discount}% 할인 → 수수료 = ${fee}`); +``` + + + + + +### 평판 표기 + +`KarmaTiers` 컨트랙트에서 직접 티어 이름을 읽어 UI에 카르마 티어를 표시, 신뢰 지표로 활용합니다: + + + + + +```js +// 온체인에서 티어 이름을 가져옴 — 하드코딩된 배열 불필요 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +function KarmaBadge({ tierName }) { + return {tierName}; +} + +// 사용 + +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +function KarmaBadge({ tierName }: { tierName: string }) { + return {tierName}; +} + +// 사용 + +``` + + + + + +### 가중 거버넌스 + +앱의 거버넌스에서 카르마를 투표 가중치로 사용합니다: + + + + + +```solidity +function vote(uint256 proposalId, bool support) external { + uint256 weight = karma.balanceOf(msg.sender); + proposals[proposalId].votes += support ? int256(weight) : -int256(weight); +} +``` + + + + +```js +// 사용자의 Karma 잔액을 투표 가중치로 읽은 후 제출 +const weight = await karma.balanceOf(userAddress); +console.log(`투표 가중치: ${ethers.formatEther(weight)} KARMA`); + +// 거버넌스 컨트랙트 호출 +const tx = await governanceContract.vote(proposalId, support); +await tx.wait(); +``` + + + + +```ts +import { formatEther, parseAbi } from 'viem'; + +// Karma 잔액에서 투표 가중치 읽기 +const weight = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); +console.log(`투표 가중치: ${formatEther(weight)} KARMA`); + +// 거버넌스 컨트랙트를 통해 투표 제출 +const { request } = await client.simulateContract({ + address: GOVERNANCE_ADDRESS, + abi: parseAbi(['function vote(uint256 proposalId, bool support) external']), + functionName: 'vote', + args: [proposalId, support], + account: userAddress, +}); +await walletClient.writeContract(request); +``` + + + + + +## 다음 단계 + +- [가스리스 적용하기](/build-for-karma/guides/gasless-integration)을 참조하여 가스리스 트랜잭션에 카르마 적용하기 +- [카르마 토크노믹스](/overview/tokenomics/karmic-tokenomics)에서 카르마가 어떻게 획득되고 사용되는지 확인하기 +- [가스리스 트랜잭션](/overview/general-info/gasless-transactions)에서 RLN 기반 가스리스 시스템의 기술적 세부사항 알아보기 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/index.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/index.md new file mode 100644 index 0000000..f3ce96f --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/index.md @@ -0,0 +1,21 @@ +--- +id: build-for-karma-index +title: Build for Karma +description: Status Network에서 빌드하는 데 필요한 모든 것 — 가스리스 및 평판 통합 가이드, 배포 튜토리얼, 앱 아이디어. +keywords: [Status Network, builder guides, Karma, gasless integration, reputation, deploy contracts, app ideas, developer documentation] +slug: /build-for-karma +sidebar_position: 1 +--- + +이 섹션은 스테이터스 네트워크의 빌더 허브입니다. 이곳에서 빌드하는 이점을 이해하고, 무엇을 만들지 탐색하고, 가스리스 트랜잭션 구현 방법을 배우거나, 첫 번째 스마트 컨트랙트를 배포하는 등, 카르마를 중점으로 둔 개발에 필요한 모든 것이 여기에 있습니다. + +## 시작하기 + +- [**왜 스테이터스 네트워크인가**](/build-for-karma/why-status-network): 이곳에서 빌드해야 하는 이유 — 가스리스 경제, 카르마, 공공 자금, 다른 L2들과의 비교. +- [**아이디어 카탈로그**](/build-for-karma/what-to-build): 앱 아이디어들을 모아둔 인터랙티브 아이디어 카탈로그. +- [**카르마 사용하기**](/build-for-karma/guides): 가스리스 트랜잭션과 평판 기능을 앱에 적용하기 위한 기술 가이드. +- [**첫 번째 컨트랙트 배포**](/build-for-karma/deploying-contracts): Hardhat, Foundry, Remix 또는 Scaffold-ETH 2를 사용한 단계별 컨트랙트 배포 방법. + +## 커뮤니티 + +- [Telegram 빌더 커뮤니티](https://t.me/statusl2)에 참여하여 스테이터스 네트워크에서의 개발에 대한 도움을 받으세요 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md new file mode 100644 index 0000000..d5f63e8 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md @@ -0,0 +1,31 @@ +--- +title: 스테이터스 네트워크에서 만들 수 있는 다양한 앱 아이디어 카탈로그 +description: 카테고리, 노력, 전달 프로필별로 구성된 스테이터스 네트워크용 고성과 앱 아이디어 스캔 우선 카탈로그. +keywords: [Status Network, app ideas, builder ideas, Karma apps, privacy apps, gasless apps, DeFi, social apps, games, MVP] +sidebar_position: 3 +--- + +import IdeaCatalog from '@site/src/components/IdeaCatalog/IdeaCatalog'; + +스테이터스 네트워크는 가스리스 UX, 카르마 평판 시스템 그리고 근본적인 프라이버시를 하나로 모았습니다. +그로 인해 다른 체인에서는 볼 수 없는 제품들을 구현 가능하게 합니다. + +아래는 스테이터스 네트워크에 적합하다고 생각하는 예시 제품들입니다. 물론 이 아이디어에 제한될 필요는 없습니다. + +필터를 사용하여 여러분의 전문성과 야망에 맞는 아이디어를 찾아보세요. 카드를 클릭하면 전체 내용을 확인할 수 있습니다. + + + +## 지금 바로 구축하기 + +- [Quick Start](/overview/introduction/quick-start) +- [가스리스 및 평판을 위한 카르마 적용법](/build-for-karma/guides) +- [스테이터스 네트워크에 컨트랙트 배포하기](/build-for-karma/deploying-contracts) +- [Telegram Builder's Community](https://t.me/statusl2) + +## Ecosystem & Funding + +빌더는 카르마 보유자가 운영하는 공공 자금 풀에서 지속적인 자금을 지원 받을 수 있습니다. +앱의 성과가 높아질수록 카르마를 더 많이 획득하고, 향후 배분에 대한 영향력이 강해집니다. + +자세히 보기 → [Ecosystem & Funding](/overview/tokenomics/public-funding) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md new file mode 100644 index 0000000..f6ff4bf --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md @@ -0,0 +1,138 @@ +--- +title: Status Network에서 구축해야 하는 이유 +description: Status Network에서 구축해야 하는 이유 — 가스리스 트랜잭션, Karma 평판, 지속 가능한 공공 자금 조달, 그리고 다른 L2와의 비교. +keywords: [Status Network, why build, L2 comparison, gasless, Karma, public funding, developer advantages, Linea zkEVM] +sidebar_position: 2 +--- + +여러분이 선택할 수 있는 수십 개의 L2들 중에서 스테이터스 네트워크를 주목할 만한 이유를 소개합니다. + +
+ +
+
개발자 자금
+
+
+
Status Network
+

앱의 성과에 따라 확장되는 지속적인 수익 풀

+
+
+
일반적인 L2
+

몇 달마다 재신청해야하는 일회성 보조금

+
+
+
+
+ +
+
사용자 가스
+
+
+
Status Network
+

카르마로 완전히 무료 — 페이마스터, 릴레이어, 계정 추상화 등 설정 불필요

+
+
+
일반적인 L2
+

사용자가 가스를 지불하거나, 개발자가 페이마스터 + 릴레이어 인프라 운영

+
+
+
+
+ +
+
사용자 평판
+
+
+
Status Network
+

카르마를 통한 네트워크 전역 평판 시스템 — 스팸 방지, 신뢰 신호, 기능 제한 등 활용 가능

+
+
+
일반적인 L2
+

없음 — 직접 구축하거나 서드파티 솔루션 사용

+
+
+
+
+ +
+
프라이버시
+
+
+
Status Network
+

네이티브 ZK 기반 도구 — Rate Limiting Nullifiers 등

+
+
+
일반적인 L2
+

서드파티

+
+
+
+
+
+ +## 지속 가능한 공공 자금 조달 + +스테이터스 네트워크는 일회성 보조금이나 재단 자금에 의존하지 않습니다. 대신 다음으로 공급되는 지속적인 공공 자금 풀이 있습니다: + +- 브릿지된 수익 자산(ETH, 스테이블코인 등)으로부터 나오는 **네이티브 수익** +- 네이티브 탈중앙화 거래소의 **DEX 수수료** +- 거부 목록 사용자의 **프리미엄 가스 수수료** +- 향후 출시될 추가적인 **네이티브 앱들의 수수료**(대출, NFT, 런치패드 등) + +자세히 보기 → [Economic Model](/overview/tokenomics/economic-model) + +카르마 보유자는 이 공공 자금 풀이 앱과 빌더에게 어떻게 분배될지 투표로 결정합니다. 앱이 활동과 트랜잭션 볼륨을 생성하며 네트워크에 더 많이 기여할수록 앱 사용자와 함께 더 많은 카르마를 획득하고, 향후 배분에 대한 영향력을 키울 수 있습니다. + +**빌더에게 의미하는 바:** + +- 몇 달마다 재신청해야 하는 일회성 보조금이 아니라 반복 수익 스트림에 자동 가입 +- 앱의 성과에 따라 자금이 확장됨. 사용자가 증가 -> 카르마 증가 -> 더 많은 인센티브 +- 커뮤니티 거버넌스 배분, 재단 리스크 없음 + +자세히 보기 → [Public Funding](/overview/tokenomics/public-funding) + +## 가스리스를 디폴트로 + +대부분의 체인들은 "가스리스"를 위해서 페이마스터 설정, 릴레이어 운영, 또는 계정 추상화 SDK 적용 등 개발자의 추가적인 조치가 필요합니다. 스테이터스 네트워크에서는 가스리스가 기본 동작입니다. + +Karma를 보유한 주소는 일정량의 무료 트랜잭션을 할당 받습니다. 페이마스터 X. 릴레이어 X. 특별한 지갑 설정 X. 자격이 있는 사용자에게 앱이 가스 수수료 없이 작동합니다. + +**빌더에게 의미하는 바:** + +- 가스로 인한 UX 마찰 없음. 온보딩 과정에서 "가스용 ETH 브릿지" 때문에 사용자를 잃지 않음 +- ERC-4337, 메타 트랜잭션 또는 가스 릴레이 패턴 별도 적용 불필요 +- 사용자 대신 가스 지불을 위한 인프라 비용 없음 + +가스리스 시스템은 [Rate Limiting Nullifiers (RLN)](/overview/general-info/gasless-transactions/#rln)라는 영지식 스팸 방지 메커니즘을 기반으로 시퀀서 레벨에서 적용됩니다. + +## 내장된 카르마 평판 시스템 + +카르마는 스테이킹, 브릿징, 유동성 제공, 앱 사용 또는 프리미엄 가스 지불과 같은 진정한 네트워크 참여를 통해 모든 사용자가 획득하는 소울바운드(비양도) 토큰입니다. 구매하거나 전송할 수 없습니다. + +**빌더에게 의미하는 바:** + +- **신뢰 신호**: 높은 카르마 티어 사용자는 검증된 활발한 참여자임을 의미함 +- **기능 제한**: 빌더는 사용자의 카르마 등급에 따라 프리미엄 기능, 우선 접근, 더 나은 이율 등 기능을 제한적으로 제공 수 있음 +- **스팸 방지**: 네트워크 자체가 RLN 메커니즘으로 스팸을 방지하며, 카르마 등급이 가스리스 트랜잭션 할당량을 직접 제어하므로 높은 카르마 티어 사용자는 본질적으로 스팸 가능성이 낮음 +- **콜드 스타트 문제 없음**: 앱은 생태계에서 네트워크 전역으로 구축된 평판의 혜택을 바로 적용할 수 있음. 처음부터 사용자 기반을 다져야 하는 문제 해소. + +자세히 보기 → [Karmic Tokenomics](/overview/tokenomics/karmic-tokenomics) + +## 프라이버시 중심적인 공공재 + +스테이터스 네트워크는 [Institute of Free Technology (IFT)](https://free.technology)의 기술로 구축되었습니다. 특히 가스리스 트랜잭션 시스템은 [Vac](https://vac.dev)(IFT 연구 부서)이 개발한 영지식 스팸 방지 메커니즘인 [RLN (Rate Limiting Nullifiers)](https://vac.dev/rln)를 사용합니다. + +우리는 디지털 시대의 시민권을 보호하는 공공재를 구축하고자 하는 IFT의 기술 비전과 함께합니다. 스테이터스 네트워크는 가스리스 특성을 활용하여 프라이버시 중심 모듈을 추가할 예정입니다. + + + +## EVM 호환성 + +스테이터스 네트워크는 [Linea zkEVM](https://linea.build) 스택을 기반으로 구축되었습니다. 이는 빌더가 다음을 할 수 있음을 의미합니다: + +- 기존 Solidity 컨트랙트 수정 없이 그대로 배포 +- Hardhat, Foundry, ethers.js, viem 등 표준 이더리움 도구 사용 +- 표준 JSON-RPC 메서드 사용(가스 수수료 관련 일부 메서드 제외. 자세한 내용은 [JSON-RPC API](/tools/rpc/json-rpc) 참조) +- Linea의 롤업 아키텍처에서 상속된 영지식 증명 기반 보안 + +커스텀 VM 없음. 비표준 opcode 없음. 컨트랙트나 백엔드 재작성 불필요. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/add-status-network.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md similarity index 100% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/add-status-network.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md similarity index 58% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md index 68dd63d..7ab4f01 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md @@ -1,28 +1,28 @@ -# Status Network 테스트넷으로 브리징하기 +# Status Network 테스트넷으로 브릿지하기 -Status Network 브리지를 사용하면 Sepolia와 Status Network 테스트넷 간에 토큰을 전송할 수 있습니다. 브리지는 [bridge.status.network](https://bridge.status.network)에 배포되어 있습니다. +Status Network 브릿지를 사용하면 Sepolia와 Status Network 테스트넷 간에 토큰을 전송할 수 있습니다. 브릿지는 [bridge.status.network](https://bridge.status.network)에 배포되어 있습니다. ## 사전 준비사항 - MetaMask 또는 다른 Web3 지갑이 설치되어 있어야 함 - Sepolia 네트워크에 테스트넷 ETH 보유 -- Sepolia 네트워크에 브리징하고자 하는 토큰 보유 +- Sepolia 네트워크에 브릿지하고자 하는 토큰 보유 -## 브리징 과정 +## 브릿지 과정 1. [bridge.status.network](https://bridge.status.network) 방문 2. 우측 상단의 "지갑 연결" 버튼을 클릭하여 지갑 연결 -3. 드롭다운 메뉴에서 브리징할 토큰 선택 +3. 드롭다운 메뉴에서 브릿지할 토큰 선택 -4. 브리징할 금액 입력 +4. 브릿지할 금액 입력 -5. "브리지" 버튼을 클릭하고 지갑에서 거래 승인 +5. "브릿지" 버튼을 클릭하고 지갑에서 거래 승인 -6. 브리징 과정이 완료될 때까지 대기 - - 브리징은 보통 5-10분 정도 소요됩니다 - - 브리지 인터페이스에서 거래 상태를 확인할 수 있습니다 +6. 브릿지 과정이 완료될 때까지 대기 + - 브릿지은 보통 5-10분 정도 소요됩니다 + - 브릿지 인터페이스에서 거래 상태를 확인할 수 있습니다 ## 주요 참고사항 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md similarity index 100% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md similarity index 94% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md index d2208e7..bf491ff 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md @@ -1,7 +1,7 @@ --- title: 테스트넷 컨트랙트 -description: 브리지 컨트랙트, 핵심 인프라, L2 컨트랙트를 포함한 Status Network 테스트넷 컨트랙트 주소의 포괄적인 목록과 각각의 목적 및 블록 탐색기 링크. -keywords: [Status Network 컨트랙트, 테스트넷 주소, 스마트 컨트랙트, 브리지 컨트랙트, L1 컨트랙트, L2 컨트랙트, 블록체인 인프라] +description: 브릿지 컨트랙트, 핵심 인프라, L2 컨트랙트를 포함한 Status Network 테스트넷 컨트랙트 주소의 포괄적인 목록과 각각의 목적 및 블록 탐색기 링크. +keywords: [Status Network 컨트랙트, 테스트넷 주소, 스마트 컨트랙트, 브릿지 컨트랙트, L1 컨트랙트, L2 컨트랙트, 블록체인 인프라] --- # 테스트넷 컨트랙트 @@ -12,14 +12,14 @@ keywords: [Status Network 컨트랙트, 테스트넷 주소, 스마트 컨트랙 이 컨트랙트들은 Sepolia 테스트넷에 배포되어 있습니다. [Sepolia Etherscan](https://sepolia.etherscan.io)에서 확인할 수 있습니다. -### 브리지 컨트랙트 +### 브릿지 컨트랙트 - **Rollup Contract** - 주소: [`0x0Bf464f24D867ff0B20aE8f9C353a589138D6836`](https://sepolia.etherscan.io/address/0x0bf464f24d867ff0b20ae8f9c353a589138d6836) - 목적: L2의 유효성, DA 및 L1에서 L2로의 메시징을 관리 - **L1 Token Bridge Proxy** - 주소: [`0x01b44C5Ea321f921D93476cf54Aa8460db17a548`](https://sepolia.etherscan.io/address/0x01b44C5Ea321f921D93476cf54Aa8460db17a548) - - 목적: L1에서 토큰 브리징 작업을 관리 + - 목적: L1에서 토큰 브릿지 작업을 관리 ### 핵심 인프라 - **L1 Postman** @@ -38,14 +38,14 @@ keywords: [Status Network 컨트랙트, 테스트넷 주소, 스마트 컨트랙 이 컨트랙트들은 Status Network 테스트넷에 배포되어 있습니다. [Status Network Explorer](https://sepoliascan.status.network)에서 확인할 수 있습니다. -### 브리지 컨트랙트 +### 브릿지 컨트랙트 - **L2 Message Service** - 주소: [`0xe74Bd8db0440533F8915042D980AbAA86085821c`](https://sepoliascan.status.network/address/0xe74Bd8db0440533F8915042D980AbAA86085821c) - 목적: L2에서 L1로의 메시징을 관리 - **L2 Token Bridge Proxy** - 주소: [`0xbC7f9571152a8e21942b2aEa4831a27f1149af19`](https://sepoliascan.status.network/address/0xbC7f9571152a8e21942b2aEa4831a27f1149af19) - - 목적: L2에서 토큰 브리징 작업을 관리 + - 목적: L2에서 토큰 브릿지 작업을 관리 ### 인프라 컨트랙트 - **L2 Faucet** diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md similarity index 84% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md index e7eb51d..942b13a 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md @@ -5,7 +5,7 @@ Status Network에서 지원되는 토큰과 해당 컨트랙트 주소의 최신 이 저장소에는 다음 내용이 포함되어 있습니다: - L1(Sepolia)과 L2(Status Network) 양쪽의 토큰 주소 - 토큰 메타데이터(소수점, 심볼 등) -- 브리지 컨트랙트 매핑 +- 브릿지 컨트랙트 매핑 - Status Network에 배포된 앱 토큰 -토큰 목록은 토큰 브리징 작업의 정확성과 보안을 보장하기 위해 정기적으로 유지 관리되고 업데이트됩니다. +토큰 목록은 토큰 브릿지 작업의 정확성과 보안을 보장하기 위해 정기적으로 유지 관리되고 업데이트됩니다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md similarity index 77% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md index 1c78311..c90e839 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md @@ -9,9 +9,11 @@ keywords: [Status Network, 가스리스 트랜잭션, Linea, RLN, Rate Limiting Status Network는 대규모 가스리스 트랜잭션 도입을 목표로 합니다. 이 가스리스 접근 방식의 핵심 구성 요소는 Vac의 Rate Limiting Nullifier로, 기존 가스 수수료 없이도 트랜잭션 속도 제한을 가능하게 합니다. 이 문서는 가스리스 트랜잭션을 안전하게 활성화하는 데 필요한 아키텍처와 통합 요소를 설명합니다. -이러한 가스리스 트랜잭션의 구현 코드는 [Status Network 모노레포](https://github.com/status-im/status-network-monorepo)에서 확인할 수 있습니다. +가스리스 트랜잭션의 구현 코드는 [Status Network 모노레포](https://github.com/status-im/status-network-monorepo?tab=readme-ov-file#architecture-components)에서 확인할 수 있습니다. -### 1.2 RLN +가스리스의 운영 수준 구현에 대한 자세한 내용은 [Karma 통합 가이드](/build-for-karma/guides)를 참조하세요. + +## RLN RLN은 위반이 발생하지 않는 한 사용자 프라이버시를 손상시키지 않으면서 스팸을 방지하도록 설계된 영지식 시스템입니다. ZKP와 Shamir의 비밀 공유를 통해 시행되는 암호화 속도 제한으로 기존 가스 수수료를 대체합니다. @@ -21,7 +23,7 @@ RLN 특성: - **Shamir의 비밀 공유 및 Nullifier:** 사용자는 트랜잭션에 대한 고유한 nullifier를 생성하는 데 사용되는 비밀 키를 보유합니다. 사용자가 에포크(예: 블록 또는 타임스탬프) 내에서 트랜잭션 제한을 초과하면 비밀 키가 복구 가능해져 노출됩니다. - **스팸 탐지:** 제한을 초과하는 사용자는 효과적으로 자신의 비밀을 공개하게 되어 거부 목록 포함, 향후 높은 가스 비용 또는 잠재적인 토큰 슬래싱과 같은 처벌을 받게 됩니다. -### 1.3. RLN 멤버십 관리 +### RLN 멤버십 관리 RLN은 대규모 멤버십 증명을 효율적으로 처리하기 위해 희소 머클 트리를 사용합니다. 벤치마킹 연구에 따르면 100만 계정을 지원하는 높이 20의 트리가 증명 생성 및 검증에 최적의 성능을 제공합니다. 100만 계정을 초과하는 확장성을 위해 레지스트리와 함께 여러 SMT를 사용하여 사용자를 적절한 트리로 안내할 수 있습니다. @@ -30,24 +32,32 @@ Prover에는 Karma가 새 주소에 할당되는 Karma Contract의 이벤트를 ```mermaid graph TD A[사용자 지갑] -->|화이트리스트 앱을 통한 첫 L2 액션| B(Karma 발급) - A -->|SN으로 브리지| B + A -->|SN으로 브릿지| B B -->|소울바운드 토큰| C{티어 할당} subgraph "티어 제한" - D[Basic] - E[Active] - F[Regular] - G[Power User] - H[High-Throughput] - I[S-Tier] + T1[Entry] + T2[Newbie] + T3[Basic] + T4[Active] + T5[Regular] + T6[Power User] + T7[Pro User] + T8[High-Throughput] + T9[S-Tier] + T10[Legendary] end - C --> D - C --> E - C --> F - C --> G - C --> H - C --> I + C --> T1 + C --> T2 + C --> T3 + C --> T4 + C --> T5 + C --> T6 + C --> T7 + C --> T8 + C --> T9 + C --> T10 %% RLN 플로우 A -->|가스리스 Tx 제출| J[RPC 노드] @@ -96,15 +106,15 @@ graph TD class A wallet class B,L karma class C tier - class D,E,F,G,H,I tierNode + class T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 tierNode class J,K,K1,K2,K3,M,N,O rln class P,Q,R,S,T,U,V,W sequencer class X,Y,Z,AA gas ``` -## 3. 시스템 구성 요소 +## 시스템 구성 요소 -### 3.1 Prover +### Prover Prover는 세 가지 서비스로 구성된 시스템입니다: @@ -114,7 +124,7 @@ Prover는 세 가지 서비스로 구성된 시스템입니다: 이러한 서비스는 안전한 자격 증명 관리, 증명 생성 및 트랜잭션 추적을 보장하며, gRPC는 Sequencer와의 저지연 통신을 가능하게 합니다. -### 3.2 RLN Verifier +### RLN Verifier RLN Verifier는 sequencer 내부의 besu 플러그인으로, Java Native Interface를 통해 RLN의 Zerokit Rust 라이브러리를 활용합니다. Verifier는: @@ -125,7 +135,7 @@ Verifier는: 검증에 실패한 트랜잭션은 거부되며, 사용자는 일시적으로 거부 목록에 추가될 수 있습니다. -### 3.3 거부 목록 +### 거부 목록 거부 목록은 할당량을 초과하거나 스팸에 참여하는 사용자를 일시적으로 제한합니다: @@ -133,10 +143,16 @@ Verifier는: - 사용자는 프리미엄 가스 수수료를 지불하여 제한을 우회할 수 있습니다 - 프리미엄 수수료를 지불하면 사용자가 목록에서 제거되고 추가 Karma를 획득합니다 -### 3.4 `linea_estimateGas` RPC 수정 +## `linea_estimateGas` RPC 수정 -linea_estimateGas 메서드는 거부 목록의 사용자를 고려하도록 사용자 정의됩니다: +Status Network는 기본 Linea `linea_estimateGas`를 Karma 인식 동작으로 확장하여, 반환되는 **수수료 필드**가 발신자 주소 `from`의 Karma 잔액에 따라 달라질 수 있습니다. +`gasLimit` 계산은 기본 Linea 구현(내부적으로 표준 `eth_estimateGas` 로직을 사용)에서 변경되지 않았습니다. -- 사용자의 거부 목록 상태를 확인합니다 -- 필요한 경우 프리미엄 가스 배수를 추가합니다 -- 사용자에게 투명성과 정확한 가스 추정을 제공합니다 \ No newline at end of file +구체적으로, Status Network의 `linea_estimateGas`는: + +- **거부 목록 프리미엄 적용**: 발신자가 거부 목록에 있는 경우, 노드는 정상 수수료 추정을 계산한 다음 **수수료 필드**에 프리미엄 배수를 적용합니다. +- **적격 사용자에게 가스리스 추정 반환**: 발신자에게 사용 가능한 Karma 할당량이 있는 경우, 메서드는 0의 `baseFeePerGas`와 `priorityFeePerGas`를 반환합니다. + +위 로직은 [Status Network 모노레포의 이 섹션](https://github.com/status-im/status-network-monorepo/blob/v1.0.1/besu-plugins/linea-sequencer/sequencer/src/main/java/net/consensys/linea/rpc/methods/LineaEstimateGas.java#L218)에서 오픈소스로 공개된 수정된 `LineaEstimateGas` 구현에 포함되어 있습니다. + +Karma 인식 수수료 추정 동작과 `linea_estimateGas` 세부 사항은 [JSON-RPC API](/tools/rpc/json-rpc)를 참조하세요. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/network-details.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md similarity index 87% rename from i18n/ko/docusaurus-plugin-content-docs/current/general-info/network-details.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md index f4bfcb0..58bd8c4 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/general-info/network-details.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md @@ -9,7 +9,7 @@ | **체인 ID** | 1660990954 | | **통화 기호** | ETH | | **블록 탐색기** | https://sepoliascan.status.network | -| **브리지** | https://bridge.status.network | +| **브릿지** | https://bridge.status.network | | **WebSocket RPC** | WebSocket RPC를 받으려면 [Telegram](https://t.me/statusl2)으로 문의하세요 | 이것은 Status Network 테스트넷의 공식 네트워크 세부정보입니다. 이 세부정보는 다음과 같은 용도로 사용할 수 있습니다: @@ -18,4 +18,4 @@ - 네트워크에 dApp 연결 - 스마트 컨트랙트 검증 -지갑에 네트워크를 추가하는 방법은 [Status Network 추가 가이드](./add-status-network.md)를 참조하세요. +지갑에 네트워크를 추가하는 방법은 [Status Network 추가 가이드](/overview/general-info/add-status-network)를 참조하세요. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md new file mode 100644 index 0000000..b52aa54 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md @@ -0,0 +1 @@ +# Status Network와 프라이버시 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/index.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/index.md similarity index 83% rename from i18n/ko/docusaurus-plugin-content-docs/current/index.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/index.md index b820443..3c5dbd5 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/index.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/index.md @@ -3,7 +3,7 @@ id: index title: Status Network에 오신 것을 환영합니다 description: Status Network는 원활하고 수수료가 없는 탈중앙화 애플리케이션을 가능하게 하는 가스리스 레이어 2 블록체인 네트워크입니다. 간단한 지갑 설정, 파우셋, 배포 도구로 구축을 시작하세요. keywords: [Status Network, 레이어 2, 가스리스 블록체인, 이더리움 스케일링, L2, validium, web3 개발, dapp 개발, 블록체인 개발] -slug: / +slug: /overview sidebar_position: 1 --- @@ -41,16 +41,16 @@ Status Network는 Status Wallet, Keycard, Waku, Codex 등 [IFT](https://free.tec 설명 부분을 건너뛰고 바로 구축을 시작하고 싶으신가요? 시작하는 방법은 다음과 같습니다: -1. [Status Network를 지갑에 추가](/general-info/add-status-network) -2. [테스트넷 ETH 받기](/tools/testnet-faucets) -3. [자산 브리징하기](/general-info/bridge/bridging-testnet) -4. [첫 번째 컨트랙트 배포하기](/tutorials/deploying-contracts/using-remix) +1. [Status Network를 지갑에 추가](/overview/general-info/add-status-network) +2. [테스트넷 ETH 받기](/tools/core-infrastructure/testnet-faucets) +3. [자산 브릿지하기](/overview/general-info/bridge/bridging-testnet) +4. [첫 번째 컨트랙트 배포하기](/build-for-karma/deploying-contracts/using-remix) ## 지원 및 리소스 커뮤니티에 참여하고 필요한 리소스에 접근하세요: - [텔레그램 빌더 커뮤니티](https://t.me/statusl2)에 참여 -- [네트워크 세부정보](/general-info/network-details) 확인 -- [컨트랙트 주소](/general-info/contract-addresses/testnet-contracts) 탐색 +- [네트워크 세부정보](/overview/general-info/network-details) 확인 +- [컨트랙트 주소](/overview/general-info/contract-addresses/testnet-contracts) 탐색 멋진 것을 만들 준비가 되셨나요? 지금 바로 무료 네트워크에서 여정을 시작하세요! diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/introduction/quick-start.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md similarity index 86% rename from i18n/ko/docusaurus-plugin-content-docs/current/introduction/quick-start.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md index 0de7ccb..eed217e 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/introduction/quick-start.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md @@ -10,13 +10,13 @@ 1. **Status Network 테스트넷을 MetaMask에 추가**: - [Status Network 추가 가이드](/general-info/add-status-network)의 단계별 지침에 따라 Status Network 테스트넷을 MetaMask에 추가하세요. + [Status Network 추가 가이드](/overview/general-info/add-status-network)의 단계별 지침에 따라 Status Network 테스트넷을 MetaMask에 추가하세요. 2. **테스트 ETH 받기**: Sepolia ETH와 Status Network ETH 모두 필요합니다: - 먼저 [Sepolia 파우셋](https://faucet.status.network)에서 Sepolia ETH를 받으세요 - - 그런 다음 [Status 브리지](https://bridge.status.network)를 사용하여 ETH를 Status Network로 브리징하세요 + - 그런 다음 [Status 브릿지](https://bridge.status.network)를 사용하여 ETH를 Status Network로 브릿지하세요 - 또는 [테스트넷 파우셋](https://sepoliascan.status.network/address/0x06338B70F1eAbc60d7A82C083e605C07F78bb878)에서 직접 Status Network ETH를 받으세요 이제 시작할 준비가 되었습니다! @@ -102,17 +102,17 @@ contract SimpleStorage { - **지원 받기**: - [텔레그램 커뮤니티](https://t.me/statusl2)에 참여하여 도움을 받으세요 - - [네트워크 세부정보](/general-info/network-details)에서 자세한 정보를 확인하세요 - - Status Network로의 [토큰 브리징](/general-info/bridge/bridging-testnet)에 대해 알아보세요 + - [네트워크 세부정보](/overview/general-info/network-details)에서 자세한 정보를 확인하세요 + - Status Network로의 [토큰 브릿지](/overview/general-info/bridge/bridging-testnet)에 대해 알아보세요 ## 요약 성공적으로 다음을 수행하셨습니다: - Status Network 테스트넷과 상호작용하기 위한 환경 설정 -- 브리징 또는 파우셋를 통해 테스트넷 ETH 획득 +- 브릿지 또는 파우셋를 통해 테스트넷 ETH 획득 - Remix IDE와 MetaMask를 사용하여 스마트 컨트랙트 배포 - 숫자 저장 및 조회를 통해 배포된 컨트랙트와 상호작용 더 고급 개발을 위해 다음 도구를 사용한 배포 가이드를 확인하세요: -- [Hardhat](/tutorials/deploying-contracts/using-hardhat) -- [Foundry](/tutorials/deploying-contracts/using-foundry) +- [Hardhat](/build-for-karma/deploying-contracts/using-hardhat) +- [Foundry](/build-for-karma/deploying-contracts/using-foundry) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/other/official-links.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/other/official-links.md similarity index 88% rename from i18n/ko/docusaurus-plugin-content-docs/current/other/official-links.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/other/official-links.md index 6f27386..c8f492e 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/other/official-links.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/other/official-links.md @@ -8,7 +8,7 @@ - **GitHub**: [github.com/status-im](https://github.com/status-im) ## 네트워크 도구 -- **브리지**: [bridge.status.network](https://bridge.status.network) +- **브릿지**: [bridge.status.network](https://bridge.status.network) - **블록 탐색기**: [sepoliascan.status.network](https://sepoliascan.status.network) - **RPC 엔드포인트**: [public.sepolia.rpc.status.network](https://public.sepolia.rpc.status.network) - **WebSocket RPC**: WebSocket RPC가 필요하시면 [Telegram](https://t.me/statusl2)으로 문의해주세요 @@ -22,4 +22,4 @@ - **텔레그램 커뮤니티**: [t.me/statusl2](https://t.me/statusl2) - **X/트위터**: [x.com/statusL2](https://x.com/statusL2) -지갑에 네트워크를 추가하는 방법에 대해서는 [네트워크 추가 가이드](/general-info/add-status-network)를 참조하세요. +지갑에 네트워크를 추가하는 방법에 대해서는 [네트워크 추가 가이드](/overview/general-info/add-status-network)를 참조하세요. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md similarity index 97% rename from i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md index 5a93ebd..867bc04 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md @@ -6,7 +6,7 @@ 지속가능성을 달성하기 위해 Status Network는 다음과 같은 수입원에서 수익을 창출합니다: -- **네이티브 수익 수수료**: Status Network에 브리지된 자산(초기에는 ETH와 DAI)은 수익 창출형 등가물(stETH와 sDAI)로 재활용됩니다. 생성된 수익의 일부(30%)가 네트워크 운영 비용으로 할당됩니다. +- **네이티브 수익 수수료**: Status Network에 브릿지된 자산(초기에는 ETH와 DAI)은 수익 창출형 등가물(stETH와 sDAI)로 재활용됩니다. 생성된 수익의 일부(30%)가 네트워크 운영 비용으로 할당됩니다. - **네이티브 DEX 스왑 수수료**: Status Network는 거래 수수료가 네트워크 운영에 기여하는 네이티브 DEX를 제공합니다. 네이티브 DEX 유동성 제공자는 일반 LP 수수료 외에도 네이티브 수익에서 추가 인센티브를 얻을 수 있습니다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md similarity index 93% rename from i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md index 1f4434f..7cec5b6 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md @@ -1,6 +1,6 @@ # 카르마 토크노믹스 -동양의 전통에서 카르마는 과거의 행동이 미래의 상태를 형성한다는 원리를 나타냅니다. 마찬가지로 Status Network에서는 모든 긍정적인 행동과 기여가 카르마를 축적하여 네트워크의 자금 조달과 인센티브에 대한 더 큰 영향력을 부여합니다. 카르마($KARMA)는 스테이킹, 브리징, 유동성 제공, 구축에 대한 보상을 제공하는 양도 불가능한 거버넌스 토큰입니다. 사용자나 앱이 L2의 유동성이나 활동에 더 많이 기여할수록, 자금 배분, 유동성 인센티브, 네트워크 로드맵과 매개변수에 대한 더 많은 투표권을 얻게 됩니다. +동양의 전통에서 카르마는 과거의 행동이 미래의 상태를 형성한다는 원리를 나타냅니다. 마찬가지로 Status Network에서는 모든 긍정적인 행동과 기여가 카르마를 축적하여 네트워크의 자금 조달과 인센티브에 대한 더 큰 영향력을 부여합니다. 카르마($KARMA)는 스테이킹, 브릿지, 유동성 제공, 구축에 대한 보상을 제공하는 양도 불가능한 거버넌스 토큰입니다. 사용자나 앱이 L2의 유동성이나 활동에 더 많이 기여할수록, 자금 배분, 유동성 인센티브, 네트워크 로드맵과 매개변수에 대한 더 많은 투표권을 얻게 됩니다. ## 카르마 획득 방법 @@ -8,7 +8,7 @@ 1. **SNT 스테이킹** – SNT를 스테이킹하는 사람은 누구나 비례적으로 카르마 보상을 받습니다. SNT를 스테이킹하거나 잠그는 기간이 길수록 카르마 획득률이 높아집니다. -2. **수익 창출 자산 브리징** – ETH와 DAI(초기에, 나중에 더 많은 자산이 추가될 예정)를 Status Network에 브리징하면 카르마를 획득할 수 있습니다. +2. **수익 창출 자산 브릿지** – ETH와 DAI(초기에, 나중에 더 많은 자산이 추가될 예정)를 Status Network에 브릿지하면 카르마를 획득할 수 있습니다. 3. **유동성 제공** – 네이티브 DEX에서 누구나 큐레이팅된 풀에 유동성을 제공하여 수수료, 네이티브 수익 보상, 카르마를 획득할 수 있습니다. @@ -36,12 +36,12 @@ ## 플라이휠 효과 -1. 사용자는 수익 창출 자산을 브리징하여 카르마를 획득하고 앱과 유동성 제공자에 대한 자금을 증가시킵니다. +1. 사용자는 수익 창출 자산을 브릿지하여 카르마를 획득하고 앱과 유동성 제공자에 대한 자금을 증가시킵니다. 2. 더 높은 앱 자금이 더 많은 새로운 앱을 네트워크에 배포하도록 유치합니다. 3. 자금을 받은 앱이 더 많은 사용자를 확보하여 네이티브 DEX의 거래량을 증가시킵니다. -4. 더 높은 네이티브 수익과 수수료가 사용자들이 추가 수익 창출 자산을 브리징함으로써 더 많은 TVL을 유치합니다. +4. 더 높은 네이티브 수익과 수수료가 사용자들이 추가 수익 창출 자산을 브릿지함으로써 더 많은 TVL을 유치합니다. TVL과 채택이 성장함에 따라 자금 조달 기회도 증가하여 네트워크의 지속가능성을 강화합니다. \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md similarity index 94% rename from i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md index 2c80814..5356bad 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md @@ -34,7 +34,7 @@ SNT, LINEA, ETH 금고는 [Aragon](https://aragon.org/)이 Status Network를 위 ### 배포된 컨트랙트 -주소 및 네트워크 목록 상세는 [사전예치 금고 컨트랙트](../general-info/contract-addresses/pre-deposit)를 참조하세요. +주소 및 네트워크 목록 상세는 [사전예치 금고 컨트랙트](/overview/general-info/contract-addresses/pre-deposit)를 참조하세요. ## Generic Protocol 금고 (GUSD) @@ -78,7 +78,7 @@ Generic Protocol 구조(GUSD 토크노믹스, 브릿징 인프라 등)에 대한 사전 예치자는 다음의 보상을 받게 됩니다: -- **Karma**: 양도 불가능한 거버넌스 토큰; 가스리스 처리량과 투표권 부여 (자세한 내용은 [카르마 토크노믹스](./karmic-tokenomics) 참조). +- **Karma**: 양도 불가능한 거버넌스 토큰; 가스리스 처리량과 투표권 부여 (자세한 내용은 [카르마 토크노믹스](/overview/tokenomics/karmic-tokenomics) 참조). - **유동성 인센티브**: 모든 금고에 걸쳐 1,500만 SNT와 2,000만 LINEA 토큰 배포. - 스테이블코인 예치자를 위한 **Generic Protocol 포인트**: Generic Protocol이 Status Network 메인넷에 출시될 때 사용할 수 있는 포인트. - **네이티브 앱 포인트**: 네이티브 앱들이 토크노믹스를 공개하면 확정 예정. @@ -114,8 +114,8 @@ Generic Protocol 구조(GUSD 토크노믹스, 브릿징 인프라 등)에 대한 ## 추가 정보 -- [사전예치 금고 컨트랙트](../general-info/contract-addresses/pre-deposit) — 배포된 주소 정보 -- [카르마 토크노믹스](./karmic-tokenomics) — Karma 획득 및 사용 방법 -- [경제 모델](./economic-model) — Status Network의 지속 가능한 수익 모델 +- [사전예치 금고 컨트랙트](/overview/general-info/contract-addresses/pre-deposit) — 배포된 주소 정보 +- [카르마 토크노믹스](/overview/tokenomics/karmic-tokenomics) — Karma 획득 및 사용 방법 +- [경제 모델](/overview/tokenomics/economic-model) — Status Network의 지속 가능한 수익 모델 - [Aragon 문서](https://docs.aragon.org/) - [Generic Protocol 문서](https://docs.generic.money/) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md similarity index 97% rename from i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md index fc44e9e..39542fd 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md @@ -10,7 +10,7 @@ Status Network의 가장 중요한 구성 요소 중 하나는 네트워크에 ### 앱 자금 풀의 작동 방식 -- **네이티브 수익과 수수료로 자금 조달**: 브리지된 자산(초기에는 ETH와 DAI)에서 생성되는 수익과 네이티브 DEX 스왑 수수료의 상당 부분이 직접 자금 풀로 흐릅니다. +- **네이티브 수익과 수수료로 자금 조달**: 브릿지된 자산(초기에는 ETH와 DAI)에서 생성되는 수익과 네이티브 DEX 스왑 수수료의 상당 부분이 직접 자금 풀로 흐릅니다. - **카르마 보유자에 의한 관리**: 자금의 할당은 카르마 토큰 보유자에 의해 결정되어 커뮤니티 주도의 의사 결정 프로세스를 보장합니다: 커뮤니티가 당신의 앱을 좋아한다면, 자금을 받을 수 있습니다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md b/i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md similarity index 100% rename from i18n/ko/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md rename to i18n/ko/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/block-explorers.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/block-explorers.md deleted file mode 100644 index 26230bb..0000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tools/block-explorers.md +++ /dev/null @@ -1,35 +0,0 @@ -# Status Network 테스트넷 탐색기 - -Status Network 블록 탐색기는 [sepoliascan.status.network](https://sepoliascan.status.network)에서 이용할 수 있습니다. - -### 기능 -- 트랜잭션 세부정보 및 상태 확인 -- 토큰 전송 및 잔액 추적 -- 스마트 컨트랙트 소스 코드 검증 -- 가스 가격 및 네트워크 활동 모니터링 -- 검증된 스마트 컨트랙트 확인 및 상호작용 -- 모든 주소의 토큰 보유 현황 추적 - -## Sepolia 탐색기 (레이어 1) - -Sepolia (레이어 1)의 트랜잭션을 추적하려면 [Sepolia Etherscan](https://sepolia.etherscan.io)을 사용하세요. - -이는 특히 다음과 같은 용도에 유용합니다: -- L1에서 L2로의 브리지 트랜잭션 모니터링 -- 토큰 입출금 추적 -- L1 컨트랙트 상호작용 확인 - -## 컨트랙트 검증 - -Status Network 탐색기에서 스마트 컨트랙트를 검증하는 방법: - -1. [컨트랙트 검증](https://sepoliascan.status.network/contract-verification)으로 이동 -2. 컨트랙트 주소 입력 -3. 소스 코드 업로드 및 컴파일 세부정보 제공 -4. 검증을 위해 제출 - -검증이 완료되면 컨트랙트의 소스 코드가 공개되며, 사용자들은 탐색기를 통해 직접 상호작용할 수 있습니다. - -## API 접근 - -Status Network 탐색기는 개발자를 위한 API 엔드포인트를 제공합니다. API 문서는 곧 제공될 예정입니다. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/bridge.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/bridge.md deleted file mode 100644 index e6c1c5e..0000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tools/bridge.md +++ /dev/null @@ -1,45 +0,0 @@ -# Status Network 테스트넷 브리지 - -Status Network 테스트넷 브리지를 사용하면 Sepolia (레이어 1)와 Status Network 테스트넷 (레이어 2) 간에 토큰을 전송할 수 있습니다. 브리지 인터페이스는 [bridge.status.network](https://bridge.status.network)에서 이용할 수 있습니다. - -## 개요 - -브리지는 다음을 가능하게 하는 중요한 인프라 구성 요소로 작동합니다: -- Sepolia에서 Status Network 테스트넷으로 토큰 전송 -- Status Network 테스트넷에서 Sepolia로 토큰 인출 -- L1과 L2 사이의 메시지 전달 - -## 브리지 컨트랙트 - -### 레이어 1 (Sepolia) -- **토큰 브리지**: [`0x01b44C5Ea321f921D93476cf54Aa8460db17a548`](https://sepolia.etherscan.io/address/0x01b44C5Ea321f921D93476cf54Aa8460db17a548) - -### 레이어 2 (Status Network) -- **토큰 브리지**: [`0xbC7f9571152a8e21942b2aEa4831a27f1149af19`](https://sepoliascan.status.network/address/0xbC7f9571152a8e21942b2aEa4831a27f1149af19) - -## 기능 - -- **토큰 브리징**: 네트워크 간 ERC-20 토큰 전송 -- **ETH 브리징**: Sepolia와 Status Network 간 ETH 브리징 -- **트랜잭션 추적**: 브리지 트랜잭션 상태 모니터링 -- **가스 예상**: 브리징 전 예상 가스 비용 확인 - -## 지원되는 토큰 - -지원되는 토큰과 해당 컨트랙트 주소의 최신 목록은 [토큰 목록 저장소](https://github.com/status-im/status-network-token-list)를 참조하세요. - -## 브리지 사용하기 - -단계별 가이드와 중요한 보안 고려사항을 포함한 브리지 사용 방법에 대한 자세한 내용은 [브리징 가이드](../general-info/bridge/bridging-testnet.md)를 참조하세요. - -## 브리지 트랜잭션 모니터링 - -브리지 트랜잭션은 다음을 통해 모니터링할 수 있습니다: -- L2 트랜잭션은 [Status Network 탐색기](https://sepoliascan.status.network) -- L1 트랜잭션은 [Sepolia Etherscan](https://sepolia.etherscan.io) - -## 지원 - -브리지 사용 중 문제가 발생한 경우: -- 일반적인 해결책은 [브리징 가이드](../general-info/bridge/bridging-testnet.md) 확인 -- 도움이 필요하면 [텔레그램 커뮤니티](https://t.me/statusl2)에 참여 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md new file mode 100644 index 0000000..577416a --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md @@ -0,0 +1,23 @@ +--- +title: 블록 익스플로러 +description: 트랜잭션 조회, 컨트랙트 검증, 네트워크 활동 모니터링을 위한 Status Network 블록 익스플로러. +keywords: [블록 익스플로러, 트랜잭션 추적, 스마트 컨트랙트 검증] +--- + +## Status Network 메인넷 + +*출시 예정.* + +## Status Network 테스트넷 (Sepolia) + +| 익스플로러 | URL | 기능 | +|----------|-----|----------| +| Sepoliascan | [sepoliascan.status.network](https://sepoliascan.status.network) | 트랜잭션 검색, 스마트 컨트랙트 검증 및 상호작용, 잔액 추적 등 | + +컨트랙트 검증은 Sepoliascan의 [컨트랙트 검증](https://sepoliascan.status.network/contract-verification) 페이지를 방문하세요. + +Sepolia의 L1 활동은 [Sepolia Etherscan](https://sepolia.etherscan.io)에서 추적할 수 있습니다. + +## Status Network 테스트넷 (Hoodi) + +*출시 예정.* diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md new file mode 100644 index 0000000..fe3efc3 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md @@ -0,0 +1,46 @@ +--- +title: Status Network 브릿지 +description: Sepolia와 Status Network 테스트넷 간 토큰 전송을 위한 Status Network 브릿지 사용 가이드. +keywords: [Status Network 브릿지, 토큰 브릿지, 크로스체인 전송, L1 L2 브릿지, Sepolia 브릿지] +--- + +# Status Network 테스트넷 브릿지 + +Status Network 테스트넷 브릿지를 사용하면 Sepolia (레이어 1)와 Status Network 테스트넷 (레이어 2) 간에 토큰을 전송하고 메시지를 전달할 수 있습니다. 브릿지 인터페이스는 [bridge.status.network](https://bridge.status.network)에서 이용할 수 있습니다. + +## 브릿지 컨트랙트 + +### 레이어 1 (Sepolia) +- **토큰 브릿지**: [`0x01b44C5Ea321f921D93476cf54Aa8460db17a548`](https://sepolia.etherscan.io/address/0x01b44C5Ea321f921D93476cf54Aa8460db17a548) + +### 레이어 2 (Status Network) +- **토큰 브릿지**: [`0xbC7f9571152a8e21942b2aEa4831a27f1149af19`](https://sepoliascan.status.network/address/0xbC7f9571152a8e21942b2aEa4831a27f1149af19) + +## 기능 + +- **토큰 브릿징**: 네트워크 간 ERC-20 토큰 전송 +- **ETH 브릿징**: Sepolia와 Status Network 간 ETH 브릿징 +- **트랜잭션 추적**: 브릿지 트랜잭션 상태 모니터링 +- **가스 예상**: 브릿징 전 예상 가스 비용 확인 + +## 지원 토큰 + +지원되는 토큰과 해당 컨트랙트 주소의 최신 목록은 [토큰 목록 레포지토리](https://github.com/status-im/status-network-token-list)를 참조하세요. + +## 브릿지 사용하기 + +단계별 가이드와 중요한 보안 고려사항을 포함한 브릿지 사용 방법에 대한 자세한 내용은 [브릿징 가이드](/overview/general-info/bridge/bridging-testnet)를 참조하세요. + +## 브릿지 트랜잭션 모니터링 + +브릿지 트랜잭션은 다음을 통해 모니터링할 수 있습니다: + +- L2 트랜잭션은 [Status Network 탐색기](https://sepoliascan.status.network) +- L1 트랜잭션은 [Sepolia Etherscan](https://sepolia.etherscan.io) + +## 지원 + +브릿지 사용 중 문제가 발생한 경우: + +- 일반적인 해결책은 [브릿징 가이드](/overview/general-info/bridge/bridging-testnet) 확인 +- 도움이 필요하면 [텔레그램 커뮤니티](https://t.me/statusl2)에서 문의하세요 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md similarity index 94% rename from i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc.md rename to i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md index 64d4302..7af4cdd 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md @@ -11,7 +11,7 @@ https://public.sepolia.rpc.status.network ## RPC 사용하기 ### MetaMask에 추가하기 -이 RPC를 사용하여 Status Network를 지갑에 추가하는 방법은 [네트워크 추가 가이드](../general-info/add-status-network.md)를 참조하세요. +이 RPC를 사용하여 Status Network를 지갑에 추가하는 방법은 [네트워크 추가 가이드](/overview/general-info/add-status-network)를 참조하세요. ### Web3 라이브러리 설정 @@ -40,6 +40,7 @@ RPC 엔드포인트는 다음을 포함한 표준 Ethereum JSON-RPC 메소드를 ## 속도 제한 공개 RPC 엔드포인트는 공정한 사용을 위해 다음과 같은 속도 제한이 있습니다: + - IP당 초당 10개의 요청 - IP당 하루 100,000개의 요청 @@ -48,5 +49,6 @@ RPC 엔드포인트는 다음을 포함한 표준 Ethereum JSON-RPC 메소드를 ## 지원 RPC 엔드포인트에 문제가 발생한 경우: + - 지원을 받으려면 [텔레그램 커뮤니티](https://t.me/statusl2)에 참여 - 애플리케이션에 대체 RPC 전략 구현 고려 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md similarity index 96% rename from i18n/ko/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md rename to i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md index 2789c6c..6018e4b 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md @@ -24,14 +24,14 @@ Status Network 테스트넷 파우셋은 [faucet.status.network](https://faucet. 3. "Request" 클릭 4. ETH가 지갑에 표시될 때까지 대기 (보통 몇 초 소요) -## Sepolia ETH (브리징에 필요) +## Sepolia ETH (브릿지에 필요) Status Network 테스트넷으로 자산을 브릿징하려면 먼저 Sepolia ETH가 필요합니다. 다음에서 받을 수 있습니다: 1. [Alchemy Sepolia 파우셋](https://www.alchemy.com/faucets/ethereum-sepolia) 2. [Metamask Sepolia 파우셋](https://docs.metamask.io/developer-tools/faucet/) -Sepolia ETH를 받은 후, [Status Network 브리지](https://bridge.status.network)를 사용하여 Status Network 테스트넷으로 브릿징할 수 있습니다. +Sepolia ETH를 받은 후, [Status Network 브릿지](https://bridge.status.network)를 사용하여 Status Network 테스트넷으로 브릿징할 수 있습니다. ## Status Network STT 파우셋 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/index.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/index.md new file mode 100644 index 0000000..4945296 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/index.md @@ -0,0 +1,33 @@ +--- +id: tools-index +title: 도구 및 인프라 +description: Status Network에서 사용할 수 있는 개발자 도구, 인프라 서비스, 통합 — RPC 엔드포인트, 브릿지, 파우셋, 익스플로러, 파트너 통합. +keywords: [Status Network, 개발자 도구, RPC, 브릿지, 파우셋, 블록 익스플로러, 인프라] +slug: /tools +sidebar_position: 1 +--- + +Status Network에서 사용할 수 있는 개발자 도구, 인프라 서비스 및 구현에 대한 종합 레퍼런스입니다. + +## 핵심 인프라 + +Status Network에서 빌드 및 테스트에 필요한 필수 서비스: + +| 도구 | 설명 | 링크 | +|---|---|---| +| **RPC 엔드포인트** | 퍼블릭 JSON-RPC 및 WebSocket 액세스 | [RPC →](/tools/core-infrastructure/rpc-endpoints) | +| **브릿지** | Ethereum Sepolia와 Status Network 간 자산 전송 | [브릿지 →](/tools/core-infrastructure/bridge) | +| **테스트넷 파우셋** | 개발용 테스트넷 자산 받기 | [파우셋 →](/tools/core-infrastructure/testnet-faucets) | +| **블록 익스플로러** | 트랜잭션, 컨트랙트, 네트워크 활동 탐색기 | [익스플로러 →](/tools/core-infrastructure/block-explorers) | + +## 인프라 파트너 + +Status Network는 인덱싱, 오라클, 데이터 제공자, 지갑, 보안 등 다양한 분야의 인프라 파트너를 온보딩하고 있습니다. [인프라 파트너](/tools/infrastructure) 페이지에서 전체 카테고리 목록과 사용 방법을 확인하세요. + +파트너가 되고 싶으신가요? [여기서 신청하세요](https://statusnetwork.typeform.com/partner). + +## 빠른 링크 + +- [네트워크 상세 정보](/overview/general-info/network-details) — Chain ID, RPC URL 및 전체 네트워크 구성 +- [지갑에 Status Network 추가하기](/overview/general-info/add-status-network) +- [브릿지 가이드](/overview/general-info/bridge/bridging-testnet) — 단계별 브릿지 안내 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/infrastructure.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/infrastructure.md new file mode 100644 index 0000000..27787e1 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/infrastructure.md @@ -0,0 +1,30 @@ +--- +title: 인프라 파트너 +description: Status Network에서 사용할 수 있는 인프라 파트너 및 서드파티 통합 — RPC 제공자, 오라클, 인덱서, 계정 추상화, 개발 도구 등. +keywords: [Status Network, 인프라, 파트너, 오라클, 인덱싱, RPC, 계정 추상화, 개발 도구, 크로스체인, 온램프] +sidebar_position: 6 +--- + +:::note 출시 예정 +Status Network는 아래 카테고리의 인프라 파트너를 적극적으로 온보딩하고 있습니다. 이 페이지는 온보딩이 완료됨에 따라 업데이트될 예정입니다. +::: + +## 파트너 카테고리 + +| 카테고리 | 설명 | +|---|---| +| **RPC 제공자** | 안정적이고 지연이 적은 노드 액세스를 위한 전용 RPC 인프라 | +| **오라클 및 VRF** | 가격 피드, RWA 데이터, 온체인 랜덤성을 위한 VRF, DEX 데이터 피드 | +| **Safe 및 다중서명** | 재무 관리 및 거버넌스를 위한 다중서명 지갑 | +| **인덱서** | 스마트 컨트랙트 이벤트 및 온체인 데이터를 위한 탈중앙화 및 중앙화 인덱싱 | +| **계정 추상화** | 스마트 계정, 키 관리, 원활한 사용자 온보딩 | +| **개발 도구** | SDK, 배포 도구 및 소셜 로그인 | +| **크로스체인** | 크로스체인 스왑 및 브릿징 솔루션 | +| **온램프 어그리게이터** | 법정화폐-암호화폐 온램프 및 오프램프 솔루션 | + +## 파트너 되기 + +인프라 서비스를 제공하며 Status Network와 파트너를 맺고 싶으신 경우 아래 채널을 통해 연락해주세요: + +- [파트너 신청하기](https://statusnetwork.typeform.com/partner) +- [텔레그램 빌더 커뮤니티 참여](https://t.me/statusl2) diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md new file mode 100644 index 0000000..c5ab134 --- /dev/null +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md @@ -0,0 +1,57 @@ +--- +title: JSON-RPC API +description: 빌더를 위한 Status Network JSON-RPC API 레퍼런스. +keywords: + [ + Status Network, + JSON-RPC, + Linea, + EIP-1559, + eth_estimateGas, + linea_estimateGas, + Karma, + gasless, + ] +--- + +Status Network는 Linea zkEVM을 기반으로 하므로, **대부분의 JSON-RPC 메서드는 표준 EVM 노드와 동일하게 동작합니다**. + +지원되는 표준 메서드와 전체 목록은 다음의 공식 문서를 참조하세요: + +- **[이더리움 JSON-RPC API](https://ethereum.github.io/execution-apis/api-documented/)** — 표준 이더리움 RPC 메서드 +- **[Linea JSON-RPC API 레퍼런스](https://docs.linea.build/api/reference)** — `linea_estimateGas`를 포함한 Linea 전용 메서드 + +## Status Network 확장 + +Status Network는 Linea의 표준 JSON-RPC에 카르마가 적용된 수수료 추정을 추가합니다: + +### `linea_estimateGas` + +Linea에서는 가스 추정을 위해 [`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas)를 사용하길 권장하고 있으며, 해당 단일 호출은 `gasLimit`, `baseFeePerGas`, `priorityFeePerGas`를 반환합니다. + +Status Network는 `linea_estimateGas`에 카르마를 적용한 동작을 추가합니다: + +- **가스리스 사용자**: 사용 가능한 Karma 할당량이 남아있는 사용자에 한해 `baseFeePerGas`와 `priorityFeePerGas`를 0으로 반환합니다 +- **거부 목록 사용자**: 거부 목록에 있는 사용자의 경우 수수료 필드에 프리미엄 배수를 적용합니다 + +### Status Network RPC 차이점 + +Linea에서 `linea_estimateGas`는 이미 권장 메서드입니다. L1 검증 비용과 데이터 압축이 반영된 수수료 값을 반환하기 때문인데, 이는 `eth_estimateGas` 및 다른 `eth_` 네임스페이스 호출에서는 적용되지 않는 정보입니다. +Status Network의 포크는 `linea_estimateGas`를 더욱 확장하여 카르마를 적용하며, 다른 모든 JSON-RPC 메서드는 호환성을 위해 표준의 구현을 유지합니다. + +이는 `eth_` 메서드를 사용하는 기존의 수수료 플로우(예: `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`)가 **부정확한 수수료** 제안으로 이어질 수 있음을 의미합니다. Linea의 L2 전용 가격 책정과 Status Network의 카르마 조정이 모두 누락되기 때문입니다. + +Status Network에서는 `linea_estimateGas`를 `gasLimit`, `baseFeePerGas`, `priorityFeePerGas`의 단일 진실 공급원으로 사용하세요. + +기존 Linea 동작은 [Linea의 가스비 가이드](https://docs.linea.build/network/how-to/gas-fees)와 [Linea의 `linea_estimateGas` 레퍼런스](https://docs.linea.build/api/reference/linea-estimategas)를 참조하세요. + +:::info +코드 예제, 마이그레이션 단계, 자주 빠지는 함정을 포함한 상세한 구현 가이드는 [카르마 사용](/build-for-karma/guides) 가이드를 참조하세요. +::: + +### 추가 리소스 + +- [Linea의 가스비 가이드](https://docs.linea.build/network/how-to/gas-fees) +- [Linea의 `linea_estimateGas` 레퍼런스](https://docs.linea.build/api/reference/linea-estimategas) +- [카르마 토크노믹스](/overview/tokenomics/karmic-tokenomics) — Karma가 가스비에 미치는 영향 +- [가스리스 트랜잭션](/overview/general-info/gasless-transactions) — RLN 기반 가스리스 시스템의 기술적 세부사항 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md b/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md similarity index 97% rename from i18n/ko/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md rename to i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md index c834d03..b23f8ec 100644 --- a/i18n/ko/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md +++ b/i18n/ko/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md @@ -17,8 +17,8 @@ keywords: [RPC 노드, Status Network RPC, 블록체인 노드, WebSocket, wss, 설정 스크립트는 선택할 수 있는 두 가지 노드 구현을 제공합니다: -- **Besu 노드**: `http://localhost:8545`에서 실행 -- **Geth 노드**: `http://localhost:8445`에서 실행 +- **Besu 노드**: 포트 `8545`에서 실행 +- **Geth 노드**: 포트 `8445`에서 실행 필요에 따라 둘 중 하나 또는 둘 다 동시에 실행할 수 있습니다. @@ -239,7 +239,7 @@ RPC 노드 성능을 최적화하려면: 문제가 발생하면: - 최신 업데이트는 [공식 README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md) 확인 -- [네트워크 세부정보](/general-info/network-details) 및 전반적인 문서 검토 +- [네트워크 세부정보](/overview/general-info/network-details) 및 전반적인 문서 검토 - [Telegram 커뮤니티](https://t.me/statusl2) 에서 지원 요청 ## 추가 리소스 diff --git a/i18n/ko/docusaurus-theme-classic/navbar.json b/i18n/ko/docusaurus-theme-classic/navbar.json index 8064df5..0599f4e 100644 --- a/i18n/ko/docusaurus-theme-classic/navbar.json +++ b/i18n/ko/docusaurus-theme-classic/navbar.json @@ -1,14 +1,22 @@ { "title": { - "message": "Status Network Docs", + "message": "Status Network 문서", "description": "The title in the navbar" }, "logo.alt": { - "message": "Status Network Logo", + "message": "Status Network 로고", "description": "The alt text of navbar logo" }, - "item.label.Hub": { - "message": "Hub", - "description": "Navbar item with label Hub" + "item.label.Overview": { + "message": "개요", + "description": "Navbar item with label Overview" + }, + "item.label.Build for Karma": { + "message": "카르마를 위해 개발하기", + "description": "Navbar item with label Build for Karma" + }, + "item.label.Tools": { + "message": "도구", + "description": "Navbar item with label Tools" } } diff --git a/i18n/zh/code.json b/i18n/zh/code.json index 5472836..c57f5d6 100644 --- a/i18n/zh/code.json +++ b/i18n/zh/code.json @@ -436,5 +436,585 @@ "theme.tags.tagsPageTitle": { "message": "标签", "description": "The title of the tag list page" + }, + "homepage.layout.title": { + "message": "Status Network 文档", + "description": "Homepage layout title" + }, + "homepage.layout.description": { + "message": "Status Network 文档 — 面向人类与机器人,完全免 Gas 的 Ethereum L2,具备可组合隐私与内置垃圾信息防护", + "description": "Homepage layout description" + }, + "homepage.hero.subtitle": { + "message": "欢迎来到", + "description": "Homepage hero subtitle" + }, + "homepage.hero.title": { + "message": "Status Network 文档", + "description": "Homepage hero title" + }, + "homepage.hero.description": { + "message": "面向人类与机器人,完全免 Gas 的 Ethereum L2,具备可组合隐私与内置垃圾信息防护", + "description": "Homepage hero description" + }, + "homepage.docs.sectionTitle": { + "message": "浏览文档", + "description": "Homepage docs section title" + }, + "homepage.docs.sectionSubtitle": { + "message": "立即开始在 Status Network 上开发", + "description": "Homepage docs section subtitle" + }, + "homepage.docCards.overview.title": { + "message": "概览", + "description": "Homepage docs card title for Overview" + }, + "homepage.docCards.overview.description": { + "message": "了解 Status Network 的架构、免 Gas 交易、代币经济学以及可持续的公共资助模式", + "description": "Homepage docs card description for Overview" + }, + "homepage.docCards.overview.linkText": { + "message": "了解更多", + "description": "Homepage docs card link text for Overview" + }, + "homepage.docCards.build.title": { + "message": "Build for Karma", + "description": "Homepage docs card title for Build for Karma" + }, + "homepage.docCards.build.description": { + "message": "部署合约、集成 Karma 和构建免 Gas 应用的指南、教程和参考文档", + "description": "Homepage docs card description for Build for Karma" + }, + "homepage.docCards.build.linkText": { + "message": "了解更多", + "description": "Homepage docs card link text for Build for Karma" + }, + "homepage.docCards.tools.title": { + "message": "工具", + "description": "Homepage docs card title for Tools" + }, + "homepage.docCards.tools.description": { + "message": "RPC 端点、跨链桥、测试网水龙头、区块浏览器和基础设施合作伙伴", + "description": "Homepage docs card description for Tools" + }, + "homepage.docCards.tools.linkText": { + "message": "了解更多", + "description": "Homepage docs card link text for Tools" + }, + "homepage.quickStart.title": { + "message": "准备开始构建?", + "description": "Homepage quick start title" + }, + "homepage.quickStart.description": { + "message": "设置钱包,获取测试网代币,几分钟内部署您的第一个合约", + "description": "Homepage quick start description" + }, + "homepage.quickStart.button": { + "message": "快速开始", + "description": "Homepage quick start button label" + }, + "homepage.community.sectionTitle": { + "message": "与我们联系", + "description": "Homepage community section title" + }, + "homepage.community.sectionSubtitle": { + "message": "了解 Status Network 社区的最新动态", + "description": "Homepage community section subtitle" + }, + "homepage.community.telegram.title": { + "message": "加入我们的 Telegram", + "description": "Homepage community card title for Telegram" + }, + "homepage.community.telegram.description": { + "message": "与其他 Status Network 开发者交流并获取支持", + "description": "Homepage community card description for Telegram" + }, + "homepage.community.github.title": { + "message": "在 GitHub 上查看", + "description": "Homepage community card title for GitHub" + }, + "homepage.community.github.description": { + "message": "探索源代码并为生态系统做贡献", + "description": "Homepage community card description for GitHub" + }, + "homepage.community.official.title": { + "message": "官方链接", + "description": "Homepage community card title for official links" + }, + "homepage.community.official.description": { + "message": "网站、社交频道和所有官方资源汇总", + "description": "Homepage community card description for official links" + }, + "ideaCatalog.filter.category": { + "message": "分类", + "description": "Filter group label" + }, + "ideaCatalog.filter.statusPrimitives": { + "message": "Status 特色功能", + "description": "Filter group label" + }, + "ideaCatalog.filter.builderProfile": { + "message": "开发者类型", + "description": "Filter group label" + }, + "ideaCatalog.filter.difficulty": { + "message": "难度", + "description": "Filter group label" + }, + "ideaCatalog.filter.fewerFilters": { + "message": "收起筛选", + "description": "Toggle button label" + }, + "ideaCatalog.filter.moreFilters": { + "message": "更多筛选", + "description": "Toggle button label" + }, + "ideaCatalog.filter.domainExpertise": { + "message": "领域专长", + "description": "Filter group label" + }, + "ideaCatalog.filter.userSegment": { + "message": "用户群体", + "description": "Filter group label" + }, + "ideaCatalog.filter.capitalRequirement": { + "message": "资金需求", + "description": "Filter group label" + }, + "ideaCatalog.status.showing": { + "message": "显示 {visibleCount} / {totalCount} 个创意", + "description": "Status text showing filtered count" + }, + "ideaCatalog.status.clearAll": { + "message": "清除全部", + "description": "Clear all filters button" + }, + "ideaCatalog.card.whyStatus": { + "message": "Why Status:", + "description": "Card detail label" + }, + "ideaCatalog.card.mvpScope": { + "message": "MVP 范围:", + "description": "Card detail label" + }, + "ideaCatalog.card.security": { + "message": "安全性", + "description": "Card meta badge label" + }, + "ideaCatalog.card.opsBurden": { + "message": "运维负担", + "description": "Card meta badge label" + }, + "ideaCatalog.empty.message": { + "message": "没有符合当前筛选条件的创意。", + "description": "Empty state message" + }, + "ideaCatalog.empty.clearAll": { + "message": "清除所有筛选", + "description": "Empty state clear button" + }, + "ideaCatalog.securityCriticality.low": { + "message": "低", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.medium": { + "message": "中", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.high": { + "message": "高", + "description": "Security criticality label" + }, + "ideaCatalog.securityCriticality.critical": { + "message": "关键", + "description": "Security criticality label" + }, + "ideaCatalog.opsBurden.low": { + "message": "低", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.medium": { + "message": "中", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.high": { + "message": "高", + "description": "Ops burden label" + }, + "ideaCatalog.opsBurden.veryHigh": { + "message": "非常高", + "description": "Ops burden label" + }, + "ideaCatalog.category.reputation": { + "message": "声誉", + "description": "Category label" + }, + "ideaCatalog.category.privacy": { + "message": "隐私", + "description": "Category label" + }, + "ideaCatalog.category.social": { + "message": "社交", + "description": "Category label" + }, + "ideaCatalog.category.games": { + "message": "游戏", + "description": "Category label" + }, + "ideaCatalog.category.defi": { + "message": "DeFi", + "description": "Category label" + }, + "ideaCatalog.statusPrimitive.gasless": { + "message": "无Gas", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.reputation": { + "message": "声誉", + "description": "Status primitive label" + }, + "ideaCatalog.statusPrimitive.privacy": { + "message": "隐私", + "description": "Status primitive label" + }, + "ideaCatalog.builderProfile.frontendDev": { + "message": "Web / 应用开发", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.contractDev": { + "message": "智能合约开发", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.fullStack": { + "message": "全栈开发", + "description": "Builder profile label" + }, + "ideaCatalog.builderProfile.protocolDev": { + "message": "协议 / 密码学", + "description": "Builder profile label" + }, + "ideaCatalog.difficulty.lowMed": { + "message": "低-中", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.med": { + "message": "中", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.medHigh": { + "message": "中-高", + "description": "Difficulty label" + }, + "ideaCatalog.difficulty.high": { + "message": "高", + "description": "Difficulty label" + }, + "ideaCatalog.userSegment.consumer": { + "message": "消费者", + "description": "User segment label" + }, + "ideaCatalog.userSegment.communityCreator": { + "message": "社区/创作者", + "description": "User segment label" + }, + "ideaCatalog.userSegment.daoOrgOps": { + "message": "DAO/组织运营", + "description": "User segment label" + }, + "ideaCatalog.userSegment.traderDefi": { + "message": "交易者/DeFi", + "description": "User segment label" + }, + "ideaCatalog.domainExpertise.communityDesign": { + "message": "社区设计", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.defiMechanisms": { + "message": "DeFi 机制", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.privacy": { + "message": "隐私", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.paymentsFinops": { + "message": "支付/财务运营", + "description": "Domain expertise label" + }, + "ideaCatalog.domainExpertise.consumerProduct": { + "message": "消费产品", + "description": "Domain expertise label" + }, + "ideaCatalog.capitalReq.none": { + "message": "无", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.operatingTreasury": { + "message": "运营资金", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.seedLiquidity": { + "message": "种子流动性", + "description": "Capital requirement label" + }, + "ideaCatalog.capitalReq.deepLiquidity": { + "message": "深度流动性", + "description": "Capital requirement label" + }, + "ideaCatalog.idea.karmaGatedAccess.title": { + "message": "Karma 门控内容流", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaGatedAccess.what": { + "message": "一个社交信息流,创作者发布的帖子仅对满足最低 Karma 等级的关注者可见 —— 类似 Substack 与链上声誉的结合。", + "description": "Idea summary" + }, + "ideaCatalog.idea.karmaGatedAccess.whyStatus": { + "message": "Karma 等级在链上解析,因此访问控制是去信任的 —— 无需订阅计费,无平台锁定,且天然抗 Sybil 攻击。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.karmaGatedAccess.mvp": { + "message": "包含公开和门控帖子的信息流、等级检查中间件(可能在链上)、显示按 Karma 等级分类受众的创作者仪表板。", + "description": "MVP scope" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.title": { + "message": "Karma 增强收益金库", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.what": { + "message": "一个 DeFi 金库,Karma 等级较高的存款人可获得更高的 APY —— 早期支持者和活跃参与者获得更好的回报。", + "description": "Idea summary" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.whyStatus": { + "message": "原生声誉图谱让金库可以根据经过验证的参与度来分配奖励权重,而非依赖代币加权投票或链下白名单。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.karmaLiquidityProtocol.mvp": { + "message": "单资产金库,含两个收益等级、存款时链上 Karma 等级查询、以及按等级显示有效 APY 的仪表板。", + "description": "MVP scope" + }, + "ideaCatalog.idea.karmaIncentiveMarket.title": { + "message": "Karma 悬赏平台", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaIncentiveMarket.what": { + "message": "一个悬赏市场,只有 Karma 达到阈值的用户才能领取任务 —— 项目团队发布工作(Bug 报告、翻译、引导指南)并向经过验证的贡献者付费。", + "description": "Idea summary" + }, + "ideaCatalog.idea.karmaIncentiveMarket.whyStatus": { + "message": "Karma 门控过滤掉垃圾机器人和低质量提交,让悬赏发布者确信认领者在网络上有真实的记录。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.karmaIncentiveMarket.mvp": { + "message": "悬赏列表页面、Karma 门控认领流程、提交审核面板、以及审批后的链上支付。", + "description": "MVP scope" + }, + "ideaCatalog.idea.karmaDynamicPricing.title": { + "message": "Karma 分级 NFT 市场", + "description": "Idea title" + }, + "ideaCatalog.idea.karmaDynamicPricing.what": { + "message": "一个 NFT 市场,上架费、版税和抢先访问窗口根据买卖双方的 Karma 等级自动调整 —— 受信任的参与者自动获得更好的条件。", + "description": "Idea summary" + }, + "ideaCatalog.idea.karmaDynamicPricing.whyStatus": { + "message": "结账时的链上等级解析意味着动态定价是去信任执行的 —— 无需优惠码,无需后端白名单。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.karmaDynamicPricing.mvp": { + "message": "NFT 上架 + 购买流程(含分级费用方案)、结账时链上等级检查、以及显示按买家等级统计销售的卖家分析。", + "description": "MVP scope" + }, + "ideaCatalog.idea.stealthAddressPayments.title": { + "message": "隐身地址支付", + "description": "Idea title" + }, + "ideaCatalog.idea.stealthAddressPayments.what": { + "message": "带有不可关联支出路径的一次性接收地址。", + "description": "Idea summary" + }, + "ideaCatalog.idea.stealthAddressPayments.whyStatus": { + "message": "隐私原语 + 低摩擦交易体验。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.stealthAddressPayments.mvp": { + "message": "地址生成、接收流程和隐私支出流程。", + "description": "MVP scope" + }, + "ideaCatalog.idea.privatePayroll.title": { + "message": "隐私薪资与储蓄", + "description": "Idea title" + }, + "ideaCatalog.idea.privatePayroll.what": { + "message": "不暴露余额和收款人的薪资和储蓄通道。", + "description": "Idea summary" + }, + "ideaCatalog.idea.privatePayroll.whyStatus": { + "message": "公开账本无法满足预期的现实需求。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.privatePayroll.mvp": { + "message": "雇主批量支付 + 收款人领取 + 屏蔽金库。", + "description": "MVP scope" + }, + "ideaCatalog.idea.shieldedMicrotransactions.title": { + "message": "屏蔽微交易 / 卡层", + "description": "Idea title" + }, + "ideaCatalog.idea.shieldedMicrotransactions.what": { + "message": "隐藏金额/参与者的小额支付和订阅。", + "description": "Idea summary" + }, + "ideaCatalog.idea.shieldedMicrotransactions.whyStatus": { + "message": "无Gas交互使频繁支付变得可行。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.shieldedMicrotransactions.mvp": { + "message": "带有重复授权的隐私打赏/订阅流程。", + "description": "MVP scope" + }, + "ideaCatalog.idea.privateLending.title": { + "message": "隐私借贷", + "description": "Idea title" + }, + "ideaCatalog.idea.privateLending.what": { + "message": "避免公开头寸泄露的借贷流程。", + "description": "Idea summary" + }, + "ideaCatalog.idea.privateLending.whyStatus": { + "message": "隐私 + 基于 Karma 的信任信号。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.privateLending.mvp": { + "message": "一种抵押品类型、一种借贷资产、隐私健康检查。", + "description": "MVP scope" + }, + "ideaCatalog.idea.privateMultisig.title": { + "message": "隐私多重签名", + "description": "Idea title" + }, + "ideaCatalog.idea.privateMultisig.what": { + "message": "签名者、阈值和交易详情被隐藏的多重签名功能。", + "description": "Idea summary" + }, + "ideaCatalog.idea.privateMultisig.whyStatus": { + "message": "注重隐私的组织仍然可以在链上运营。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.privateMultisig.mvp": { + "message": "策略设置 + 签名流程 + 带选择性披露的执行日志。", + "description": "MVP scope" + }, + "ideaCatalog.idea.socialMiniApp.title": { + "message": "无Gas微博平台", + "description": "Idea title" + }, + "ideaCatalog.idea.socialMiniApp.what": { + "message": "一个类 Twitter 的微博,每次发帖、回复和点赞都是用户零成本的链上操作 —— 用 Karma 徽章展示受信任的声音。", + "description": "Idea summary" + }, + "ideaCatalog.idea.socialMiniApp.whyStatus": { + "message": "无Gas交易使按操作计费的经济模型可行;Karma 徽章用通过实际网络参与获得的声誉取代了任意的蓝标系统。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.socialMiniApp.mvp": { + "message": "时间线信息流、发帖/回复/点赞操作、带 Karma 信任徽章的用户个人资料、以及基本内容审核控制。", + "description": "MVP scope" + }, + "ideaCatalog.idea.creatorEconomyToolkit.title": { + "message": "粉丝通行证平台", + "description": "Idea title" + }, + "ideaCatalog.idea.creatorEconomyToolkit.what": { + "message": "一个平台,创作者铸造免费数字通行证来解锁独家内容、群聊和线下活动入场 —— 粉丝以无Gas方式收集通行证。", + "description": "Idea summary" + }, + "ideaCatalog.idea.creatorEconomyToolkit.whyStatus": { + "message": "零成本铸造和领取消除了社区通行证的付费墙摩擦,让创作者无需要求粉丝支付Gas即可扩大受众。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.creatorEconomyToolkit.mvp": { + "message": "创作者页面(含通行证铸造)、粉丝领取流程、通行证门控内容区域、以及通过通行证验证的活动签到。", + "description": "MVP scope" + }, + "ideaCatalog.idea.communityGovernance.title": { + "message": "DAO 提案与 Karma 加权投票应用", + "description": "Idea title" + }, + "ideaCatalog.idea.communityGovernance.what": { + "message": "一个治理应用,社区成员提交提案并按其 Karma 等级的权重投票 —— 活跃贡献者比被动持有者拥有更大的话语权。", + "description": "Idea summary" + }, + "ideaCatalog.idea.communityGovernance.whyStatus": { + "message": "Karma 加权投票奖励真实参与而非代币积累,无Gas投票消除了抑制大多数 DAO 投票率的成本壁垒。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.communityGovernance.mvp": { + "message": "提案提交表单、链上计票的 Karma 加权投票、按等级显示参与分布的结果仪表板。", + "description": "MVP scope" + }, + "ideaCatalog.idea.onchainStrategyGame.title": { + "message": "战争迷雾征服游戏", + "description": "Idea title" + }, + "ideaCatalog.idea.onchainStrategyGame.what": { + "message": "一个六角格领地控制游戏,军队位置通过隐私状态隐藏,每次移动都是无Gas的链上交易 —— 类似带有真正链上战争迷雾的 Risk 桌游。", + "description": "Idea summary" + }, + "ideaCatalog.idea.onchainStrategyGame.whyStatus": { + "message": "隐私原语实现真正的隐藏信息(不仅仅是客户端迷雾),无Gas移动使策略游戏的快速来回在经济上可行。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.onchainStrategyGame.mvp": { + "message": "带战争迷雾的六角地图、一种单位类型、隐私军队部署、回合结算和匹配排行榜。", + "description": "MVP scope" + }, + "ideaCatalog.idea.predictionMarket.title": { + "message": "预测市场", + "description": "Idea title" + }, + "ideaCatalog.idea.predictionMarket.what": { + "message": "低摩擦参与和隐私参与者头寸的市场。", + "description": "Idea summary" + }, + "ideaCatalog.idea.predictionMarket.whyStatus": { + "message": "更好的市场参与度和更少的跟单行为。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.predictionMarket.mvp": { + "message": "市场创建 + 头寸入场 + 结算 + 基础分析。", + "description": "MVP scope" + }, + "ideaCatalog.idea.nativeDexCompanion.title": { + "message": "Karma 分级交换路由器", + "description": "Idea title" + }, + "ideaCatalog.idea.nativeDexCompanion.what": { + "message": "一个交换界面,通过最优链上池路由交易,为高 Karma 用户提供降低的手续费和优先执行 —— 将忠诚计划融入 DEX 层。", + "description": "Idea summary" + }, + "ideaCatalog.idea.nativeDexCompanion.whyStatus": { + "message": "Karma 等级让路由器以去信任方式提供手续费折扣,与原生流动性的紧密集成意味着无需依赖外部聚合器即可获得更好的汇率。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.nativeDexCompanion.mvp": { + "message": "带分级手续费显示的代币交换界面、Karma 感知路由逻辑、LP 头寸面板、以及显示按等级节省手续费的交易历史。", + "description": "MVP scope" + }, + "ideaCatalog.idea.publicFundingInterface.title": { + "message": "公共资助界面", + "description": "Idea title" + }, + "ideaCatalog.idea.publicFundingInterface.what": { + "message": "端到端的资助发现、提案、投票和跟踪仪表板。", + "description": "Idea summary" + }, + "ideaCatalog.idea.publicFundingInterface.whyStatus": { + "message": "直接支持生态系统增长飞轮。", + "description": "Why Status explanation" + }, + "ideaCatalog.idea.publicFundingInterface.mvp": { + "message": "提案面板 + 投票界面 + 资助进度追踪器。", + "description": "MVP scope" } } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current.json b/i18n/zh/docusaurus-plugin-content-docs/current.json index de2445a..16693a0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current.json +++ b/i18n/zh/docusaurus-plugin-content-docs/current.json @@ -3,148 +3,176 @@ "message": "Next", "description": "The label for version current" }, - "sidebar.tutorialSidebar.category.INTRODUCTION": { + "sidebar.homeSidebar.category.INTRODUCTION": { "message": "简介", - "description": "The label for category INTRODUCTION in sidebar tutorialSidebar" + "description": "The label for category INTRODUCTION in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOKENOMICS": { + "sidebar.homeSidebar.category.TOKENOMICS": { "message": "代币经济学", - "description": "The label for category TOKENOMICS in sidebar tutorialSidebar" + "description": "The label for category TOKENOMICS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.GENERAL INFO": { + "sidebar.homeSidebar.category.GENERAL INFO": { "message": "基本信息", - "description": "The label for category GENERAL INFO in sidebar tutorialSidebar" + "description": "The label for category GENERAL INFO in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🏡 Contract Addresses": { + "sidebar.homeSidebar.category.🏡 Contract Addresses": { "message": "🏡 合约地址", - "description": "The label for category 🏡 Contract Addresses in sidebar tutorialSidebar" + "description": "The label for category 🏡 Contract Addresses in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.🌉 Bridge": { + "sidebar.homeSidebar.category.🌉 Bridge": { "message": "🌉 跨链桥", - "description": "The label for category 🌉 Bridge in sidebar tutorialSidebar" + "description": "The label for category 🌉 Bridge in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.category.TOOLS": { - "message": "工具", - "description": "The label for category TOOLS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.TUTORIALS": { - "message": "教程", - "description": "The label for category TUTORIALS in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.🚀 Deploying a Smart Contract": { - "message": "🚀 部署智能合约", - "description": "The label for category 🚀 Deploying a Smart Contract in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.OTHER DOCS": { + "sidebar.homeSidebar.category.OTHER DOCS": { "message": "其他文档", - "description": "The label for category OTHER DOCS in sidebar tutorialSidebar" + "description": "The label for category OTHER DOCS in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🏠 Home": { - "message": "🏠 首页", - "description": "The label for the doc item 🏠 Home in sidebar tutorialSidebar, linking to the doc index" + "sidebar.homeSidebar.doc.🌴 Home": { + "message": "🌴 首页", + "description": "The label for the doc item 🌴 Home in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.⚡ Quick Start": { + "sidebar.homeSidebar.doc.⚡ Quick Start": { "message": "⚡ 快速开始", - "description": "The label for the doc item ⚡ Quick Start in sidebar tutorialSidebar, linking to the doc introduction/quick-start" + "description": "The label for the doc item ⚡ Quick Start in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Token": { - "message": "💎 SNT Token", - "description": "The label for the doc item 💎 SNT Token in sidebar tutorialSidebar, linking to the doc tokenomics/snt-token" - }, - "sidebar.tutorialSidebar.doc.💠 Karma Token": { - "message": "💠 Karma Token", - "description": "The label for the doc item 💠 Karma Token in sidebar tutorialSidebar, linking to the doc tokenomics/karma-token" - }, - "sidebar.tutorialSidebar.doc.🌐 Network Details": { - "message": "🌐 网络详情", - "description": "The label for the doc item 🌐 Network Details in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.➕ Add Status Network": { - "message": "➕ 添加 Status 网络", - "description": "The label for the doc item ➕ Add Status Network in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.💰 Tokens": { - "message": "💰 代币", - "description": "The label for the doc item 💰 Tokens in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Testnet Contracts": { - "message": "🧪 测试网合约", - "description": "The label for the doc item 🧪 Testnet Contracts in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🧪 Bridging Testnet": { - "message": "🧪 测试网跨链", - "description": "The label for the doc item 🧪 Bridging Testnet in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔌 RPC": { - "message": "🔌 RPC", - "description": "The label for the doc item 🔌 RPC in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌉 Bridge": { - "message": "🌉 跨链桥", - "description": "The label for the doc item 🌉 Bridge in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🚰 Testnet Faucets": { - "message": "🚰 测试网水龙头", - "description": "The label for the doc item 🚰 Testnet Faucets in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔎 Block Explorers": { - "message": "🔎 区块浏览器", - "description": "The label for the doc item 🔎 Block Explorers in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎩 Using Hardhat": { - "message": "🎩 使用 Hardhat", - "description": "The label for the doc item 🎩 Using Hardhat in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.⚒️ Using Foundry": { - "message": "⚒️ 使用 Foundry", - "description": "The label for the doc item ⚒️ Using Foundry in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🎛️ Using Remix": { - "message": "🎛️ 使用 Remix", - "description": "The label for the doc item 🎛️ Using Remix in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🏗 Using Scaffold-ETH 2": { - "message": "🏗 Scaffold-ETH 2 使用", - "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🔗 Official Links": { - "message": "🔗 官方链接", - "description": "The label for the doc item 🔗 Official Links in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.doc.🌴 Home": { - "message": "🌴 Home", - "description": "The label for the doc item 🌴 Home in sidebar tutorialSidebar, linking to the doc index" - }, - "sidebar.tutorialSidebar.doc.🤝 Economic Model": { + "sidebar.homeSidebar.doc.🤝 Economic Model": { "message": "🤝 经济模型", - "description": "The label for the doc item 🤝 Economic Model in sidebar tutorialSidebar" + "description": "The label for the doc item 🤝 Economic Model in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Public Funding": { + "sidebar.homeSidebar.doc.💰 Public Funding": { "message": "💰 公共资金", - "description": "The label for the doc item 💰 Public Funding in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Public Funding in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🐉 Karmic Tokenomics": { + "sidebar.homeSidebar.doc.🐉 Karmic Tokenomics": { "message": "🐉 因果代币经济学", - "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar tutorialSidebar" + "description": "The label for the doc item 🐉 Karmic Tokenomics in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💎 SNT Staking": { + "sidebar.homeSidebar.doc.💎 SNT Staking": { "message": "💎 SNT 质押", - "description": "The label for the doc item 💎 SNT Staking in sidebar tutorialSidebar" + "description": "The label for the doc item 💎 SNT Staking in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposits": { + "sidebar.homeSidebar.doc.💰 Pre-Deposits": { "message": "💰 预存款", - "description": "The label for the doc item 💰 Pre-Deposits in sidebar tutorialSidebar" + "description": "The label for the doc item 💰 Pre-Deposits in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🪙 Tokens": { + "sidebar.homeSidebar.doc.🌐 Network Details": { + "message": "🌐 网络详情", + "description": "The label for the doc item 🌐 Network Details in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.⛽ Gasless Transactions": { + "message": "⛽ 无Gas交易", + "description": "The label for the doc item ⛽ Gasless Transactions in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.➕ Add Status Network": { + "message": "➕ 添加 Status 网络", + "description": "The label for the doc item ➕ Add Status Network in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🪙 Tokens": { "message": "🪙 代币", - "description": "The label for the doc item 🪙 Tokens in sidebar tutorialSidebar" + "description": "The label for the doc item 🪙 Tokens in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.💰 Pre-Deposit Vault Contracts": { - "message": "💰 预存金库合同", - "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar tutorialSidebar" + "sidebar.homeSidebar.doc.🧪 Testnet Contracts": { + "message": "🧪 测试网合约", + "description": "The label for the doc item 🧪 Testnet Contracts in sidebar homeSidebar" }, - "sidebar.tutorialSidebar.doc.🌐 Running an RPC node": { - "message": "🌐 运行RPC节点", - "description": "The label for the doc item 🌐 Running an RPC node in sidebar tutorialSidebar" + "sidebar.homeSidebar.doc.💰 Pre-Deposit Vault Contracts": { + "message": "💰 预存金库合约", + "description": "The label for the doc item 💰 Pre-Deposit Vault Contracts in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🧪 Bridging Testnet": { + "message": "🧪 测试网跨链", + "description": "The label for the doc item 🧪 Bridging Testnet in sidebar homeSidebar" + }, + "sidebar.homeSidebar.doc.🔗 Official Links": { + "message": "🔗 官方链接", + "description": "The label for the doc item 🔗 Official Links in sidebar homeSidebar" + }, + "sidebar.buildForKarmaSidebar.category.BUILD FOR KARMA": { + "message": "Karma 开发", + "description": "The label for category BUILD FOR KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🌟 Why Status Network": { + "message": "🌟 为什么选择 Status Network", + "description": "The label for the doc item 🌟 Why Status Network in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.💡 What to Build": { + "message": "💡 创意目录", + "description": "The label for the doc item 💡 What to Build in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.USING KARMA": { + "message": "使用 Karma", + "description": "The label for category USING KARMA in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⛽ Gasless Integration": { + "message": "⛽ 无Gas交易整合", + "description": "The label for the doc item ⛽ Gasless Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🔰 Reputation Integration": { + "message": "🔰 声誉整合", + "description": "The label for the doc item 🔰 Reputation Integration in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.category.DEPLOYING CONTRACTS": { + "message": "部署合约", + "description": "The label for category DEPLOYING CONTRACTS in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎩 Using Hardhat": { + "message": "🎩 使用 Hardhat", + "description": "The label for the doc item 🎩 Using Hardhat in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.⚒️ Using Foundry": { + "message": "⚒️ 使用 Foundry", + "description": "The label for the doc item ⚒️ Using Foundry in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🎛️ Using Remix": { + "message": "🎛️ 使用 Remix", + "description": "The label for the doc item 🎛️ Using Remix in sidebar buildForKarmaSidebar" + }, + "sidebar.buildForKarmaSidebar.doc.🏗 Using Scaffold-ETH 2": { + "message": "🏗 Scaffold-ETH 2 使用", + "description": "The label for the doc item 🏗 Using Scaffold-ETH 2 in sidebar buildForKarmaSidebar" + }, + "sidebar.toolsSidebar.category.TOOLS": { + "message": "工具", + "description": "The label for category TOOLS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.CORE INFRASTRUCTURE": { + "message": "核心基础设施", + "description": "The label for category CORE INFRASTRUCTURE in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.📡 RPC Endpoints": { + "message": "📡 RPC 端点", + "description": "The label for the doc item 📡 RPC Endpoints in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌉 Bridge": { + "message": "🌉 跨链桥", + "description": "The label for the doc item 🌉 Bridge in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🚰 Testnet Faucets": { + "message": "🚰 测试网水龙头", + "description": "The label for the doc item 🚰 Testnet Faucets in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔎 Block Explorers": { + "message": "🔎 区块浏览器", + "description": "The label for the doc item 🔎 Block Explorers in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.RPC": { + "message": "RPC", + "description": "The label for category RPC in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🔌 JSON-RPC API": { + "message": "🔌 JSON-RPC API", + "description": "The label for the doc item 🔌 JSON-RPC API in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🌐 Running an RPC Node": { + "message": "🌐 运行 RPC 节点", + "description": "The label for the doc item 🌐 Running an RPC Node in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.category.PARTNERS": { + "message": "合作伙伴", + "description": "The label for category PARTNERS in sidebar toolsSidebar" + }, + "sidebar.toolsSidebar.doc.🤝 Infrastructure Partners": { + "message": "🤝 基础设施合作伙伴", + "description": "The label for the doc item 🤝 Infrastructure Partners in sidebar toolsSidebar" } } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md new file mode 100644 index 0000000..ad01899 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/index.md @@ -0,0 +1,72 @@ +--- +id: deploying-contracts-index +title: 部署你的第一个合约 +description: 选择你偏好的部署工具,将智能合约部署到 Status Network。提供 Hardhat、Foundry、Remix 和 Scaffold-ETH 2 的指南。 +keywords: [deploy smart contract, Status Network, Hardhat, Foundry, Remix, Scaffold-ETH 2, blockchain deployment, EVM] +slug: /build-for-karma/deploying-contracts +sidebar_position: 1 +--- + +Status Network 完全兼容 EVM,因此你可以使用任何标准以太坊工具链部署合约。选择适合你工作流程的工具,按照分步指南将你的第一个合约部署到测试网。 + +:::tip 开始之前 +请确保你已[将 Status Network 添加到钱包](/overview/general-info/add-status-network),并领取一些[测试网 ETH](/tools/core-infrastructure/testnet-faucets)。 +::: + +## 选择部署工具 + + + +## 不知道选哪个? + +| 工具 | 最适合 | 所需配置 | +|---|---|---| +| **Hardhat** | 具有复杂测试和部署流程的生产项目 | Node.js + npm | +| **Foundry** | 偏好 Solidity 原生测试和快速编译的开发者 | Rust 工具链 | +| **Remix** | 快速实验、学习和简单一次性部署 | 无(浏览器) | +| **Scaffold-ETH 2** | 从一开始就需要前端的全栈 dApp | Node.js + npm | + +## 部署之后 + +合约上线后,以下是你的下一步: + +- 通过 Karma [集成无 Gas 交易](/build-for-karma/guides/gasless-integration),让用户无需支付 Gas +- [阅读声誉集成指南](/build-for-karma/guides/reputation-integration),使用 Karma 构建支持声誉的功能 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md similarity index 96% rename from i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md rename to i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md index 865cd34..7f7d6f5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-foundry.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-foundry.md @@ -9,7 +9,7 @@ - **Foundry**: 从[官方 Foundry 文档](https://book.getfoundry.sh/getting-started/installation)安装 - **以太坊钱包**: Status Network 测试网的私钥 - **测试网 ETH**: 您需要 Status Network 测试网 ETH - - 从我们的[水龙头](/tools/testnet-faucets)获取 Status Network 测试网 ETH + - 从我们的[水龙头](/tools/core-infrastructure/testnet-faucets)获取 Status Network 测试网 ETH - **基础知识**: 熟悉 Solidity 和命令行 ## 您将完成 @@ -200,7 +200,7 @@ forge test 如果遇到问题: - 加入我们的 [Telegram 社区](https://t.me/statusl2) -- 查看[网络详情](/general-info/network-details) +- 查看[网络详情](/overview/general-info/network-details) ## 其他资源 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md similarity index 95% rename from i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md rename to i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md index 4086f9b..0b2a1a5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-hardhat.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-hardhat.md @@ -9,7 +9,7 @@ - **Node.js 和 npm**: 从[官方 Node.js 网站](https://nodejs.org/)下载并安装 - **以太坊钱包**: MetaMask 或其他具有 Status Network 测试网私钥的钱包 - **测试网 ETH**: 您需要 Status Network 测试网 ETH - - 从我们的[水龙头](/tools/testnet-faucets)获取 Status Network 测试网 ETH + - 从我们的[水龙头](/tools/core-infrastructure/testnet-faucets)获取 Status Network 测试网 ETH - **基础知识**: 熟悉 Solidity、Hardhat 和命令行 ## 您将完成 @@ -158,4 +158,4 @@ npx hardhat run scripts/interact.ts --network statusTestnet 如果遇到问题: - 加入我们的 [Telegram 社区](https://t.me/statusl2) -- 查看[网络详情](/general-info/network-details) +- 查看[网络详情](/overview/general-info/network-details) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md similarity index 89% rename from i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md rename to i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md index 1944613..07f32b5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-remix.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-remix.md @@ -9,8 +9,8 @@ - **网络浏览器**: Chrome 或 Firefox 等现代浏览器 - **MetaMask**: 安装 [MetaMask](https://metamask.io) 浏览器扩展 - **测试网 ETH**: 您需要 Status Network 测试网 ETH - - 从我们的[水龙头](/tools/testnet-faucets)获取 Status Network 测试网 ETH -- **网络配置**: 按照我们的[添加网络指南](/general-info/add-status-network)将 Status Network 测试网添加到 MetaMask + - 从我们的[水龙头](/tools/core-infrastructure/testnet-faucets)获取 Status Network 测试网 ETH +- **网络配置**: 按照我们的[添加网络指南](/overview/general-info/add-status-network)将 Status Network 测试网添加到 MetaMask ## 步骤 @@ -91,7 +91,7 @@ contract HelloWorld { 如果遇到问题: - 加入我们的 [Telegram 社区](https://t.me/statusl2) -- 查看[网络详情](/general-info/network-details) +- 查看[网络详情](/overview/general-info/network-details) ## 其他资源 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md similarity index 93% rename from i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md rename to i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md index 5ada969..32f6268 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/deploying-contracts/using-se2.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/deploying-contracts/using-se2.md @@ -14,7 +14,7 @@ keywords: [Scaffold-ETH 2, 智能合约部署, Status Network开发, Foundry, Ha - **Foundry** (可选): 如果选择Foundry工作流 - **以太坊钱包** (可选): 用于测试的EVM钱包私钥,但没有也没关系 -> **注意**: Status Network支持无gas交易,因此测试网ETH是可选的。如果您仍然需要测试网ETH,请从我们的[水龙头](/tools/testnet-faucets)获取。 +> **注意**: Status Network支持无gas交易,因此测试网ETH是可选的。如果您仍然需要测试网ETH,请从我们的[水龙头](/tools/core-infrastructure/testnet-faucets)获取。 ## 快速开始 @@ -58,4 +58,4 @@ keywords: [Scaffold-ETH 2, 智能合约部署, Status Network开发, Foundry, Ha 有关详细配置选项、故障排除和高级用法: - 查看[扩展README](https://github.com/status-im/status-network-scaffold-extension)获取全面文档 - 加入我们的[Telegram社区](https://t.me/statusl2)寻求支持 -- 查看我们的[网络详情](/general-info/network-details) +- 查看我们的[网络详情](/overview/general-info/network-details) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md new file mode 100644 index 0000000..abe98fb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/gasless-integration.md @@ -0,0 +1,365 @@ +--- +title: 无 Gas 集成指南 +description: 在 Status Network 上构建无 Gas 用户体验的实用集成指南。 +keywords: [gasless, linea_estimateGas, Status Network, deny list, builder, zero gas, UX] +slug: /build-for-karma/guides/gasless-integration +sidebar_position: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Status Network 在协议层面提供无 Gas 交易。你不需要 paymasters 或中继器。作为开发者,核心任务是根据发送方状态正确地估算和展示费用。 + +:::important 核心规则 +使用 `linea_estimateGas` RPC 方法作为准备交易 UX 时 Gas 费用的唯一数据来源。 +::: + +其他 JSON-RPC 方法参考,请参阅 [JSON-RPC API](/tools/rpc/json-rpc)。 + +## 具有 Karma 感知能力的费用估算 + +在 Linea 上,[`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas) 已经是估算 Gas 的推荐方式。 +它在**单次调用**中返回 `gasLimit`、`baseFeePerGas` 和 `priorityFeePerGas`,其中费用字段已考虑了压缩交易大小、L1 验证成本以及 L1/L2 Gas 价格比率——这些是 `eth_` 命名空间方法无法捕获的因素。 + +Status Network 进一步扩展了 `linea_estimateGas`,使其费用字段同时纳入我们的 **Karma** 系统;符合条件的用户费用可能降为零,而被列入拒绝名单的用户费用则可能增加。 + +```mermaid +flowchart TD + A[用户发起交易] --> B["使用 from 参数调用 linea_estimateGas"] + B --> C{费用结果} + C -->|base+priority = 0| D[显示无 Gas UX] + C -->|溢价费用| F[显示溢价费用 UX] + D --> G[发送交易] + F --> G +``` + +*图示:使用 `linea_estimateGas` 的 Gas 估算流程* + +这就是为什么开发者在 Status Network 上估算交易成本或为用户预填 EIP-1559 费用字段时,应该使用 `linea_estimateGas`。 + +:::info 更多信息 +关于 Karma 及其对 Gas 费用和交易特权影响的详细说明,请参阅 [Karmic 代币经济学](../../overview/tokenomics/karmic-tokenomics) 页面。 + +关于我们无 Gas 系统如何实现和执行的技术细节,请参阅[无 Gas 交易](../../overview/general-info/gasless-transactions)文档。 +::: + +## `linea_estimateGas` 请求/响应结构 + +### 请求 + +`linea_estimateGas` 接受与 `eth_estimateGas` 相同的**交易调用对象**。 +它使用与 `eth_estimateGas` 相同的 EVM 执行逻辑返回 `gasLimit`,同时返回反映 Linea L2 专属定价和 Status Network Karma 规则的费用字段——全部在单次响应中完成。 + +:::important +**始终包含 `from`。** 没有它,节点无法应用 Karma/配额/拒绝名单逻辑。 +::: + +### 响应 + +`linea_estimateGas` 返回的对象包含: + +- `gasLimit`:十六进制数量——EVM 执行的估算 Gas 单位(与 `eth_estimateGas` 计算方式相同) +- `baseFeePerGas`:十六进制数量——下一个区块的基础费用,已考虑 Status Network 上的 Karma 规则 +- `priorityFeePerGas`:十六进制数量——建议的优先费用,已考虑 Status Network 上的 Karma 规则 + +这些费用字段可能与 `eth_` 命名空间调用(如 `eth_gasPrice`、`eth_maxPriorityFeePerGas` 或 `eth_feeHistory`)返回的值有显著差异——后者不了解 Linea 的 L2 专属定价或 Status Network 的 Karma 调整。 + + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "gasLimit": "0x5208", + "baseFeePerGas": "0x0", + "priorityFeePerGas": "0x0" + } +} +``` + + + + +标准 EVM 流程需要多次独立的 `eth_` 调用来获取 Gas 限制和费用数据: + +**eth_estimateGas** + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5208" +} +``` + +**eth_maxPriorityFeePerGas** + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": "0x59682f00" +} +``` + +**eth_getBlockByNumber** + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "number": ..., + "baseFeePerGas": "0x3b9aca00", + ... + } +} +``` + + + + + +## 迁移指南:从多次 `eth_` 调用迁移到 `linea_estimateGas` + +本节介绍如何从常见的"通过多次 `eth_` 调用实现 EIP-1559"流程迁移到单次 `linea_estimateGas` 调用,后者能在 Status Network 上提供更准确的 L2 专属费用数据和 Karma 感知定价。 + +### 迁移前:使用 `eth_` 命名空间的常见 EIP-1559 估算流程 + +在许多 EVM 链上,典型的 EIP-1559 估算流程如下: + +1. 通过 `eth_estimateGas` **估算 Gas 限制** +2. 通过 `eth_maxPriorityFeePerGas` 和/或 `eth_feeHistory` **获取 `maxPriorityFeePerGas`** +3. 通过 `eth_getBlockByNumber` **获取 `baseFeePerGas`** +4. 构建 EIP-1559 交易,使用: + - `gas` + - `maxPriorityFeePerGas` + - `maxFeePerGas`,通常为 $2 \cdot \mathrm{baseFeePerGas} + \mathrm{maxPriorityFeePerGas}$ + + + + + +```bash +# 1) Gas 限制(EVM 执行) +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"eth_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_RPC_URL + +# 2) 获取建议小费金额 +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":2,"method":"eth_maxPriorityFeePerGas","params":[]}' \ + https://YOUR_RPC_URL + +# 3) 获取基础费用 +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","id":3,"method":"eth_getBlockByNumber","params":["pending",false]}' \ + https://YOUR_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const gas = await provider.estimateGas(call); +const maxPriorityFeePerGas = await provider.send('eth_maxPriorityFeePerGas', []); +const pendingBlock = await provider.getBlock('pending'); + +const baseFeePerGas = pendingBlock?.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + BigInt(maxPriorityFeePerGas); + +console.log({ + gas: `0x${gas.toString(16)}`, + maxPriorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_RPC_URL'), +}); + +const call = { + account: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const gas = await client.estimateGas(call); +const maxPriorityFeePerGas = await client.getMaxPriorityFeePerGas(); +const pendingBlock = await client.getBlock({ blockTag: 'pending' }); + +const baseFeePerGas = pendingBlock.baseFeePerGas ?? 0n; +const maxFeePerGas = 2n * baseFeePerGas + maxPriorityFeePerGas; + +console.log({ + gas, + maxPriorityFeePerGas, + maxFeePerGas, +}); +``` + + + + + +### 迁移后:使用 `linea_estimateGas` 的 Status Network Gas 估算流程 + +在 Status Network 上,你应该从 `linea_estimateGas` 获取费用建议,因为正确的费用推荐取决于 Karma: + +- 账户可能有资格获得**无 Gas** 交易 +- 被列入拒绝名单的账户可能需要支付**溢价 Gas 费用** + + + + + +```bash +curl -X POST -H "Content-Type: application/json" \ + --data '{ + "jsonrpc":"2.0", + "id":1, + "method":"linea_estimateGas", + "params":[{ + "from":"0xYOUR_SENDER", + "to":"0xCONTRACT_OR_RECIPIENT", + "data":"0xYOUR_CALLDATA", + "value":"0x0" + }] + }' \ + https://YOUR_STATUS_NETWORK_RPC_URL +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider('https://YOUR_STATUS_NETWORK_RPC_URL'); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: '0x0', +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await provider.send( + 'linea_estimateGas', + [call], +); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + +```js +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://YOUR_STATUS_NETWORK_RPC_URL'), +}); + +const call = { + from: '0xYOUR_SENDER', + to: '0xCONTRACT_OR_RECIPIENT', + data: '0xYOUR_CALLDATA', + value: 0n, +}; + +const { gasLimit, baseFeePerGas, priorityFeePerGas } = await client.request({ + method: 'linea_estimateGas', + params: [call], +}); + +const maxFeePerGas = + BigInt(baseFeePerGas) + BigInt(priorityFeePerGas); + +console.log({ + gas: gasLimit, + maxPriorityFeePerGas: priorityFeePerGas, + maxFeePerGas: `0x${maxFeePerGas.toString(16)}`, +}); +``` + + + + + +:::tip 工具集成 +许多以太坊库在内部调用 `eth_estimateGas`(例如 `provider.estimateGas(...)`)。在 Status Network 上,继续使用这些库进行标准 `eth_` 方法调用,但**在构建或向用户展示交易参数时,显式通过 `linea_estimateGas` 获取 Gas 限制和费用字段**。 +::: + +## 在 UI 中处理费用场景 + +### 1) 无 Gas + +当 `baseFeePerGas` 和 `priorityFeePerGas` 均为零时: + +- 显示清晰的免费交易状态。 +- 跳过不必要的费用警告。 + +### 2) 溢价费用 + +当发送方被列入拒绝名单(超出配额或 RLN 策略)时: + +- 显示费用金额,并说明由于配额或垃圾邮件策略,将收取溢价 Gas 费用。 +- 明确告知发送方可以支付费用,或等待配额窗口刷新。 +- 保持交易可执行;不要强制阻止。 + +## 常见陷阱 + +| 陷阱 | 解决方案 | +|---|---| +| 使用 `eth_` 方法进行费用决策(`eth_gasPrice`、`eth_maxPriorityFeePerGas`、`eth_feeHistory`) | 使用 `linea_estimateGas` | +| 调用 `linea_estimateGas` 时省略 `from` | 始终传入发送方地址以获得 Karma 感知的估算 | +| 硬编码费用假设 | 根据返回的 `baseFeePerGas` 和 `priorityFeePerGas` 值构建费用 UI | +| 假设所有用户都是无 Gas 的 | 处理两种状态:无 Gas(零费用)和被拒绝名单(溢价费用) | +| 在重试之间缓存估算值 | 在发送前重新估算——发送方的 Karma 状态可能已发生变化 | + +## 下一步 + +- [JSON-RPC API](/tools/rpc/json-rpc) +- [声誉集成](/build-for-karma/guides/reputation-integration) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md new file mode 100644 index 0000000..65ec1b0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/index.md @@ -0,0 +1,20 @@ +--- +title: 使用 Karma +description: 在 Status Network 上集成基于 Karma 的无 Gas 用户体验和声誉感知功能的入口。 +keywords: [Karma, gasless, reputation, integration, Status Network] +slug: /build-for-karma/guides +sidebar_position: 3 +--- + +Karma 在 Status Network 上提供无 Gas 交易特权和声誉系统。 +本章节帮助您在应用中集成无 Gas 行为和基于层级的产品逻辑。 + +## 从这里开始 + +**处理交易?** + +- 从 [无 Gas 交易集成](/build-for-karma/guides/gasless-integration) 开始,使用 `linea_estimateGas` 作为无 Gas 与付费 Gas 结果的唯一数据来源。 + +**按声誉等级控制功能?** + +- 继续阅读 [声誉集成](/build-for-karma/guides/reputation-integration),了解如何在链上读取 Karma 余额和层级、进行合约门控,以及设计层级感知的前端。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md new file mode 100644 index 0000000..6424503 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/guides/reputation-integration.md @@ -0,0 +1,451 @@ +--- +title: 声誉集成指南 +description: 如何在 Status Network 上读取 Karma 层级、按声誉门控功能、以及构建 Karma 感知的智能合约和前端。 +keywords: [Karma, integration, smart contract, soulbound token, reputation, tiers, gasless, Status Network, developer guide] +slug: /build-for-karma/guides/reputation-integration +sidebar_position: 4 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Karma 是 Status Network 的灵魂绑定声誉代币。每个地址通过真实的网络参与来赚取 Karma,例如质押 SNT、桥接资产、提供流动性、使用应用或支付高级 Gas 费用。Karma 不能被购买、出售或转让。 + +本指南介绍如何读取 Karma 数据以及构建响应用户声誉层级的应用。 + +## 链上读取 Karma + +Karma 状态分布在两个合约中: + +- **Karma** — 灵魂绑定 ERC-20 代币。`balanceOf` 返回扣除任何削减后的净余额。转账和授权始终会回退。 +- **KarmaTiers** — 将余额映射到层级。调用 `getTierIdByKarmaBalance(balance)` 然后 `getTierById(tierId)` 来解析用户的层级及其 `txPerEpoch` 配额。 + + + + + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/// @notice Minimal interface for the Karma soulbound token. +interface IKarma { + /// @notice Net Karma balance of `account` after slashing. + function balanceOf(address account) external view returns (uint256); + + /// @notice Total amount slashed from `account` across all distributors. + function slashedAmountOf(address account) external view returns (uint256); +} + +/// @notice Minimal interface for the KarmaTiers registry. +interface IKarmaTiers { + struct Tier { + uint256 minKarma; + uint256 maxKarma; + string name; + uint32 txPerEpoch; // gasless transactions allowed per epoch + } + + /// @notice Returns the highest tier ID the given karma balance qualifies for. + function getTierIdByKarmaBalance(uint256 karmaBalance) external view returns (uint8); + + /// @notice Returns the full Tier struct for a given tier ID. + function getTierById(uint8 tierId) external view returns (Tier memory); + + /// @notice Returns the total number of configured tiers. + function getTierCount() external view returns (uint256); +} + +contract KarmaGated { + IKarma public karma; + IKarmaTiers public karmaTiers; + + constructor(address _karmaContract, address _karmaTiersContract) { + karma = IKarma(_karmaContract); + karmaTiers = IKarmaTiers(_karmaTiersContract); + } + + /// @notice Resolves the tier ID for `user` from their current Karma balance. + function tierIdOf(address user) public view returns (uint8) { + return karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + } + + modifier onlyTier(uint8 minTier) { + require(tierIdOf(msg.sender) >= minTier, "Karma tier too low"); + _; + } + + function premiumAction() external onlyTier(3) { + // Only users at tier 3 or above can call this + } + + function getDiscount(address user) external view returns (uint256) { + uint8 tierId = tierIdOf(user); + // Higher tiers get bigger discounts + return uint256(tierId) * 5; // 0%, 5%, 10%, ... + } +} +``` + + + + +```js +import { ethers } from 'ethers'; + +const provider = new ethers.JsonRpcProvider( + 'https://public.sepolia.rpc.status.network' +); + +const KARMA_ABI = [ + 'function balanceOf(address account) view returns (uint256)', + 'function slashedAmountOf(address account) view returns (uint256)', +]; + +const KARMA_TIERS_ABI = [ + 'function getTierIdByKarmaBalance(uint256 karmaBalance) view returns (uint8)', + 'function getTierById(uint8 tierId) view returns (tuple(uint256 minKarma, uint256 maxKarma, string name, uint32 txPerEpoch))', + 'function getTierCount() view returns (uint256)', +]; + +const karma = new ethers.Contract(KARMA_ADDRESS, KARMA_ABI, provider); +const karmaTiers = new ethers.Contract(KARMA_TIERS_ADDRESS, KARMA_TIERS_ABI, provider); + +// 读取用户的 Karma 余额并解析其层级 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +console.log(`Karma 余额: ${ethers.formatEther(balance)} KARMA`); +console.log(`层级: ${tier.name} (ID ${tierId})`); +console.log(`每周期交易配额: ${tier.txPerEpoch}`); +``` + + + + +```ts +import { createPublicClient, http } from 'viem'; + +const client = createPublicClient({ + transport: http('https://public.sepolia.rpc.status.network'), +}); + +const karmaAbi = [ + { + name: 'balanceOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, + { + name: 'slashedAmountOf', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'account', type: 'address' }], + outputs: [{ name: '', type: 'uint256' }], + }, +] as const; + +const karmaTiersAbi = [ + { + name: 'getTierIdByKarmaBalance', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'karmaBalance', type: 'uint256' }], + outputs: [{ name: '', type: 'uint8' }], + }, + { + name: 'getTierById', + type: 'function', + stateMutability: 'view', + inputs: [{ name: 'tierId', type: 'uint8' }], + outputs: [{ + name: 'tier', + type: 'tuple', + components: [ + { name: 'minKarma', type: 'uint256' }, + { name: 'maxKarma', type: 'uint256' }, + { name: 'name', type: 'string' }, + { name: 'txPerEpoch', type: 'uint32' }, + ], + }], + }, +] as const; + +// 两次顺序读取: 余额 → 层级 ID → 层级详情 +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +console.log(`层级: ${tier.name} (ID ${tierId})`); +console.log(`每周期交易配额: ${tier.txPerEpoch}`); +``` + + + + + +:::note 合约地址 +Karma 和 KarmaTiers 的测试网合约地址发布在[合约地址](/overview/general-info/contract-addresses/testnet-contracts)页面。 +::: + +## 可能的集成模式 + +### 功能门控 + +基于 Karma 层级解锁功能。[链上读取 Karma](#链上读取-karma) 部分中的 `onlyTier` 修饰器在合约层面强制执行访问控制: + + + + + +```solidity +function accessPremiumContent() external onlyTier(3) { + // Only users at tier 3 or above can call this +} +``` + + + + +```js +// 从 Karma 余额解析层级,然后门控 UI 功能 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +if (tierId >= 3) { + showPremiumFeatures(); +} else { + showUpgradePrompt(tierId); +} +``` + + + + + +### 动态定价 + +为高 Karma 用户提供折扣或更优惠的费率: + + + + + +```solidity +function calculateFee(address user, uint256 baseAmount) public view returns (uint256) { + uint8 tierId = karmaTiers.getTierIdByKarmaBalance(karma.balanceOf(user)); + // Each tier gives 5% discount + uint256 discount = uint256(tierId) * 5; + return baseAmount * (100 - discount) / 100; +} +``` + + + + +```js +// 从用户当前层级在客户端计算折扣费用 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); + +const discount = BigInt(tierId) * 5n; // 每层 5% 折扣 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`层级 ${tierId}: ${discount}% 折扣 → 费用 = ${fee}`); +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const discount = BigInt(tierId) * 5n; // 每层 5% 折扣 +const fee = baseAmount * (100n - discount) / 100n; + +console.log(`层级 ${tierId}: ${discount}% 折扣 → 费用 = ${fee}`); +``` + + + + + +### 声誉展示 + +通过直接从 `KarmaTiers` 合约读取名称,在 UI 中将 Karma 层级显示为信任信号: + + + + + +```js +// 从链上获取层级名称 — 无需硬编码数组 +const balance = await karma.balanceOf(userAddress); +const tierId = await karmaTiers.getTierIdByKarmaBalance(balance); +const tier = await karmaTiers.getTierById(tierId); + +function KarmaBadge({ tierName }) { + return {tierName}; +} + +// 使用 + +``` + + + + +```ts +const balance = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); + +const tierId = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierIdByKarmaBalance', + args: [balance], +}); + +const tier = await client.readContract({ + address: KARMA_TIERS_ADDRESS, + abi: karmaTiersAbi, + functionName: 'getTierById', + args: [tierId], +}); + +function KarmaBadge({ tierName }: { tierName: string }) { + return {tierName}; +} + +// 使用 + +``` + + + + + +### 加权治理 + +在应用的治理中使用 Karma 进行投票加权: + + + + + +```solidity +function vote(uint256 proposalId, bool support) external { + uint256 weight = karma.balanceOf(msg.sender); + proposals[proposalId].votes += support ? int256(weight) : -int256(weight); +} +``` + + + + +```js +// 读取用户的 Karma 余额作为投票权重,然后提交 +const weight = await karma.balanceOf(userAddress); +console.log(`投票权重: ${ethers.formatEther(weight)} KARMA`); + +// 调用您的治理合约 +const tx = await governanceContract.vote(proposalId, support); +await tx.wait(); +``` + + + + +```ts +import { formatEther, parseAbi } from 'viem'; + +// 从 Karma 余额读取投票权重 +const weight = await client.readContract({ + address: KARMA_ADDRESS, + abi: karmaAbi, + functionName: 'balanceOf', + args: [userAddress], +}); +console.log(`投票权重: ${formatEther(weight)} KARMA`); + +// 通过治理合约提交投票 +const { request } = await client.simulateContract({ + address: GOVERNANCE_ADDRESS, + abi: parseAbi(['function vote(uint256 proposalId, bool support) external']), + functionName: 'vote', + args: [proposalId, support], + account: userAddress, +}); +await walletClient.writeContract(request); +``` + + + + + +## 下一步 + +- 参阅[无 Gas 集成](/build-for-karma/guides/gasless-integration)了解如何在无 Gas 交易中集成 Karma +- 查看[因果代币经济学](/overview/tokenomics/karmic-tokenomics)了解 Karma 的获取和使用机制 +- 前往[无 Gas 交易](/overview/general-info/gasless-transactions)了解基于 RLN 的无 Gas 系统的技术细节 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/index.md new file mode 100644 index 0000000..9cd20f7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/index.md @@ -0,0 +1,21 @@ +--- +id: build-for-karma-index +title: Build for Karma +description: 开发者在 Status Network 上构建所需的一切 —— 无Gas交易与声誉整合指南、部署教程和应用创意。 +keywords: [Status Network, builder guides, Karma, gasless integration, reputation, deploy contracts, app ideas, developer documentation] +slug: /build-for-karma +sidebar_position: 1 +--- + +本章节是你在 Status Network 上的开发中心。无论你想了解在这里构建的优势、探索可以构建的项目、学习如何实现无Gas交易,还是部署你的第一个智能合约 —— 以 Karma 为核心的开发所需的一切都在这里。 + +## 从哪里开始 + +- [**为什么选择 Status Network**](/build-for-karma/why-status-network):在这里构建的理由 —— 无Gas经济模型、Karma、公共资金,以及与其他 L2 的对比。 +- [**构建什么**](/build-for-karma/what-to-build):可筛选的交互式创意目录,帮助你激发灵感。 +- [**使用 Karma**](/build-for-karma/guides):将无Gas交易和声誉感知功能整合到应用中的技术指南。 +- [**部署你的第一个合约**](/build-for-karma/deploying-contracts):使用 Hardhat、Foundry、Remix 或 Scaffold-ETH 2 进行分步合约部署。 + +## 社区 + +- 加入 [Telegram 开发者社区](https://t.me/statusl2),获取在 Status Network 上构建的帮助 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md new file mode 100644 index 0000000..c4d165d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/what-to-build.md @@ -0,0 +1,31 @@ +--- +title: 在 Status Network 上构建什么 +description: 按类别、投入和交付形态整理的 Status Network 高杠杆应用创意扫描目录。 +keywords: [Status Network, app ideas, builder ideas, Karma apps, privacy apps, gasless apps, DeFi, social apps, games, MVP] +sidebar_position: 3 +--- + +import IdeaCatalog from '@site/src/components/IdeaCatalog/IdeaCatalog'; + +Status Network 结合了无 Gas 体验、Karma 声誉和隐私原语。 +这解锁了在其他链上难以做好的产品。 + +以下是一些我们认为非常适合 Status Network 的示例产品,当然你不限于这些创意。 + +使用筛选器找到与你的专长和目标相符的创意。点击任意卡片查看完整范围。 + + + +## 立即开始构建 + +- [快速入门](/overview/introduction/quick-start) +- [如何使用 Karma 实现无 Gas 和声誉](/build-for-karma/guides) +- [在 Status Network 上部署合约](/build-for-karma/deploying-contracts) +- [Telegram 构建者社区](https://t.me/statusl2) + +## 生态与资金 + +构建者可从 Karma 持有者治理的公共资金池获得持续资金。 +随着应用增长,你将获得更多 Karma 以及对未来分配的更大影响力。 + +了解更多 → [生态与资金](/overview/tokenomics/public-funding) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md new file mode 100644 index 0000000..74c7839 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/build-for-karma/why-status-network.md @@ -0,0 +1,138 @@ +--- +title: 为什么在 Status Network 上构建 +description: 在 Status Network 上构建的理由 —— 无 Gas 交易、Karma 声誉、可持续公共资金,以及与其他 L2 的对比。 +keywords: [Status Network, why build, L2 comparison, gasless, Karma, public funding, developer advantages, Linea zkEVM] +sidebar_position: 2 +--- + +有数十个 L2 可供选择。以下是 Status Network 值得你关注的原因。 + + + +## 可持续公共资金 + +Status Network 不依赖一次性资助或基金会金库。相反,它拥有一个持续的公共资金池,资金来源于: + +- **原生收益**:来自桥接的收益型资产(初期为 ETH 和稳定币) +- **DEX 交易费**:来自原生去中心化交易所 +- **溢价 Gas 费**:来自列入黑名单的用户 +- **未来原生应用费用**(借贷、NFT、启动板等) + +了解更多 → [经济模型](/overview/tokenomics/economic-model) + +Karma 持有者投票决定如何将公共资金池分配给应用和构建者。你的应用通过产生活动和交易量对网络贡献越多,你和用户获得的 Karma 就越多,你对未来分配的影响力就越大。 + +**对构建者意味着什么:** + +- 不仅是每隔几个月需要重新申请的一次性资助,而是持续收入流 +- 资金随应用增长而扩展 —— 用户越多,Karma 越多,你获得的激励越多 +- 社区治理分配,无基金会把关 + +了解更多 → [公共资金](/overview/tokenomics/public-funding) + +## 默认无 Gas + +在大多数链上,“无 Gas”意味着配置 paymaster、运行 relayer 或集成账户抽象 SDK。在 Status Network 上,无 Gas 是默认行为。 + +每个 Karma 余额为正的地址都享有免费交易配额。无需 paymaster。无需 relayer。无需特殊钱包配置。你的应用对符合条件的用户直接免 Gas 运行。 + +**对构建者意味着什么:** + +- 无 Gas 带来的 UX 摩擦。你的 onboarding 漏斗不会在“桥接一些 ETH 用于 Gas”这一步流失用户 +- 无需集成 ERC-4337、元交易或 Gas 中继模式 +- 无需为用户承担 Gas 的基础设施成本 + +无 Gas 系统通过 [Rate Limiting Nullifiers (RLN)](/overview/general-info/gasless-transactions/#rln) 在 sequencer 层面强制执行,这是一种零知识防垃圾机制。 + +## 内置 Karma 声誉 + +Karma 是一种灵魂绑定(不可转让)代币,每个用户通过真实的网络参与获得,如质押、桥接、提供流动性、使用应用或支付溢价 Gas。它无法购买或转让。 + +**对构建者意味着什么:** + +- **信任信号**:高 Karma 用户是经过验证的活跃参与者,而非空投农民或女巫 +- **功能准入**:构建者可根据用户 Karma 等级设置功能准入,如高级功能、优先访问或更优费率 +- **防垃圾**:网络本身通过 RLN 机制限制垃圾,Karma 等级直接控制无 Gas 交易配额,意味着高 Karma 用户天然更不易发起垃圾 +- **无冷启动问题**:你的应用受益于生态系统中全网建立的声誉 + +了解更多 → [Karmic 代币经济学](/overview/tokenomics/karmic-tokenomics) + +## 注重隐私的公共产品 + +Status Network 采用 [自由技术研究所 (IFT)](https://free.technology) 的技术构建。最值得一提的是,无 Gas 交易系统使用 [RLN (Rate Limiting Nullifiers)](https://vac.dev/rln),这是由 IFT 研究部门 [Vac](https://vac.dev) 开发的零知识防垃圾机制。 + +我们与 IFT 在技术愿景上一致,致力于构建保障数字时代公民自由的公共产品。Status Network 将基于我们的无 Gas 特性增加注重隐私的模块。 + + + +## 完全 EVM 等效 + +Status Network 基于 [Linea zkEVM](https://linea.build) 技术栈构建。这意味着构建者可以: + +- 无需修改即可部署现有 Solidity 合约 +- 使用标准以太坊工具如 Hardhat、Foundry、ethers.js、viem 等 +- 使用标准 JSON-RPC 方法(部分与 Gas 费相关的方法除外。详见 [JSON-RPC API](/tools/rpc/json-rpc)) +- 继承 Linea rollup 架构的零知识证明安全 + +无自定义 VM。无非标准操作码。无需重写合约或后端。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/add-status-network.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/add-status-network.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/add-status-network.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/bridge/bridging-testnet.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/bridge/bridging-testnet.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md similarity index 98% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md index a6b1013..28ad301 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/pre-deposit.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/pre-deposit.md @@ -9,9 +9,9 @@ keywords: [Status Network, 预存, 活动, 金库] 我们与[Aragon](https://www.aragon.org/)合作,为Status Network用户开展预存活动。 本页面列出了活动的所有重要合约地址。 -:::note +::::note 根据金库的代币类型,它将部署在Ethereum主网或Linea主网上 -::: +:::: ## 金库 - **SNT Vault** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/testnet-contracts.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/testnet-contracts.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md similarity index 100% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/contract-addresses/tokens.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/contract-addresses/tokens.md diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md similarity index 75% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md index 40ac3d3..32f545a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/gasless-transactions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/gasless-transactions.md @@ -9,9 +9,11 @@ keywords: [Status Network, 无Gas交易, Linea, RLN, Rate Limiting Nullifier, Ka Status Network旨在大规模引入无Gas交易。这种无Gas方法的关键组件是Vac的速率限制无效器(Rate Limiting Nullifier),它允许在不需要传统Gas费用的情况下进行交易速率限制。本文档描述了安全启用无Gas交易所需的架构和集成元素。 -这些无Gas交易的实现代码可在[Status Network代码库](https://github.com/status-im/status-network-monorepo)中找到。 +无Gas交易的实现代码可在[Status Network代码库](https://github.com/status-im/status-network-monorepo?tab=readme-ov-file#architecture-components)中找到。 -### 1.2 RLN +有关无Gas运营级别实现的更多信息,请参阅[Karma集成指南](/build-for-karma/guides)。 + +## RLN RLN是一个零知识系统,旨在在不违规的情况下防止垃圾邮件而不损害用户隐私。它通过ZKP和Shamir秘密共享执行的加密速率限制来替代传统的Gas费用。 @@ -21,7 +23,7 @@ RLN特征: - **Shamir秘密共享和无效器:** 用户持有用于为交易生成唯一无效器的秘密密钥。如果用户在一个时期(例如,区块或时间戳)内超过其交易限制,他们的秘密密钥将变得可恢复,从而暴露他们。 - **垃圾邮件检测:** 超过限制的用户有效地泄露了他们的秘密,导致诸如拒绝列表包含、未来更高的Gas成本或潜在的代币削减等惩罚。 -### 1.3. RLN成员管理 +### RLN成员管理 RLN使用稀疏默克尔树来高效处理大规模成员证明。基准研究确定,支持100万账户的高度为20的树为证明生成和验证提供了最佳性能。对于超过100万账户的可扩展性,可以使用多个SMT和注册表来引导用户到适当的树。 @@ -34,20 +36,28 @@ graph TD B -->|灵魂绑定代币| C{等级分配} subgraph "等级限制" - D[Basic] - E[Active] - F[Regular] - G[Power User] - H[High-Throughput] - I[S-Tier] + T1[Entry] + T2[Newbie] + T3[Basic] + T4[Active] + T5[Regular] + T6[Power User] + T7[Pro User] + T8[High-Throughput] + T9[S-Tier] + T10[Legendary] end - C --> D - C --> E - C --> F - C --> G - C --> H - C --> I + C --> T1 + C --> T2 + C --> T3 + C --> T4 + C --> T5 + C --> T6 + C --> T7 + C --> T8 + C --> T9 + C --> T10 %% RLN流程 A -->|提交无Gas交易| J[RPC节点] @@ -96,15 +106,15 @@ graph TD class A wallet class B,L karma class C tier - class D,E,F,G,H,I tierNode + class T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 tierNode class J,K,K1,K2,K3,M,N,O rln class P,Q,R,S,T,U,V,W sequencer class X,Y,Z,AA gas ``` -## 3. 系统组件 +## 系统组件 -### 3.1 Prover +### Prover Prover是一个由三个服务组成的系统: @@ -114,7 +124,7 @@ Prover是一个由三个服务组成的系统: 这些服务确保安全的凭据管理、证明生成和交易跟踪,gRPC使与Sequencer的低延迟通信成为可能。 -### 3.2 RLN验证器 +### RLN验证器 RLN验证器是sequencer内部的besu插件,通过Java本机接口利用RLN的Zerokit Rust库。 验证器: @@ -125,7 +135,7 @@ RLN验证器是sequencer内部的besu插件,通过Java本机接口利用RLN的 验证失败的交易将被拒绝,用户可能会被临时添加到拒绝列表中。 -### 3.3 拒绝列表 +### 拒绝列表 拒绝列表临时限制超过配额或参与垃圾邮件的用户: @@ -133,10 +143,16 @@ RLN验证器是sequencer内部的besu插件,通过Java本机接口利用RLN的 - 用户可以通过支付高级Gas费用来绕过限制 - 支付高级费用会将用户从列表中移除并获得额外的Karma -### 3.4 `linea_estimateGas` RPC修改 +## `linea_estimateGas` RPC修改 -linea_estimateGas方法被定制以考虑拒绝列表上的用户: +Status Network扩展了基础Linea `linea_estimateGas`,使其具备Karma感知行为,因此返回的**手续费字段**可能取决于发送者地址`from`的Karma余额。 +`gasLimit`的计算与基础Linea实现保持不变(其内部使用标准的`eth_estimateGas`逻辑)。 -- 检查用户的拒绝列表状态 -- 根据需要添加高级Gas倍数 -- 为用户提供透明度和准确的Gas估算 \ No newline at end of file +具体来说,Status Network的`linea_estimateGas`: + +- **应用拒绝列表溢价**:如果发送者在拒绝列表上,节点会计算正常的费用估算,然后对**手续费字段**应用溢价倍数。 +- **为符合条件的用户返回无Gas估算**:如果发送者有可用的Karma配额,该方法返回零`baseFeePerGas`和`priorityFeePerGas`。 + +上述逻辑包含在我们修改的`LineaEstimateGas`实现中,开源于[Status Network代码库的这一部分](https://github.com/status-im/status-network-monorepo/blob/v1.0.1/besu-plugins/linea-sequencer/sequencer/src/main/java/net/consensys/linea/rpc/methods/LineaEstimateGas.java#L218)。 + +有关Karma感知费用估算行为和`linea_estimateGas`的详细信息,请参阅[JSON-RPC API](/tools/rpc/json-rpc)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/network-details.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md similarity index 92% rename from i18n/zh/docusaurus-plugin-content-docs/current/general-info/network-details.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md index 2686d16..8ba4c10 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/general-info/network-details.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/network-details.md @@ -18,4 +18,4 @@ - 将 dApp 连接到网络 - 验证智能合约 -关于如何将网络添加到您的钱包,请参阅我们的 [Status Network 添加指南](./add-status-network.md)。 +关于如何将网络添加到您的钱包,请参阅我们的 [Status Network 添加指南](/overview/general-info/add-status-network)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md new file mode 100644 index 0000000..7c2953e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/general-info/privacy.md @@ -0,0 +1 @@ +# Status Network 如何连接隐私 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/index.md similarity index 80% rename from i18n/zh/docusaurus-plugin-content-docs/current/index.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/index.md index 2b85bbe..ed2fa9f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/index.md @@ -3,7 +3,7 @@ id: index title: 欢迎来到 Status Network description: Status Network 是一个无 Gas 费的第二层区块链网络,支持无缝、免费的去中心化应用程序。通过简单的钱包设置、水龙头和部署工具开始构建。 keywords: [Status Network, 第二层, 无gas区块链, 以太坊扩展, L2, validium, web3开发, dapp开发, 区块链开发] -slug: / +slug: /overview sidebar_position: 1 --- @@ -41,16 +41,16 @@ Status Network 原生集成了 Status Wallet、Keycard、Waku 和 Codex,这些 想跳过解释部分直接开始构建吗?以下是开始的方法: -1. [将 Status Network 添加到您的钱包](/general-info/add-status-network) -2. [获取测试网 ETH](/tools/testnet-faucets) -3. [跨链资产](/general-info/bridge/bridging-testnet) -4. [部署您的第一个合约](/tutorials/deploying-contracts/using-remix) +1. [将 Status Network 添加到您的钱包](/overview/general-info/add-status-network) +2. [获取测试网 ETH](/tools/core-infrastructure/testnet-faucets) +3. [跨链资产](/overview/general-info/bridge/bridging-testnet) +4. [部署您的第一个合约](/build-for-karma/deploying-contracts/using-remix) ## 支持与资源 加入我们的社区并访问所需资源: - 加入我们的 [Telegram 开发者社区](https://t.me/statusl2) -- 查看[网络详情](/general-info/network-details) -- 浏览[合约地址](/general-info/contract-addresses/testnet-contracts) +- 查看[网络详情](/overview/general-info/network-details) +- 浏览[合约地址](/overview/general-info/contract-addresses/testnet-contracts) 准备好构建令人惊叹的应用了吗?今天就开始您在免费网络上的旅程! diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/introduction/quick-start.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md similarity index 88% rename from i18n/zh/docusaurus-plugin-content-docs/current/introduction/quick-start.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md index 5164bc3..6e9beeb 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/introduction/quick-start.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/introduction/quick-start.md @@ -10,7 +10,7 @@ 1. **将 Status Network 测试网添加到 MetaMask**: - 按照 [Status Network 添加指南](/general-info/add-status-network) 的步骤说明将 Status Network 测试网添加到 MetaMask。 + 按照 [Status Network 添加指南](/overview/general-info/add-status-network) 的步骤说明将 Status Network 测试网添加到 MetaMask。 2. **获取测试 ETH**: @@ -102,8 +102,8 @@ contract SimpleStorage { - **获取支持**: - 加入我们的 [Telegram 社区](https://t.me/statusl2) 获取帮助 - - 查看我们的 [网络详情](/general-info/network-details) 了解更多信息 - - 了解如何 [跨链代币](/general-info/bridge/bridging-testnet) 到 Status Network + - 查看我们的 [网络详情](/overview/general-info/network-details) 了解更多信息 + - 了解如何 [跨链代币](/overview/general-info/bridge/bridging-testnet) 到 Status Network ## 总结 @@ -114,5 +114,5 @@ contract SimpleStorage { - 通过存储和检索数字与您部署的合约进行交互 对于更高级的开发,请查看我们使用以下工具的部署指南: -- [Hardhat](/tutorials/deploying-contracts/using-hardhat) -- [Foundry](/tutorials/deploying-contracts/using-foundry) +- [Hardhat](/build-for-karma/deploying-contracts/using-hardhat) +- [Foundry](/build-for-karma/deploying-contracts/using-foundry) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/other/official-links.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/other/official-links.md similarity index 94% rename from i18n/zh/docusaurus-plugin-content-docs/current/other/official-links.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/other/official-links.md index d9762f4..b793395 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/other/official-links.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/other/official-links.md @@ -22,4 +22,4 @@ - **Telegram 社区**: [t.me/statusl2](https://t.me/statusl2) - **X/推特**: [x.com/statusL2](https://x.com/statusL2) -关于如何将网络添加到您的钱包,请参阅我们的[添加网络指南](/general-info/add-status-network)。 +关于如何将网络添加到您的钱包,请参阅我们的[添加网络指南](/overview/general-info/add-status-network)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md similarity index 99% rename from i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md index 2734084..a8c162b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/economic-model.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/economic-model.md @@ -15,4 +15,3 @@ - **未来的原生应用**:网络将在后期引入其他收入来源,如借贷市场、NFT市场和代币发射台,每个应用都将产生的费用的一定比例回馈到L2运营中。 这个模型确保了Status Network在提供免费交易的同时保持经济可持续性。通过利用TVL及其相关的原生收益以及交易量,Status Network在用户、流动性提供者和开发者之间建立激励机制的平衡,创建一个不依赖通胀型代币发行的自我持续生态系统。 - diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md similarity index 99% rename from i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md index 840fe32..7c22d50 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/karmic-tokenomics.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/karmic-tokenomics.md @@ -44,4 +44,4 @@ 4. 更高的原生收益和费用吸引更多 TVL,因为用户跨链额外的收益型资产。 -随着 TVL 和采用率的增长,资金机会也随之增加,加强网络的可持续性。 \ No newline at end of file +随着 TVL 和采用率的增长,资金机会也随之增加,加强网络的可持续性。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md similarity index 92% rename from i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md index 8274653..2f04748 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/pre-deposits.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/pre-deposits.md @@ -34,7 +34,7 @@ SNT、LINEA 和 ETH 金库是 [Aragon](https://aragon.org/) 专门为 Status Net ### 已部署合约 -完整的地址和网络列表请参阅[预存款金库合约](../general-info/contract-addresses/pre-deposit)。 +完整的地址和网络列表请参阅[预存款金库合约](/overview/general-info/contract-addresses/pre-deposit)。 ## Generic Protocol 金库 (GUSD) @@ -50,9 +50,9 @@ GUSD 金库通过 [Steakhouse Financial](https://steakhouse.financial/) 和 [Mor 产生的部分收益将在主网启动时注入 Status Network 的原生资金池。 -:::note +::::note GUSD 金库**不**发行收据代币。您的存款记录在 Generic Protocol 的合约中;您可以在 [Hub](https://hub.status.network/pre-deposits) 连接钱包或直接在链上验证您的仓位。 -::: +:::: ### DepositorHelper 合约 @@ -78,7 +78,7 @@ Status Network 预存款通过 DepositorHelper 与 Generic Protocol 交互: 预存款者可获得: -- **Karma**:不可转让的治理代币;授予免 Gas 吞吐量和投票权(详见 [Karmic 代币经济学](./karmic-tokenomics))。 +- **Karma**:不可转让的治理代币;授予免 Gas 吞吐量和投票权(详见 [Karmic 代币经济学](/overview/tokenomics/karmic-tokenomics))。 - **流动性激励**:在所有金库中分配 1500 万 SNT 和 2000 万 LINEA 代币。 - **稳定币存款者的 Generic Protocol 积分**:Generic Protocol 在 Status Network 主网启动时可使用的积分。 - **原生应用积分**:待原生应用公布其代币经济学后确认。 @@ -114,8 +114,8 @@ Status Network 预存款通过 DepositorHelper 与 Generic Protocol 交互: ## 延伸阅读 -- [预存款金库合约](../general-info/contract-addresses/pre-deposit) — 已部署地址信息 -- [Karmic 代币经济学](./karmic-tokenomics) — Karma 的获取和使用方式 -- [经济模型](./economic-model) — Status Network 的可持续收入模型 +- [预存款金库合约](/overview/general-info/contract-addresses/pre-deposit) — 已部署地址信息 +- [Karmic 代币经济学](/overview/tokenomics/karmic-tokenomics) — Karma 的获取和使用方式 +- [经济模型](/overview/tokenomics/economic-model) — Status Network 的可持续收入模型 - [Aragon 文档](https://docs.aragon.org/) - [Generic Protocol 文档](https://docs.generic.money/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md similarity index 99% rename from i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md index a408b15..741ddf9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/public-funding.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/public-funding.md @@ -18,4 +18,4 @@ Status Network 最关键的组成部分之一是应用程序资金池,旨在 - **建设者与网络增长保持一致**: 积极为网络使用和采用做出贡献的开发者将以因果值的形式获得更多投票权,使他们能够为自己投票,并强化创建有价值应用程序的激励。 -这种机制为建设者提供了持续的、非剥削性的资本来源,使他们能够专注于创建成功的应用程序。 \ No newline at end of file +这种机制为建设者提供了持续的、非剥削性的资本来源,使他们能够专注于创建成功的应用程序。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md similarity index 98% rename from i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md rename to i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md index 4d30bc5..b636e8f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tokenomics/snt-staking.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/overview/tokenomics/snt-staking.md @@ -28,4 +28,4 @@ Status Network Token (SNT) 于2017年6月推出,作为 Status 生态系统的 - **赚取因果值**:质押者累积因果值,这赋予治理权力和无 gas 交易访问权。 - **更高的免费交易配额**:拥有更多因果值的用户享有更大的无 gas 交易限额。 - **增强的治理影响力**:随着因果值的累积,SNT 质押者可以在公共资金分配、流动性激励和网络政策决策中发挥关键作用。 -- **更高的声誉**:通过质押他们的 SNT,持有者可以表明与生态系统的一致性,并以因果值的形式展示声誉分数。生态系统中的应用程序有强烈的动机来吸引具有高声誉的用户。 \ No newline at end of file +- **更高的声誉**:通过质押他们的 SNT,持有者可以表明与生态系统的一致性,并以因果值的形式展示声誉分数。生态系统中的应用程序有强烈的动机来吸引具有高声誉的用户。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/block-explorers.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/block-explorers.md deleted file mode 100644 index dc8dbb5..0000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tools/block-explorers.md +++ /dev/null @@ -1,35 +0,0 @@ -# Status Network 测试网浏览器 - -Status Network 区块浏览器可在 [sepoliascan.status.network](https://sepoliascan.status.network) 访问。 - -### 功能 -- 查看交易详情和状态 -- 追踪代币转账和余额 -- 验证智能合约源代码 -- 监控 gas 价格和网络活动 -- 查看并与已验证的智能合约交互 -- 追踪任意地址的代币持有情况 - -## Sepolia 浏览器(第一层) - -要追踪 Sepolia(第一层)上的交易,请使用 [Sepolia Etherscan](https://sepolia.etherscan.io)。 - -这对以下情况特别有用: -- 监控从 L1 到 L2 的跨链交易 -- 追踪代币存取 -- 验证 L1 合约交互 - -## 合约验证 - -要在 Status Network 浏览器上验证您的智能合约: - -1. 访问[合约验证](https://sepoliascan.status.network/contract-verification) -2. 输入您的合约地址 -3. 上传源代码并提供编译详情 -4. 提交验证 - -验证完成后,您的合约源代码将公开可见,用户可以通过浏览器直接与之交互。 - -## API 访问 - -Status Network 浏览器为开发者提供 API 端点。API 文档将很快提供。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md new file mode 100644 index 0000000..26768b0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/block-explorers.md @@ -0,0 +1,25 @@ +--- +title: 区块浏览器 +description: Status Network 区块浏览器,用于查看交易、验证合约和监控网络活动。 +keywords: [区块浏览器, 交易追踪, 智能合约验证] +--- + +# 区块浏览器 + +## Status Network 主网 + +*即将推出。* + +## Status Network 测试网 (Sepolia) + +| 浏览器 | URL | 功能 | +|----------|-----|----------| +| Sepoliascan | [sepoliascan.status.network](https://sepoliascan.status.network) | 搜索交易、验证和交互智能合约、追踪余额 | + +如需合约验证,请访问 Sepoliascan 上的[合约验证](https://sepoliascan.status.network/contract-verification)页面。 + +Sepolia 上的 L1 活动可通过 [Sepolia Etherscan](https://sepolia.etherscan.io) 追踪。 + +## Status Network 测试网 (Hoodi) + +*即将推出。* diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/bridge.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md similarity index 71% rename from i18n/zh/docusaurus-plugin-content-docs/current/tools/bridge.md rename to i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md index ad09c7e..e6e3a92 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tools/bridge.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/bridge.md @@ -1,13 +1,12 @@ +--- +title: Status Network 跨链桥 +description: 使用 Status Network 跨链桥在 Sepolia 和 Status Network 测试网之间转移代币的完整指南。 +keywords: [Status Network 跨链桥, 代币跨链, 跨链转账, L1 L2 跨链桥, Sepolia 跨链桥] +--- + # Status Network 测试网跨链桥 -Status Network 测试网跨链桥允许用户在 Sepolia(第一层)和 Status Network 测试网(第二层)之间转移代币。跨链桥界面可在 [bridge.status.network](https://bridge.status.network) 访问。 - -## 概述 - -跨链桥作为关键基础设施组件,支持以下功能: -- 从 Sepolia 向 Status Network 测试网转移代币 -- 从 Status Network 测试网向 Sepolia 提取代币 -- L1 和 L2 之间的消息传递 +Status Network 测试网跨链桥允许用户在 Sepolia(第一层)和 Status Network 测试网(第二层)之间转移代币和传递消息。跨链桥界面可在 [bridge.status.network](https://bridge.status.network) 访问。 ## 跨链桥合约 @@ -22,7 +21,7 @@ Status Network 测试网跨链桥允许用户在 Sepolia(第一层)和 Statu - **代币跨链**: 在网络间转移 ERC-20 代币 - **ETH 跨链**: 在 Sepolia 和 Status Network 之间跨链 ETH - **交易追踪**: 监控您的跨链交易状态 -- **gas 估算**: 跨链前查看预估 gas 费用 +- **Gas 估算**: 跨链前查看预估 Gas 费用 ## 支持的代币 @@ -30,7 +29,7 @@ Status Network 测试网跨链桥允许用户在 Sepolia(第一层)和 Statu ## 使用跨链桥 -关于如何使用跨链桥的详细说明,包括分步指南和重要的安全考虑事项,请参考我们的[跨链指南](../general-info/bridge/bridging-testnet.md)。 +关于如何使用跨链桥的详细说明,包括分步指南和重要的安全考虑事项,请参考我们的[跨链指南](/overview/general-info/bridge/bridging-testnet)。 ## 监控跨链交易 @@ -41,5 +40,5 @@ Status Network 测试网跨链桥允许用户在 Sepolia(第一层)和 Statu ## 支持 如果您在使用跨链桥时遇到任何问题: -- 查看[跨链指南](../general-info/bridge/bridging-testnet.md)了解常见解决方案 +- 查看[跨链指南](/overview/general-info/bridge/bridging-testnet)了解常见解决方案 - 加入我们的 [Telegram 社区](https://t.me/statusl2)获取帮助 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md similarity index 91% rename from i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc.md rename to i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md index 906f8a4..fb7b8d9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/rpc-endpoints.md @@ -1,3 +1,7 @@ +--- +slug: /tools/core-infrastructure/rpc-endpoints +--- + # RPC 端点 Status Network 提供公共 RPC(远程过程调用)端点,允许您与网络进行交互。 @@ -11,7 +15,7 @@ https://public.sepolia.rpc.status.network ## 使用 RPC ### 添加到 MetaMask -有关使用此 RPC 将 Status Network 添加到您钱包的说明,请参阅我们的[添加网络指南](../general-info/add-status-network.md)。 +有关使用此 RPC 将 Status Network 添加到您钱包的说明,请参阅我们的[添加网络指南](/overview/general-info/add-status-network)。 ### Web3 库配置 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md similarity index 99% rename from i18n/zh/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md rename to i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md index 48de5fd..c5e61f0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tools/testnet-faucets.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/core-infrastructure/testnet-faucets.md @@ -4,6 +4,8 @@ description: 获取用于 Status Network 开发的测试网 ETH 或 STT。通过 keywords: [Status Network 水龙头, 测试网 ETH, 测试代币, STT, Sepolia 水龙头, 区块链测试, 开发代币] --- +# 测试网水龙头 + 要开始在 Status Network 测试网上进行开发,您可能需要一些测试网 ETH 或测试资产。 ## Status Network 测试网 ETH 水龙头 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/index.md new file mode 100644 index 0000000..793c08d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/index.md @@ -0,0 +1,33 @@ +--- +id: tools-index +title: 工具与基础设施 +description: Status Network 上可用的开发者工具、基础设施服务和集成 — RPC 端点、跨链桥、水龙头、浏览器和合作伙伴集成。 +keywords: [Status Network, 开发者工具, RPC, 跨链桥, 水龙头, 区块浏览器, 基础设施] +slug: /tools +sidebar_position: 1 +--- + +Status Network 上可用的开发者工具、基础设施服务和集成的完整参考。 + +## 核心基础设施 + +在 Status Network 上构建和测试所需的基本服务: + +| 工具 | 描述 | 链接 | +|---|---|---| +| **RPC 端点** | 公共 JSON-RPC 和 WebSocket 访问 | [RPC →](/tools/core-infrastructure/rpc-endpoints) | +| **跨链桥** | 在 Ethereum Sepolia 和 Status Network 之间转移资产 | [跨链桥 →](/tools/core-infrastructure/bridge) | +| **测试网水龙头** | 获取用于开发的测试网资产 | [水龙头 →](/tools/core-infrastructure/testnet-faucets) | +| **区块浏览器** | 浏览交易、合约和网络活动 | [浏览器 →](/tools/core-infrastructure/block-explorers) | + +## 基础设施合作伙伴 + +Status Network 正在引入涵盖索引、预言机、数据提供商、钱包、安全等领域的基础设施合作伙伴。在[基础设施合作伙伴](/tools/infrastructure)页面查看完整的类别列表和使用方法。 + +想成为合作伙伴?[在此申请](https://statusnetwork.typeform.com/partner)。 + +## 快速链接 + +- [网络详情](/overview/general-info/network-details) — Chain ID、RPC URL 和完整的网络配置 +- [将 Status Network 添加到您的钱包](/overview/general-info/add-status-network) +- [跨链指南](/overview/general-info/bridge/bridging-testnet) — 分步跨链说明 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/infrastructure.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/infrastructure.md new file mode 100644 index 0000000..15fd716 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/infrastructure.md @@ -0,0 +1,32 @@ +--- +title: 基础设施合作伙伴 +description: Status Network 上可用的基础设施合作伙伴和第三方集成 — RPC 提供商、预言机、索引器、账户抽象、开发工具等。 +keywords: [Status Network, 基础设施, 合作伙伴, 预言机, 索引, RPC, 账户抽象, 开发工具, 跨链, 入金] +sidebar_position: 6 +--- + +# 基础设施合作伙伴 + +:::note 即将推出 +Status Network 正在积极引入以下类别的基础设施合作伙伴。此页面将随着集成上线而更新。 +::: + +## 合作伙伴类别 + +| 类别 | 描述 | +|---|---| +| **RPC 提供商** | 专用 RPC 基础设施,提供可靠、低延迟的节点访问 | +| **预言机和 VRF** | 价格信息、RWA 数据、链上随机数 VRF、DEX 数据源 | +| **Safe 和多重签名** | 用于资金管理和治理的多重签名钱包 | +| **索引器** | 去中心化和中心化索引,用于智能合约事件和链上数据 | +| **账户抽象** | 智能账户、密钥管理和无缝用户入门 | +| **开发工具** | SDK、部署工具和 Status Network 社交登录 | +| **跨链** | 跨链交换和桥接解决方案 | +| **入金聚合器** | 法币到加密货币的入金和出金解决方案 | + +## 成为合作伙伴 + +如果您提供基础设施服务并希望与 Status Network 集成: + +- [申请成为合作伙伴](https://statusnetwork.typeform.com/partner) +- [加入 Telegram 开发者社区](https://t.me/statusl2) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md new file mode 100644 index 0000000..134ecd4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/json-rpc.md @@ -0,0 +1,57 @@ +--- +title: JSON-RPC API +description: 面向开发者的 Status Network JSON-RPC API 参考。 +keywords: + [ + Status Network, + JSON-RPC, + Linea, + EIP-1559, + eth_estimateGas, + linea_estimateGas, + Karma, + gasless, + ] +--- + +Status Network 基于 Linea zkEVM,这意味着**大多数 JSON-RPC 方法的行为与标准 EVM 节点完全一致**。 + +关于已支持方法及其标准语义的权威列表,请参阅以下官方文档: + +- **[以太坊 JSON-RPC API](https://ethereum.github.io/execution-apis/api-documented/)** — 标准以太坊 RPC 方法 +- **[Linea JSON-RPC API 参考](https://docs.linea.build/api/reference)** — Linea 专属方法,包括 `linea_estimateGas` + +## Status Network 扩展 + +Status Network 在标准 Linea JSON-RPC 基础上扩展了具有 Karma 感知能力的费用估算: + +### `linea_estimateGas` + +在 Linea 上,[`linea_estimateGas`](https://docs.linea.build/api/reference/linea-estimategas) 是估算 Gas 的推荐方式,在单次调用中返回 `gasLimit`、`baseFeePerGas` 和 `priorityFeePerGas`。 + +Status Network 为 `linea_estimateGas` 增加了 Karma 感知行为: + +- **无 Gas 用户**:对具有可用 Karma 配额的符合条件用户,返回零 `baseFeePerGas` 和 `priorityFeePerGas` +- **被拒绝名单用户**:对拒绝名单中的用户,在费用字段上应用溢价乘数 + +### Status Network RPC 差异 + +在基础 Linea 上,`linea_estimateGas` 已经是推荐方法,因为它返回的费用字段考虑了 L1 验证成本和数据压缩——这是 `eth_estimateGas` 和其他 `eth_` 命名空间调用所不具备的。 +Status Network 的分叉进一步将 `linea_estimateGas` 扩展为具有 Karma 感知能力;所有其他 JSON-RPC 方法保留其标准语义。 + +这意味着使用传统的 `eth_` 方法费用流程(例如 `eth_gasPrice`、`eth_maxPriorityFeePerGas` 或 `eth_feeHistory`)可能导致**不准确**的费用建议:它们同时缺少 Linea 的 L2 专属定价和 Status Network 的 Karma 调整。 + +在 Status Network 上,使用 `linea_estimateGas` 作为 `gasLimit`、`baseFeePerGas` 和 `priorityFeePerGas` 的唯一数据来源。 + +基础 Linea 行为请参阅 [Linea 的 Gas 费用指南](https://docs.linea.build/network/how-to/gas-fees) 和 [Linea 的 `linea_estimateGas` 参考](https://docs.linea.build/api/reference/linea-estimategas)。 + +:::info +包含代码示例、迁移步骤和常见陷阱的详细集成指南,请参阅[为 Karma 构建](/build-for-karma/guides)指南。 +::: + +### 附加资源 + +- [Linea 的 Gas 费用指南](https://docs.linea.build/network/how-to/gas-fees) +- [Linea 的 `linea_estimateGas` 参考](https://docs.linea.build/api/reference/linea-estimategas) +- [Karmic 代币经济学](/overview/tokenomics/karmic-tokenomics) — Karma 如何影响 Gas 费用 +- [无 Gas 交易](/overview/general-info/gasless-transactions) — 基于 RLN 的无 Gas 系统的技术细节 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md b/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md similarity index 95% rename from i18n/zh/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md rename to i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md index 4182cbd..1482772 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/tutorials/running-an-rpc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/tools/rpc/running-an-rpc.md @@ -4,8 +4,6 @@ description: 使用官方RPC工具为Status Network设置和运行自己的RPC keywords: [RPC节点, Status Network RPC, 区块链节点, WebSocket, wss, 自托管RPC, 网络基础设施, Status L2 RPC工具] --- -# 运行自己的RPC节点 - 本教程将指导您完成为Status Network设置和运行自己的Remote Procedure Call (RPC)节点的过程。通过运行自己的RPC节点,您可以更好地控制与Status Network的交互,增强隐私性,并减少对第三方服务的依赖。 ## 入门 @@ -13,14 +11,15 @@ keywords: [RPC节点, Status Network RPC, 区块链节点, WebSocket, wss, 自 [Status Network RPC Tools仓库](https://github.com/status-im/status-l2-rpc-tools)提供了运行自己的RPC节点所需的所有工具、创世文件和设置脚本。 ### 完整设置指南 -有关详细的设置说明、先决条件、系统要求和分步指导,请参阅仓库中的**[官方README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)**。 + +有关详细的设置说明、先决条件、系统要求和分步指导,请参阅仓库中的 [**官方 README**](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)。 ## 节点选项 设置脚本提供两种节点实现供选择: -- **Besu节点**: 在`http://localhost:8545`上运行 -- **Geth节点**: 在`http://localhost:8445`上运行 +- **Besu节点**: 在端口 `8545` 上运行 +- **Geth节点**: 在端口 `8445` 上运行 根据需要,您可以运行其中一个或同时运行两个。 @@ -55,6 +54,7 @@ keywords: [RPC节点, Status Network RPC, 区块链节点, WebSocket, wss, 自 - **路由规则**: 其他所有方法都路由到 Geth。 ## 验证节点 + 在下面的示例中,如果使用Besu,请将``替换为`8545`;如果使用Geth,则替换为`8445`。 ### 基本验证 @@ -88,6 +88,7 @@ curl -X POST \ ``` 最新且健康的节点应显示: + - `eth_blockNumber`与可信参考(如公共RPC或区块浏览器)匹配 - `eth_syncing`返回`false`(完全同步) - `net_peerCount`大于0(已连接到对等节点) @@ -117,7 +118,6 @@ ws://localhost:8446 # Geth {"jsonrpc":"2.0","method":"eth_unsubscribe","params":["0x..."],"id":1} ``` - ## 高级功能 ### 批量请求 @@ -144,6 +144,7 @@ ws://localhost:8446 # Geth ### 常见问题 1. **端口已被占用** + ```bash # 检查什么正在使用端口8545(Besu)或8445(Geth) lsof -i :8545 @@ -153,7 +154,8 @@ ws://localhost:8446 # Geth kill -9 ``` -2. **Docker容器问题** +2. **Docker 容器问题** + ```bash # 检查运行中的容器 docker ps @@ -238,7 +240,7 @@ netstat -tulpn | grep :8445 如果遇到任何问题: - 查看[官方README](https://github.com/status-im/status-l2-rpc-tools/blob/master/README.md)获取最新更新 -- 查看我们的[网络详情](/general-info/network-details)和文档 +- 查看我们的[网络详情](/overview/general-info/network-details)和文档 - 加入我们的[Telegram社区](https://t.me/statusl2)寻求支持 ## 其他资源 diff --git a/i18n/zh/docusaurus-theme-classic/navbar.json b/i18n/zh/docusaurus-theme-classic/navbar.json index 8064df5..4c9e615 100644 --- a/i18n/zh/docusaurus-theme-classic/navbar.json +++ b/i18n/zh/docusaurus-theme-classic/navbar.json @@ -1,14 +1,22 @@ { "title": { - "message": "Status Network Docs", + "message": "Status Network 文档", "description": "The title in the navbar" }, "logo.alt": { - "message": "Status Network Logo", + "message": "Status Network 标志", "description": "The alt text of navbar logo" }, - "item.label.Hub": { - "message": "Hub", - "description": "Navbar item with label Hub" + "item.label.Overview": { + "message": "概览", + "description": "Navbar item with label Overview" + }, + "item.label.Build for Karma": { + "message": "为 Karma 构建", + "description": "Navbar item with label Build for Karma" + }, + "item.label.Tools": { + "message": "工具", + "description": "Navbar item with label Tools" } } diff --git a/package.json b/package.json index 396e711..42e644c 100644 --- a/package.json +++ b/package.json @@ -16,19 +16,23 @@ }, "dependencies": { "@acid-info/docusaurus-umami": "^1.0.2", - "@docusaurus/core": "^3.8.0", - "@docusaurus/preset-classic": "^3.8.0", - "@docusaurus/theme-mermaid": "^3.8.0", + "@docusaurus/core": "^3.9.0", + "@docusaurus/plugin-client-redirects": "^3.9.0", + "@docusaurus/preset-classic": "^3.9.0", + "@docusaurus/theme-mermaid": "^3.9.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", + "katex": "^0.16.28", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0" + "react-dom": "^18.0.0", + "rehype-katex": "^7.0.1", + "remark-math": "^6.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.8.0", - "@docusaurus/tsconfig": "^3.8.0", - "@docusaurus/types": "^3.8.0", + "@docusaurus/module-type-aliases": "^3.9.0", + "@docusaurus/tsconfig": "^3.9.0", + "@docusaurus/types": "^3.9.0", "typescript": "~5.5.2" }, "browserslist": { diff --git a/sidebars.ts b/sidebars.ts index 715c3fa..1d4e2d7 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -1,7 +1,7 @@ import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; const sidebars: SidebarsConfig = { - tutorialSidebar: [ + homeSidebar: [ { type: 'category', label: 'INTRODUCTION', @@ -9,12 +9,12 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'index', + id: 'overview/index', label: '🌴 Home', }, { type: 'doc', - id: 'introduction/quick-start', + id: 'overview/introduction/quick-start', label: '⚡ Quick Start', }, ], @@ -26,27 +26,27 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'tokenomics/economic-model', + id: 'overview/tokenomics/economic-model', label: '🤝 Economic Model', }, { type: 'doc', - id: 'tokenomics/public-funding', + id: 'overview/tokenomics/public-funding', label: '💰 Public Funding', - }, + }, { type: 'doc', - id: 'tokenomics/karmic-tokenomics', + id: 'overview/tokenomics/karmic-tokenomics', label: '🐉 Karmic Tokenomics', - }, + }, { type: 'doc', - id: 'tokenomics/snt-staking', + id: 'overview/tokenomics/snt-staking', label: '💎 SNT Staking', }, { type: 'doc', - id: 'tokenomics/pre-deposits', + id: 'overview/tokenomics/pre-deposits', label: '💰 Pre-Deposits', }, ], @@ -58,17 +58,17 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'general-info/network-details', + id: 'overview/general-info/network-details', label: '🌐 Network Details', }, { type: 'doc', - id: 'general-info/gasless-transactions', + id: 'overview/general-info/gasless-transactions', label: '⛽ Gasless Transactions', }, { type: 'doc', - id: 'general-info/add-status-network', + id: 'overview/general-info/add-status-network', label: '➕ Add Status Network', }, { @@ -78,17 +78,17 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'general-info/contract-addresses/tokens', + id: 'overview/general-info/contract-addresses/tokens', label: '🪙 Tokens', }, { type: 'doc', - id: 'general-info/contract-addresses/testnet-contracts', + id: 'overview/general-info/contract-addresses/testnet-contracts', label: '🧪 Testnet Contracts', }, { type: 'doc', - id: 'general-info/contract-addresses/pre-deposit', + id: 'overview/general-info/contract-addresses/pre-deposit', label: '💰 Pre-Deposit Vault Contracts', }, ], @@ -100,79 +100,13 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'general-info/bridge/bridging-testnet', + id: 'overview/general-info/bridge/bridging-testnet', label: '🧪 Bridging Testnet', }, ], }, ], }, - { - type: 'category', - label: 'TOOLS', - collapsed: false, - items: [ - { - type: 'doc', - id: 'tools/rpc', - label: '🔌 RPC', - }, - { - type: 'doc', - id: 'tools/bridge', - label: '🌉 Bridge', - }, - { - type: 'doc', - id: 'tools/testnet-faucets', - label: '🚰 Testnet Faucets', - }, - { - type: 'doc', - id: 'tools/block-explorers', - label: '🔎 Block Explorers', - }, - ], - }, - { - type: 'category', - label: 'TUTORIALS', - collapsed: false, - items: [ - { - type: 'category', - label: '🚀 Deploying a Smart Contract', - collapsed: false, - items: [ - { - type: 'doc', - id: 'tutorials/deploying-contracts/using-hardhat', - label: '🎩 Using Hardhat', - }, - { - type: 'doc', - id: 'tutorials/deploying-contracts/using-foundry', - label: '⚒️ Using Foundry', - }, - { - type: 'doc', - id: 'tutorials/deploying-contracts/using-remix', - label: '🎛️ Using Remix', - }, - { - type: 'doc', - id: 'tutorials/deploying-contracts/using-se2', - label: '🏗 Using Scaffold-ETH 2', - }, - ], - }, - { - type: 'doc', - id: 'tutorials/running-an-rpc', - label: '🌐 Running an RPC node', - }, - ], - }, { type: 'category', label: 'OTHER DOCS', @@ -180,12 +114,156 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'other/official-links', + id: 'overview/other/official-links', label: '🔗 Official Links', }, ], }, ], + buildForKarmaSidebar: [ + { + type: 'category', + label: 'BUILD FOR KARMA', + collapsed: false, + link: { + type: 'doc', + id: 'build-for-karma/build-for-karma-index', + }, + items: [ + { + type: 'doc', + id: 'build-for-karma/why-status-network', + label: '🌟 Why Status Network', + }, + { + type: 'doc', + id: 'build-for-karma/what-to-build', + label: '💡 What to Build', + }, + ], + }, + { + type: 'category', + label: 'USING KARMA', + collapsed: false, + link: { + type: 'doc', + id: 'build-for-karma/guides/index', + }, + items: [ + { + type: 'doc', + id: 'build-for-karma/guides/gasless-integration', + label: '⛽ Gasless Integration', + }, + { + type: 'doc', + id: 'build-for-karma/guides/reputation-integration', + label: '🔰 Reputation Integration', + }, + ], + }, + { + type: 'category', + label: 'DEPLOYING CONTRACTS', + collapsed: false, + link: { + type: 'doc', + id: 'build-for-karma/deploying-contracts/deploying-contracts-index', + }, + items: [ + { + type: 'doc', + id: 'build-for-karma/deploying-contracts/using-hardhat', + label: '🎩 Using Hardhat', + }, + { + type: 'doc', + id: 'build-for-karma/deploying-contracts/using-foundry', + label: '⚒️ Using Foundry', + }, + { + type: 'doc', + id: 'build-for-karma/deploying-contracts/using-remix', + label: '🎛️ Using Remix', + }, + { + type: 'doc', + id: 'build-for-karma/deploying-contracts/using-se2', + label: '🏗 Using Scaffold-ETH 2', + }, + ], + }, + ], + toolsSidebar: [ + { + type: 'category', + label: 'TOOLS', + collapsed: false, + link: { + type: 'doc', + id: 'tools/tools-index', + }, + items: [ + { + type: 'category', + label: 'CORE INFRASTRUCTURE', + collapsed: false, + items: [ + { + type: 'doc', + id: 'tools/core-infrastructure/rpc-endpoints', + label: '📡 RPC Endpoints', + }, + { + type: 'doc', + id: 'tools/core-infrastructure/bridge', + label: '🌉 Bridge', + }, + { + type: 'doc', + id: 'tools/core-infrastructure/testnet-faucets', + label: '🚰 Testnet Faucets', + }, + { + type: 'doc', + id: 'tools/core-infrastructure/block-explorers', + label: '🔎 Block Explorers', + }, + ], + }, + { + type: 'category', + label: 'RPC', + collapsed: false, + items: [ + { + type: 'doc', + id: 'tools/rpc/json-rpc', + label: '🔌 JSON-RPC API', + }, + { + type: 'doc', + id: 'tools/rpc/running-an-rpc', + label: '🌐 Running an RPC Node', + }, + ], + }, + ], + }, + { + type: 'category', + label: 'PARTNERS', + collapsed: false, + items: [ + { + type: 'doc', + id: 'tools/infrastructure', + label: '🤝 Infrastructure Partners', + }, + ], + }, + ], }; export default sidebars; diff --git a/src/components/IdeaCatalog/FilterBar.tsx b/src/components/IdeaCatalog/FilterBar.tsx new file mode 100644 index 0000000..1cf3cd0 --- /dev/null +++ b/src/components/IdeaCatalog/FilterBar.tsx @@ -0,0 +1,185 @@ +import React, { useState } from 'react'; +import Translate, {translate} from '@docusaurus/Translate'; +import type { + Category, + StatusPrimitive, + BuilderProfile, + Difficulty, + UserSegment, + DomainExpertise, + CapitalReq, +} from './types'; +import { + builderProfileLabels, + capitalReqLabels, + categoryLabels, + difficultyLabels, + domainExpertiseLabels, + statusPrimitiveLabels, + userSegmentLabels, +} from './types'; + +export interface Filters { + categories: Category[]; + superpowers: StatusPrimitive[]; + builderProfiles: BuilderProfile[]; + difficulties: Difficulty[]; + userSegments: UserSegment[]; + domainExpertises: DomainExpertise[]; + capitalReqs: CapitalReq[]; +} + +export const emptyFilters: Filters = { + categories: [], + superpowers: [], + builderProfiles: [], + difficulties: [], + userSegments: [], + domainExpertises: [], + capitalReqs: [], +}; + +interface FilterBarProps { + filters: Filters; + onChange: (filters: Filters) => void; + totalCount: number; + visibleCount: number; +} + +export default function FilterBar({ + filters, + onChange, + totalCount, + visibleCount, +}: FilterBarProps): JSX.Element { + const [showAdvanced, setShowAdvanced] = useState(false); + + const hasAnyFilter = Object.values(filters).some((arr) => arr.length > 0); + + function toggle(key: K, value: Filters[K][number]) { + const current = filters[key] as Filters[K][number][]; + const next: Filters[K][number][] = current.includes(value) + ? current.filter((v) => v !== value) + : [...current, value]; + onChange({ ...filters, [key]: next }); + } + + return ( +
+ {/* Primary filters */} + toggle('categories', v)} + /> + toggle('superpowers', v)} + /> + toggle('builderProfiles', v)} + /> + toggle('difficulties', v)} + /> + + {/* Advanced toggle */} + + + {/* Advanced filters */} + {showAdvanced && ( +
+ toggle('domainExpertises', v)} + /> + toggle('userSegments', v)} + /> + toggle('capitalReqs', v)} + /> +
+ )} + + {/* Result count + clear */} +
+ + + {'Showing {visibleCount} of {totalCount} ideas'} + + + {hasAnyFilter && ( + + )} +
+
+ ); +} + +function FilterGroup({ + label, + options, + selected, + onToggle, +}: { + label: string; + options: Record; + selected: T[]; + onToggle: (value: T) => void; +}): JSX.Element { + return ( +
+ {label} +
+ {(Object.entries(options) as [T, string][]).map(([key, display]) => ( + + ))} +
+
+ ); +} diff --git a/src/components/IdeaCatalog/IdeaCard.tsx b/src/components/IdeaCatalog/IdeaCard.tsx new file mode 100644 index 0000000..3f993e3 --- /dev/null +++ b/src/components/IdeaCatalog/IdeaCard.tsx @@ -0,0 +1,139 @@ +import React, { useState } from 'react'; +import {translate} from '@docusaurus/Translate'; +import { + Idea, + builderProfileLabels, + categoryColors, + categoryLabels, + difficultyColors, + difficultyLabels, + domainExpertiseLabels, + opsBurdenLabels, + securityCriticalityLabels, + statusPrimitiveColors, + statusPrimitiveLabels, + userSegmentLabels, +} from './types'; + +interface IdeaCardProps { + idea: Idea; +} + +export default function IdeaCard({ idea }: IdeaCardProps): JSX.Element { + const [expanded, setExpanded] = useState(false); + const detailId = `idea-card-detail-${idea.id}`; + + return ( +
setExpanded((v) => !v)} + role="button" + tabIndex={0} + aria-expanded={expanded} + aria-controls={detailId} + onKeyDown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + setExpanded((v) => !v); + } + }} + > + {/* Header row */} +
+ + {categoryLabels[idea.category]} + +
+ + {/* Title */} +

{idea.title}

+ + {/* Status Primitives */} +
+ {idea.superpowers.map((sp) => ( + + {statusPrimitiveLabels[sp]} + + ))} +
+ + {/* One-line summary */} +

{idea.what}

+ + {/* Badges row */} +
+ + {difficultyLabels[idea.difficulty]} + +
+ + {/* Tags row */} +
+ {idea.builderProfiles.map((bp) => ( + + {builderProfileLabels[bp]} + + ))} + + {domainExpertiseLabels[idea.domainExpertise]} + + + {userSegmentLabels[idea.userSegment]} + +
+ + {/* Expand indicator */} + {expanded ? '\u25B2' : '\u25BC'} + + {/* Expanded detail */} + {expanded && ( +
+
+ {translate({id: 'ideaCatalog.card.whyStatus', message: 'Why Status:'})} {idea.whyStatus} +
+
+ {translate({id: 'ideaCatalog.card.mvpScope', message: 'MVP Scope:'})} {idea.mvp} +
+
+ + +
+
+ )} +
+ ); +} + +function MetaBadge({ label, value }: { label: string; value: string }): JSX.Element { + return ( + + {label} + {value} + + ); +} diff --git a/src/components/IdeaCatalog/IdeaCatalog.tsx b/src/components/IdeaCatalog/IdeaCatalog.tsx new file mode 100644 index 0000000..96e3cff --- /dev/null +++ b/src/components/IdeaCatalog/IdeaCatalog.tsx @@ -0,0 +1,70 @@ +import React, { useState, useMemo } from 'react'; +import Translate, {translate} from '@docusaurus/Translate'; +import { ideas } from './ideaData'; +import type { Idea } from './types'; +import FilterBar, { emptyFilters, type Filters } from './FilterBar'; +import IdeaCard from './IdeaCard'; + +function matchesFilters(idea: Idea, filters: Filters): boolean { + if (filters.categories.length > 0 && !filters.categories.includes(idea.category)) return false; + if ( + filters.superpowers.length > 0 && + !filters.superpowers.some((sp) => idea.superpowers.includes(sp)) + ) + return false; + if ( + filters.builderProfiles.length > 0 && + !filters.builderProfiles.some((bp) => idea.builderProfiles.includes(bp)) + ) + return false; + if (filters.difficulties.length > 0 && !filters.difficulties.includes(idea.difficulty)) + return false; + if (filters.userSegments.length > 0 && !filters.userSegments.includes(idea.userSegment)) + return false; + if ( + filters.domainExpertises.length > 0 && + !filters.domainExpertises.includes(idea.domainExpertise) + ) + return false; + if (filters.capitalReqs.length > 0 && !filters.capitalReqs.includes(idea.capitalRequirement)) + return false; + return true; +} + +export default function IdeaCatalog(): JSX.Element { + const [filters, setFilters] = useState(emptyFilters); + + const filtered = useMemo(() => ideas.filter((idea) => matchesFilters(idea, filters)), [filters]); + + return ( +
+ +
+ {filtered.map((idea) => ( + + ))} +
+ {filtered.length === 0 && ( +

+ + No ideas match the current filters. + {' '} + +

+ )} +
+ ); +} diff --git a/src/components/IdeaCatalog/ideaData.ts b/src/components/IdeaCatalog/ideaData.ts new file mode 100644 index 0000000..96b5291 --- /dev/null +++ b/src/components/IdeaCatalog/ideaData.ts @@ -0,0 +1,281 @@ +import {translate} from '@docusaurus/Translate'; +import type { Idea } from './types'; +import { + Category, + StatusPrimitive, + BuilderProfile, + Difficulty, + UserSegment, + DomainExpertise, + CapitalReq, + SecurityCriticality, + OpsBurden, +} from './types'; + +export const ideas: Idea[] = [ + // ── Karma ────────────────────────────────────────────── + { + id: 'karma-gated-access', + title: translate({id: 'ideaCatalog.idea.karmaGatedAccess.title', message: 'Karma-Gated Content Feed'}), + category: Category.reputation, + superpowers: [StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.frontendDev], + what: translate({id: 'ideaCatalog.idea.karmaGatedAccess.what', message: 'A social feed where creators publish posts visible only to followers who meet a minimum Karma tier — think Substack meets on-chain reputation'}), + whyStatus: translate({id: 'ideaCatalog.idea.karmaGatedAccess.whyStatus', message: 'Karma tiers are resolved on-chain, so access control is trustless — no subscription billing, no platform lock-in, and Sybil-resistant by design'}), + mvp: translate({id: 'ideaCatalog.idea.karmaGatedAccess.mvp', message: 'Feed with public + gated posts, tier-check middleware (possibly on-chain), creator dashboard showing audience breakdown by Karma tier'}), + difficulty: Difficulty.lowMed, + userSegment: UserSegment.communityCreator, + domainExpertise: DomainExpertise.communityDesign, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.low, + }, + { + id: 'karma-liquidity-protocol', + title: translate({id: 'ideaCatalog.idea.karmaLiquidityProtocol.title', message: 'Karma-Boosted Yield Vault'}), + category: Category.reputation, + superpowers: [StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.contractDev], + what: translate({id: 'ideaCatalog.idea.karmaLiquidityProtocol.what', message: 'A DeFi vault where depositors with higher Karma tiers receive boosted APY — early supporters and active participants earn better returns'}), + whyStatus: translate({id: 'ideaCatalog.idea.karmaLiquidityProtocol.whyStatus', message: 'The native reputation graph lets the vault weight rewards by proven participation instead of token-weighted voting or off-chain allowlists'}), + mvp: translate({id: 'ideaCatalog.idea.karmaLiquidityProtocol.mvp', message: 'Single-asset vault with two yield tiers, on-chain Karma tier lookup at deposit, and a dashboard showing effective APY per tier'}), + difficulty: Difficulty.medHigh, + userSegment: UserSegment.traderDefi, + domainExpertise: DomainExpertise.defiMechanisms, + capitalRequirement: CapitalReq.seedLiquidity, + securityCriticality: SecurityCriticality.high, + opsBurden: OpsBurden.medium, + }, + { + id: 'karma-incentive-market', + title: translate({id: 'ideaCatalog.idea.karmaIncentiveMarket.title', message: 'Karma Bounty Board'}), + category: Category.reputation, + superpowers: [StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.karmaIncentiveMarket.what', message: 'A bounty marketplace where only users above a Karma threshold can claim tasks — project teams post work (bug reports, translations, onboarding guides) and pay verified contributors'}), + whyStatus: translate({id: 'ideaCatalog.idea.karmaIncentiveMarket.whyStatus', message: 'Karma-gating filters out spamming bots and low-effort submissions, giving bounty issuers confidence that claimants have a real track record on the network'}), + mvp: translate({id: 'ideaCatalog.idea.karmaIncentiveMarket.mvp', message: 'Bounty listing page, Karma-gated claim flow, submission review panel, and on-chain payout on approval'}), + difficulty: Difficulty.med, + userSegment: UserSegment.communityCreator, + domainExpertise: DomainExpertise.communityDesign, + capitalRequirement: CapitalReq.operatingTreasury, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.medium, + }, + { + id: 'karma-dynamic-pricing', + title: translate({id: 'ideaCatalog.idea.karmaDynamicPricing.title', message: 'Karma-Tiered NFT Marketplace'}), + category: Category.reputation, + superpowers: [StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.frontendDev], + what: translate({id: 'ideaCatalog.idea.karmaDynamicPricing.what', message: 'An NFT marketplace where listing fees, royalties, and early-access windows adjust based on the buyer\'s and seller\'s Karma tier — trusted participants get better terms automatically'}), + whyStatus: translate({id: 'ideaCatalog.idea.karmaDynamicPricing.whyStatus', message: 'On-chain tier resolution at checkout means dynamic pricing is enforced trustlessly — no coupon codes, no backend allowlists'}), + mvp: translate({id: 'ideaCatalog.idea.karmaDynamicPricing.mvp', message: 'NFT listing + purchase flow with tiered fee schedule, on-chain tier check at checkout, and seller analytics showing sales by buyer tier'}), + difficulty: Difficulty.lowMed, + userSegment: UserSegment.communityCreator, + domainExpertise: DomainExpertise.consumerProduct, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.low, + }, + + // ── Privacy ─────────────────────────────────────────── + { + id: 'stealth-address-payments', + title: translate({id: 'ideaCatalog.idea.stealthAddressPayments.title', message: 'Stealth Address Payments'}), + category: Category.privacy, + superpowers: [StatusPrimitive.privacy, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.protocolDev], + what: translate({id: 'ideaCatalog.idea.stealthAddressPayments.what', message: 'One-time receiving addresses with unlinkable spend paths'}), + whyStatus: translate({id: 'ideaCatalog.idea.stealthAddressPayments.whyStatus', message: 'Privacy primitives + low-friction transaction UX'}), + mvp: translate({id: 'ideaCatalog.idea.stealthAddressPayments.mvp', message: 'Address generation, receive flow, and private spend flow'}), + difficulty: Difficulty.medHigh, + userSegment: UserSegment.consumer, + domainExpertise: DomainExpertise.privacy, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.critical, + opsBurden: OpsBurden.low, + }, + { + id: 'private-payroll', + title: translate({id: 'ideaCatalog.idea.privatePayroll.title', message: 'Private Payroll & Savings'}), + category: Category.privacy, + superpowers: [StatusPrimitive.privacy], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.privatePayroll.what', message: 'Salary and savings rails that do not expose balances and recipients'}), + whyStatus: translate({id: 'ideaCatalog.idea.privatePayroll.whyStatus', message: 'Real-world demand requires privacy for payroll and savings, but current public ledgers do not meet the needs'}), + mvp: translate({id: 'ideaCatalog.idea.privatePayroll.mvp', message: 'Employer payout batch + recipient claim + shielded vault'}), + difficulty: Difficulty.med, + userSegment: UserSegment.daoOrgOps, + domainExpertise: DomainExpertise.paymentsFinops, + capitalRequirement: CapitalReq.operatingTreasury, + securityCriticality: SecurityCriticality.high, + opsBurden: OpsBurden.medium, + }, + { + id: 'shielded-microtransactions', + title: translate({id: 'ideaCatalog.idea.shieldedMicrotransactions.title', message: 'Shielded Microtransactions / Card Layer'}), + category: Category.privacy, + superpowers: [StatusPrimitive.privacy, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.shieldedMicrotransactions.what', message: 'Low-value payments and subscriptions with hidden amounts/participants'}), + whyStatus: translate({id: 'ideaCatalog.idea.shieldedMicrotransactions.whyStatus', message: 'Gasless interactions make frequent payments viable'}), + mvp: translate({id: 'ideaCatalog.idea.shieldedMicrotransactions.mvp', message: 'Private tip/subscription flow with recurring authorization'}), + difficulty: Difficulty.medHigh, + userSegment: UserSegment.consumer, + domainExpertise: DomainExpertise.paymentsFinops, + capitalRequirement: CapitalReq.operatingTreasury, + securityCriticality: SecurityCriticality.high, + opsBurden: OpsBurden.medium, + }, + { + id: 'private-lending', + title: translate({id: 'ideaCatalog.idea.privateLending.title', message: 'Private Lending & Borrowing'}), + category: Category.privacy, + superpowers: [StatusPrimitive.privacy, StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.contractDev, BuilderProfile.protocolDev], + what: translate({id: 'ideaCatalog.idea.privateLending.what', message: 'Borrow/lend flows that avoid public position leakage'}), + whyStatus: translate({id: 'ideaCatalog.idea.privateLending.whyStatus', message: 'Privacy + Karma-based trust signals'}), + mvp: translate({id: 'ideaCatalog.idea.privateLending.mvp', message: 'One collateral type, one borrow asset, private health checks'}), + difficulty: Difficulty.high, + userSegment: UserSegment.traderDefi, + domainExpertise: DomainExpertise.defiMechanisms, + capitalRequirement: CapitalReq.deepLiquidity, + securityCriticality: SecurityCriticality.critical, + opsBurden: OpsBurden.high, + }, + { + id: 'private-multisig', + title: translate({id: 'ideaCatalog.idea.privateMultisig.title', message: 'Private Multisig'}), + category: Category.privacy, + superpowers: [StatusPrimitive.privacy], + builderProfiles: [BuilderProfile.contractDev, BuilderProfile.protocolDev], + what: translate({id: 'ideaCatalog.idea.privateMultisig.what', message: 'Multisig ops where signers, threshold, and tx details are obscured'}), + whyStatus: translate({id: 'ideaCatalog.idea.privateMultisig.whyStatus', message: 'Privacy-sensitive orgs can still operate on-chain'}), + mvp: translate({id: 'ideaCatalog.idea.privateMultisig.mvp', message: 'Policy setup + signing flow + execution log with selective disclosure'}), + difficulty: Difficulty.high, + userSegment: UserSegment.daoOrgOps, + domainExpertise: DomainExpertise.privacy, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.critical, + opsBurden: OpsBurden.medium, + }, + + // ── Social ───────────────────────────────────────────── + { + id: 'social-mini-app', + title: translate({id: 'ideaCatalog.idea.socialMiniApp.title', message: 'Gasless Micro-Blogging Platform'}), + category: Category.social, + superpowers: [StatusPrimitive.reputation, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.frontendDev], + what: translate({id: 'ideaCatalog.idea.socialMiniApp.what', message: 'A Twitter-style micro-blog where every post, reply, and like is an on-chain action that costs the user nothing — with Karma badges that surface trusted voices'}), + whyStatus: translate({id: 'ideaCatalog.idea.socialMiniApp.whyStatus', message: 'Gasless transactions make post-per-action economics viable; Karma badges replace arbitrary blue-check systems with reputation earned through actual network participation'}), + mvp: translate({id: 'ideaCatalog.idea.socialMiniApp.mvp', message: 'Timeline feed, post/reply/like actions, user profiles with Karma trust badges, and basic content moderation controls'}), + difficulty: Difficulty.lowMed, + userSegment: UserSegment.consumer, + domainExpertise: DomainExpertise.consumerProduct, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.low, + opsBurden: OpsBurden.medium, + }, + { + id: 'creator-economy-toolkit', + title: translate({id: 'ideaCatalog.idea.creatorEconomyToolkit.title', message: 'Fan Pass Platform'}), + category: Category.social, + superpowers: [StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.frontendDev], + what: translate({id: 'ideaCatalog.idea.creatorEconomyToolkit.what', message: 'A platform where creators mint free digital passes that unlock exclusive content, group chats, and IRL event access — fans collect passes gaslessly'}), + whyStatus: translate({id: 'ideaCatalog.idea.creatorEconomyToolkit.whyStatus', message: 'Zero-cost minting and claiming removes the paywall friction from community passes, letting creators grow audiences without asking fans to pay gas'}), + mvp: translate({id: 'ideaCatalog.idea.creatorEconomyToolkit.mvp', message: 'Creator page with pass minting, fan claim flow, pass-gated content section, and event check-in via pass verification'}), + difficulty: Difficulty.med, + userSegment: UserSegment.communityCreator, + domainExpertise: DomainExpertise.consumerProduct, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.medium, + }, + { + id: 'community-governance', + title: translate({id: 'ideaCatalog.idea.communityGovernance.title', message: 'DAO Proposal & Karma-Weighted Voting App'}), + category: Category.social, + superpowers: [StatusPrimitive.reputation, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.communityGovernance.what', message: 'A governance app where community members submit proposals and vote with weight proportional to their Karma tier — active contributors have a louder voice than passive holders'}), + whyStatus: translate({id: 'ideaCatalog.idea.communityGovernance.whyStatus', message: 'Karma-weighted voting rewards real participation over token accumulation, and gasless voting removes the cost barrier that suppresses turnout in most DAOs'}), + mvp: translate({id: 'ideaCatalog.idea.communityGovernance.mvp', message: 'Proposal submission form, Karma-weighted voting with on-chain tallying, results dashboard with participation breakdown by tier'}), + difficulty: Difficulty.med, + userSegment: UserSegment.daoOrgOps, + domainExpertise: DomainExpertise.communityDesign, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.low, + }, + + // ── Games ────────────────────────────────────────────── + { + id: 'onchain-strategy-game', + title: translate({id: 'ideaCatalog.idea.onchainStrategyGame.title', message: 'Fog-of-War Conquest Game'}), + category: Category.games, + superpowers: [StatusPrimitive.privacy, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.onchainStrategyGame.what', message: 'A hex-grid territory control game where troop positions are hidden via private state and every move is a gasless on-chain transaction — think Risk board game with real fog of war on-chain'}), + whyStatus: translate({id: 'ideaCatalog.idea.onchainStrategyGame.whyStatus', message: 'Privacy primitives enable genuine hidden information (not just client-side fog), while gasless moves make the rapid back-and-forth of strategy games economically feasible'}), + mvp: translate({id: 'ideaCatalog.idea.onchainStrategyGame.mvp', message: 'Hex map with fog-of-war, one unit type, private troop placement, turn resolution, and a match leaderboard'}), + difficulty: Difficulty.medHigh, + userSegment: UserSegment.consumer, + domainExpertise: DomainExpertise.consumerProduct, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.medium, + }, + { + id: 'prediction-market', + title: translate({id: 'ideaCatalog.idea.predictionMarket.title', message: 'Prediction Market'}), + category: Category.games, + superpowers: [StatusPrimitive.privacy, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.fullStack], + what: translate({id: 'ideaCatalog.idea.predictionMarket.what', message: 'Markets with low-friction entries and private participant positions.'}), + whyStatus: translate({id: 'ideaCatalog.idea.predictionMarket.whyStatus', message: 'Better market participation and less copy-trading behavior.'}), + mvp: translate({id: 'ideaCatalog.idea.predictionMarket.mvp', message: 'Market creation + position entry + settlement + basic analytics.'}), + difficulty: Difficulty.medHigh, + userSegment: UserSegment.traderDefi, + domainExpertise: DomainExpertise.defiMechanisms, + capitalRequirement: CapitalReq.seedLiquidity, + securityCriticality: SecurityCriticality.high, + opsBurden: OpsBurden.high, + }, + + // ── DeFi ─────────────────────────────────────────────── + { + id: 'native-dex-companion', + title: translate({id: 'ideaCatalog.idea.nativeDexCompanion.title', message: 'Karma-Tiered Swap Router'}), + category: Category.defi, + superpowers: [StatusPrimitive.reputation], + builderProfiles: [BuilderProfile.contractDev], + what: translate({id: 'ideaCatalog.idea.nativeDexCompanion.what', message: 'A swap interface that routes trades through the best on-chain pools and gives high-Karma users reduced fees and priority execution — a loyalty program baked into the DEX layer'}), + whyStatus: translate({id: 'ideaCatalog.idea.nativeDexCompanion.whyStatus', message: 'Karma tiers let the router offer fee discounts trustlessly, and tight integration with native liquidity means better rates without external aggregator dependencies'}), + mvp: translate({id: 'ideaCatalog.idea.nativeDexCompanion.mvp', message: 'Token swap UI with tiered fee display, Karma-aware routing logic, LP position panel, and trade history showing fees saved by tier'}), + difficulty: Difficulty.med, + userSegment: UserSegment.traderDefi, + domainExpertise: DomainExpertise.defiMechanisms, + capitalRequirement: CapitalReq.seedLiquidity, + securityCriticality: SecurityCriticality.high, + opsBurden: OpsBurden.medium, + }, + { + id: 'public-funding-interface', + title: translate({id: 'ideaCatalog.idea.publicFundingInterface.title', message: 'Public Funding Interface'}), + category: Category.defi, + superpowers: [StatusPrimitive.reputation, StatusPrimitive.gasless], + builderProfiles: [BuilderProfile.frontendDev], + what: translate({id: 'ideaCatalog.idea.publicFundingInterface.what', message: 'End-to-end grant discovery, proposal, voting, and tracking dashboard'}), + whyStatus: translate({id: 'ideaCatalog.idea.publicFundingInterface.whyStatus', message: 'Directly supports ecosystem growth flywheel'}), + mvp: translate({id: 'ideaCatalog.idea.publicFundingInterface.mvp', message: 'Proposal board + vote screen + grant progress tracker'}), + difficulty: Difficulty.med, + userSegment: UserSegment.daoOrgOps, + domainExpertise: DomainExpertise.communityDesign, + capitalRequirement: CapitalReq.none, + securityCriticality: SecurityCriticality.medium, + opsBurden: OpsBurden.low, + }, +]; diff --git a/src/components/IdeaCatalog/types.ts b/src/components/IdeaCatalog/types.ts new file mode 100644 index 0000000..f1c82c2 --- /dev/null +++ b/src/components/IdeaCatalog/types.ts @@ -0,0 +1,186 @@ +import {translate} from '@docusaurus/Translate'; + +export const Category = { + reputation: 'reputation', + privacy: 'privacy', + social: 'social', + games: 'games', + defi: 'defi', +} as const; + +export type Category = (typeof Category)[keyof typeof Category]; + +export const StatusPrimitive = { + gasless: 'gasless', + reputation: 'reputation', + privacy: 'privacy', +} as const; + +export type StatusPrimitive = (typeof StatusPrimitive)[keyof typeof StatusPrimitive]; + +export const BuilderProfile = { + frontendDev: 'frontend-dev', + contractDev: 'contract-dev', + fullStack: 'full-stack', + protocolDev: 'protocol-dev', +} as const; + +export type BuilderProfile = (typeof BuilderProfile)[keyof typeof BuilderProfile]; + +export const Difficulty = { + lowMed: 'Low-Med', + med: 'Med', + medHigh: 'Med-High', + high: 'High', +} as const; + +export type Difficulty = (typeof Difficulty)[keyof typeof Difficulty]; + +export const UserSegment = { + consumer: 'consumer', + communityCreator: 'community-creator', + daoOrgOps: 'dao-org-ops', + traderDefi: 'trader-defi', +} as const; + +export type UserSegment = (typeof UserSegment)[keyof typeof UserSegment]; + +export const DomainExpertise = { + communityDesign: 'community-design', + defiMechanisms: 'defi-mechanisms', + privacy: 'privacy', + paymentsFinops: 'payments-finops', + consumerProduct: 'consumer-product', +} as const; + +export type DomainExpertise = (typeof DomainExpertise)[keyof typeof DomainExpertise]; + +export const CapitalReq = { + none: 'none', + operatingTreasury: 'operating-treasury', + seedLiquidity: 'seed-liquidity', + deepLiquidity: 'deep-liquidity', +} as const; + +export type CapitalReq = (typeof CapitalReq)[keyof typeof CapitalReq]; + +export const SecurityCriticality = { + low: 'Low', + medium: 'Medium', + high: 'High', + critical: 'Critical', +} as const; + +export type SecurityCriticality = + (typeof SecurityCriticality)[keyof typeof SecurityCriticality]; + +export const OpsBurden = { + low: 'Low', + medium: 'Medium', + high: 'High', + veryHigh: 'Very High', +} as const; + +export type OpsBurden = (typeof OpsBurden)[keyof typeof OpsBurden]; + +export interface Idea { + id: string; + title: string; + category: Category; + superpowers: StatusPrimitive[]; + builderProfiles: BuilderProfile[]; + what: string; + whyStatus: string; + mvp: string; + difficulty: Difficulty; + userSegment: UserSegment; + domainExpertise: DomainExpertise; + capitalRequirement: CapitalReq; + securityCriticality: SecurityCriticality; + opsBurden: OpsBurden; +} + +export const categoryLabels = { + [Category.reputation]: translate({id: 'ideaCatalog.category.reputation', message: 'Reputation'}), + [Category.privacy]: translate({id: 'ideaCatalog.category.privacy', message: 'Privacy'}), + [Category.social]: translate({id: 'ideaCatalog.category.social', message: 'Social'}), + [Category.games]: translate({id: 'ideaCatalog.category.games', message: 'Games'}), + [Category.defi]: translate({id: 'ideaCatalog.category.defi', message: 'DeFi'}), +} satisfies Record; + +export const difficultyLabels = { + [Difficulty.lowMed]: translate({id: 'ideaCatalog.difficulty.lowMed', message: 'Low-Med'}), + [Difficulty.med]: translate({id: 'ideaCatalog.difficulty.med', message: 'Med'}), + [Difficulty.medHigh]: translate({id: 'ideaCatalog.difficulty.medHigh', message: 'Med-High'}), + [Difficulty.high]: translate({id: 'ideaCatalog.difficulty.high', message: 'High'}), +} satisfies Record; + +export const userSegmentLabels = { + [UserSegment.consumer]: translate({id: 'ideaCatalog.userSegment.consumer', message: 'Consumer'}), + [UserSegment.communityCreator]: translate({id: 'ideaCatalog.userSegment.communityCreator', message: 'Community/Creator'}), + [UserSegment.daoOrgOps]: translate({id: 'ideaCatalog.userSegment.daoOrgOps', message: 'DAO/Org Ops'}), + [UserSegment.traderDefi]: translate({id: 'ideaCatalog.userSegment.traderDefi', message: 'Trader/DeFi'}), +} satisfies Record; + +export const domainExpertiseLabels = { + [DomainExpertise.communityDesign]: translate({id: 'ideaCatalog.domainExpertise.communityDesign', message: 'Community Design'}), + [DomainExpertise.defiMechanisms]: translate({id: 'ideaCatalog.domainExpertise.defiMechanisms', message: 'DeFi Mechanisms'}), + [DomainExpertise.privacy]: translate({id: 'ideaCatalog.domainExpertise.privacy', message: 'Privacy'}), + [DomainExpertise.paymentsFinops]: translate({id: 'ideaCatalog.domainExpertise.paymentsFinops', message: 'Payments/FinOps'}), + [DomainExpertise.consumerProduct]: translate({id: 'ideaCatalog.domainExpertise.consumerProduct', message: 'Consumer Product'}), +} satisfies Record; + +export const capitalReqLabels = { + [CapitalReq.none]: translate({id: 'ideaCatalog.capitalReq.none', message: 'None'}), + [CapitalReq.operatingTreasury]: translate({id: 'ideaCatalog.capitalReq.operatingTreasury', message: 'Operating Treasury'}), + [CapitalReq.seedLiquidity]: translate({id: 'ideaCatalog.capitalReq.seedLiquidity', message: 'Seed Liquidity'}), + [CapitalReq.deepLiquidity]: translate({id: 'ideaCatalog.capitalReq.deepLiquidity', message: 'Deep Liquidity'}), +} satisfies Record; + +export const statusPrimitiveLabels = { + [StatusPrimitive.gasless]: translate({id: 'ideaCatalog.statusPrimitive.gasless', message: 'Gasless UX'}), + [StatusPrimitive.reputation]: translate({id: 'ideaCatalog.statusPrimitive.reputation', message: 'Reputation'}), + [StatusPrimitive.privacy]: translate({id: 'ideaCatalog.statusPrimitive.privacy', message: 'Privacy Primitives'}), +} satisfies Record; + +export const builderProfileLabels = { + [BuilderProfile.frontendDev]: translate({id: 'ideaCatalog.builderProfile.frontendDev', message: 'Web / Mobile Dev'}), + [BuilderProfile.contractDev]: translate({id: 'ideaCatalog.builderProfile.contractDev', message: 'Smart Contract Dev'}), + [BuilderProfile.fullStack]: translate({id: 'ideaCatalog.builderProfile.fullStack', message: 'Full-Stack'}), + [BuilderProfile.protocolDev]: translate({id: 'ideaCatalog.builderProfile.protocolDev', message: 'Protocol / Cryptography'}), +} satisfies Record; + +export const securityCriticalityLabels = { + [SecurityCriticality.low]: translate({id: 'ideaCatalog.securityCriticality.low', message: 'Low'}), + [SecurityCriticality.medium]: translate({id: 'ideaCatalog.securityCriticality.medium', message: 'Medium'}), + [SecurityCriticality.high]: translate({id: 'ideaCatalog.securityCriticality.high', message: 'High'}), + [SecurityCriticality.critical]: translate({id: 'ideaCatalog.securityCriticality.critical', message: 'Critical'}), +} satisfies Record; + +export const opsBurdenLabels = { + [OpsBurden.low]: translate({id: 'ideaCatalog.opsBurden.low', message: 'Low'}), + [OpsBurden.medium]: translate({id: 'ideaCatalog.opsBurden.medium', message: 'Medium'}), + [OpsBurden.high]: translate({id: 'ideaCatalog.opsBurden.high', message: 'High'}), + [OpsBurden.veryHigh]: translate({id: 'ideaCatalog.opsBurden.veryHigh', message: 'Very High'}), +} satisfies Record; + +export const difficultyColors = { + [Difficulty.lowMed]: 'var(--status-green)', + [Difficulty.med]: 'var(--status-blue)', + [Difficulty.medHigh]: 'var(--status-orange)', + [Difficulty.high]: 'var(--status-pink)', +} satisfies Record; + +export const categoryColors = { + [Category.reputation]: 'var(--status-purple)', + [Category.privacy]: 'var(--status-green)', + [Category.social]: 'var(--status-blue)', + [Category.games]: 'var(--status-orange)', + [Category.defi]: 'var(--status-yellow)', +} satisfies Record; + +export const statusPrimitiveColors = { + [StatusPrimitive.gasless]: 'var(--status-blue)', + [StatusPrimitive.reputation]: 'var(--status-purple)', + [StatusPrimitive.privacy]: 'var(--status-green)', +} satisfies Record; diff --git a/src/css/custom.css b/src/css/custom.css index fd7ac4b..c5f1b62 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,3 +1,5 @@ +@import url('katex/dist/katex.min.css'); + @font-face { font-family: 'Inter'; font-style: normal; @@ -45,12 +47,20 @@ --ifm-color-primary-lightest: #91CFC8; /* Enhanced Secondary Colors */ - --status-purple: #8247E5; + --status-purple: #7140fd; --status-blue: #51D0F0; --status-green: #5EAEA4; --status-yellow: #FFD506; --status-orange: #FF8F6B; --status-pink: #FF6B8F; + --status-purple-soft: rgba(113, 64, 253, 0.08); + --status-purple-glow: rgba(113, 64, 253, 0.12); + --status-purple-text: var(--status-purple); + --status-purple-border: var(--status-purple); + --status-blue-text: var(--status-blue); + --status-blue-soft: rgba(51, 153, 255, 0.1); + --status-green-text: var(--status-green); + --status-green-soft: rgba(94, 174, 164, 0.1); /* Neutral Colors with Alpha Support */ --status-gray-100: hsla(210, 33%, 98%, 1); @@ -86,14 +96,64 @@ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 250ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1); + + /* Shared surfaces */ + --page-background: #ffffff; + --page-background-rgb: 255, 255, 255; + --page-border-soft: rgba(229, 231, 235, 0.8); + --surface-card: #ffffff; + --surface-card-border: var(--status-gray-200); + --surface-muted: #f6f7f8; + --surface-muted-strong: #f6f7f8; + --surface-code-text: #374151; + --surface-table: rgba(255, 255, 255, 0.5); + --surface-us-card: rgba(113, 64, 253, 0.05); + --surface-them-card: rgba(0, 0, 0, 0.015); + --surface-them-card-border: var(--status-gray-300); + --surface-meta-badge: var(--status-gray-100); + --surface-meta-badge-border: var(--status-gray-200); + --text-muted: var(--status-gray-500); + --text-subtle: var(--status-gray-400); + --interactive-accent: #a78bfa; + --menu-hover-bg: rgba(94, 174, 164, 0.08); + --menu-active-bg: rgba(94, 174, 164, 0.1); + --table-border-color: var(--status-gray-200); + --chip-border-color: var(--status-gray-300); } /* Dark Mode Overrides */ [data-theme='dark'] { --ifm-color-primary: #6FB9B0; --ifm-color-primary-dark: #5EAEA4; - --ifm-background-color: #0A0A0C; - --ifm-background-surface-color: #151519; + --ifm-background-color: #09101c; + --ifm-background-surface-color: #0f1729; + --page-background: #09101c; + --page-background-rgb: 9, 16, 28; + --page-border-soft: rgba(38, 48, 68, 0.8); + --surface-card: var(--ifm-background-surface-color); + --surface-card-border: var(--status-gray-700); + --surface-muted: #1e1e1e; + --surface-muted-strong: #1e1e1e; + --surface-code-text: #e5e7eb; + --surface-table: rgba(15, 23, 41, 0.5); + --surface-us-card: rgba(113, 64, 253, 0.08); + --surface-them-card: rgba(255, 255, 255, 0.02); + --surface-them-card-border: var(--status-gray-600); + --surface-meta-badge: rgba(255, 255, 255, 0.04); + --surface-meta-badge-border: var(--status-gray-700); + --text-muted: var(--status-gray-400); + --text-subtle: var(--status-gray-500); + --interactive-accent: #a78bfa; + --status-purple-text: #a78bfa; + --status-purple-border: #a78bfa; + --status-blue-text: #60a5fa; + --status-blue-soft: rgba(51, 153, 255, 0.15); + --status-green-text: var(--ifm-color-primary); + --status-green-soft: rgba(94, 174, 164, 0.15); + --menu-hover-bg: rgba(94, 174, 164, 0.15); + --menu-active-bg: rgba(94, 174, 164, 0.2); + --table-border-color: var(--status-gray-700); + --chip-border-color: var(--status-gray-600); /* Dark mode specific shadows */ --shadow-sm: 0 2px 4px rgba(94, 174, 164, 0.2); @@ -104,12 +164,7 @@ /* Base background colors - removing gradient */ html, html body { - background: #ffffff !important; -} - -html[data-theme='dark'], -html[data-theme='dark'] body { - background: #0A0A0C !important; + background: var(--page-background) !important; } /* Remove gradient background */ @@ -137,38 +192,24 @@ html[data-theme='dark']::before { /* Fix for code block visibility */ [class*='codeBlockContainer_'] { - background-color: #f6f7f8 !important; + background-color: var(--surface-muted-strong) !important; } [class*='codeBlockContent_'] { - background-color: #f6f7f8 !important; + background-color: var(--surface-muted-strong) !important; } [class*='codeBlockLines_'] { - color: #374151 !important; -} - -[data-theme='dark'] [class*='codeBlockContainer_'], -[data-theme='dark'] [class*='codeBlockContent_'] { - background-color: #1e1e1e !important; -} - -[data-theme='dark'] [class*='codeBlockLines_'] { - color: #e5e7eb !important; + color: var(--surface-code-text) !important; } :not(pre) > code { - background-color: #f6f7f8 !important; - color: #374151 !important; + background-color: var(--surface-muted) !important; + color: var(--surface-code-text) !important; padding: 0.2rem 0.4rem !important; border-radius: 4px !important; } -[data-theme='dark'] :not(pre) > code { - background-color: #1e1e1e !important; - color: #e5e7eb !important; -} - /* Global Typography Refinements */ html { font-size: var(--ifm-font-size-base); @@ -182,8 +223,7 @@ body { -moz-osx-font-smoothing: grayscale; } -[data-theme='dark'] .DocSearch, -[data-theme='light'] .DocSearch { +.DocSearch { font-family: 'Inter', -apple-system, sans-serif; } @@ -195,29 +235,19 @@ h1, h2, h3, h4, h5, h6 { /* Enhanced Navbar */ .navbar { - background: rgba(255, 255, 255, 0.95); - border-bottom: 1px solid rgba(229, 231, 235, 0.8); + background: rgba(var(--page-background-rgb), 0.95); + border-bottom: 1px solid var(--page-border-soft); animation: navbarFadeIn 0.5s ease-out; } -[data-theme='dark'] .navbar { - background: rgba(10, 10, 12, 0.95); - border-bottom: 1px solid rgba(38, 38, 42, 0.8); -} - /* Enhanced Card Styling */ .card { - border: 1px solid var(--status-gray-200); + border: 1px solid var(--surface-card-border); border-radius: 16px; - background: white; + background: var(--surface-card); transition: var(--transition-normal); } -[data-theme='dark'] .card { - background: var(--ifm-background-surface-color); - border-color: var(--status-gray-700); -} - .card:hover { transform: translateY(-4px) scale(1.01); box-shadow: var(--shadow-lg); @@ -294,17 +324,11 @@ table { } th, td { - border: 1px solid var(--status-gray-200); - background: rgba(255, 255, 255, 0.5); + border: 1px solid var(--table-border-color); + background: var(--surface-table); backdrop-filter: blur(4px); } -[data-theme='dark'] th, -[data-theme='dark'] td { - border-color: var(--status-gray-700); - background: rgba(21, 21, 25, 0.5); -} - /* Animations */ @keyframes navbarFadeIn { from { @@ -348,23 +372,15 @@ main { } .menu__link:hover { - background: rgba(94, 174, 164, 0.08); + background: var(--menu-hover-bg); transform: translateX(4px); } -[data-theme='dark'] .menu__link:hover { - background: rgba(94, 174, 164, 0.15); -} - .menu__link--active { - background: rgba(94, 174, 164, 0.1) !important; + background: var(--menu-active-bg) !important; font-weight: 500; } -[data-theme='dark'] .menu__link--active { - background: rgba(94, 174, 164, 0.2) !important; -} - /* Remove all sidebar borders */ .main-wrapper > div, aside, @@ -411,19 +427,480 @@ div[class*='sidebarViewport'] { } } -/* Footer Enhancements */ -.footer { - background: rgba(255, 255, 255, 0.95) !important; - border-top: 1px solid rgba(229, 231, 235, 0.8); - backdrop-filter: blur(8px); +/* Deploy Card Grid */ +.deploy-card-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; + margin: 1.5rem 0; } -[data-theme='dark'] .footer { - background: rgba(10, 10, 12, 0.95) !important; - border-top: 1px solid rgba(38, 38, 42, 0.8); +@media (max-width: 768px) { + .deploy-card-grid { + grid-template-columns: 1fr; + } +} + +.deploy-card { + display: flex; + align-items: flex-start; + gap: 1rem; + padding: 1.25rem 1.5rem; + border: 1px solid var(--surface-card-border); + border-radius: 16px; + background: var(--surface-card); + text-decoration: none !important; + color: inherit !important; + transition: var(--transition-normal); +} + +.deploy-card:hover { + transform: translateY(-4px); + box-shadow: 0 10px 20px var(--status-purple-glow); + border-color: var(--status-purple-border); + text-decoration: none !important; +} + +.deploy-card-icon { + font-size: 2rem; + line-height: 1; + flex-shrink: 0; + margin-top: 0.15rem; +} + +.deploy-card-content { + flex: 1; + min-width: 0; +} + +.deploy-card-content h3 { + margin: 0 0 0.4rem; + font-size: 1.1rem; + font-weight: 600; + color: var(--ifm-heading-color); +} + +.deploy-card-content p { + margin: 0 0 0.6rem; + font-size: 0.9rem; + line-height: 1.5; + color: var(--text-muted); +} + +.deploy-card-tag { + display: inline-block; + font-size: 0.75rem; + font-weight: 500; + color: var(--status-purple-text); + background: var(--status-purple-soft); + padding: 0.2rem 0.6rem; + border-radius: 6px; +} + +/* Comparison Grid (Us vs Them) */ +.comparison-grid { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin: 1.5rem 0; +} + +.comparison-row-link { + text-decoration: none !important; + color: inherit !important; + display: block; + border-radius: 14px; + transition: var(--transition-normal); +} + +.comparison-row-link:hover { + text-decoration: none !important; + color: inherit !important; +} + +.comparison-row-link:hover .comparison-card--us { + border-color: var(--status-purple-border); + box-shadow: 0 4px 12px var(--status-purple-glow); +} + +.comparison-row { + display: flex; + flex-direction: column; + gap: 0.5rem; + cursor: pointer; +} + +.comparison-label { + font-size: 0.8rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-muted); + padding-left: 0.25rem; +} + +.comparison-cards { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.75rem; +} + +@media (max-width: 768px) { + .comparison-cards { + grid-template-columns: 1fr; + } +} + +.comparison-card { + padding: 1rem 1.25rem; + border-radius: 12px; + border: 1px solid var(--surface-card-border); + transition: var(--transition-normal); +} + +.comparison-card--us { + border-left: 3px solid var(--status-purple); + background: var(--surface-us-card); +} + +.comparison-card--them { + border-left: 3px solid var(--surface-them-card-border); + background: var(--surface-them-card); + color: var(--text-muted); +} + +.comparison-card-heading { + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 0.35rem; +} + +.comparison-card--us .comparison-card-heading { + color: var(--status-purple-text); +} + +.comparison-card--them .comparison-card-heading { + color: var(--text-subtle); +} + +.comparison-card p { + margin: 0; + font-size: 0.93rem; + line-height: 1.5; +} + +.comparison-card--them p { + font-size: 0.9rem; +} + +/* Footer Enhancements */ +.footer { + background: rgba(var(--page-background-rgb), 0.95) !important; + border-top: 1px solid var(--page-border-soft); + backdrop-filter: blur(8px); } /* Remove default footer background */ .footer--dark { background: none; -} \ No newline at end of file +} + +/* ═══════════════════════════════════════════════════════════ + Idea Catalog + ═══════════════════════════════════════════════════════════ */ + +.idea-catalog { + margin: 1.5rem 0; +} + +/* ── Filter Bar ──────────────────────────────────────────── */ + +.idea-catalog-filters { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin-bottom: 1.5rem; +} + +.idea-catalog-filter-group { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.4rem; +} + +.idea-catalog-filter-label { + font-size: 0.8rem; + font-weight: 600; + color: var(--text-muted); + min-width: 6.5rem; + flex-shrink: 0; +} + +.idea-catalog-chips { + display: flex; + flex-wrap: wrap; + gap: 0.35rem; +} + +.idea-catalog-chip { + display: inline-flex; + align-items: center; + padding: 0.25rem 0.7rem; + border: 1px solid var(--chip-border-color); + border-radius: 99px; + background: transparent; + font-size: 0.8rem; + font-weight: 500; + color: var(--text-muted); + cursor: pointer; + transition: var(--transition-fast); + font-family: var(--ifm-font-family-base); +} + +.idea-catalog-chip:hover { + border-color: var(--interactive-accent); + color: var(--interactive-accent); +} + +.idea-catalog-chip--active { + background: var(--status-purple); + border-color: var(--status-purple); + color: #fff; +} + +.idea-catalog-advanced-toggle, +.idea-catalog-clear { + background: none; + border: none; + color: var(--status-purple-text); + font-size: 0.85rem; + font-weight: 500; + cursor: pointer; + padding: 0; + font-family: var(--ifm-font-family-base); +} + +.idea-catalog-advanced-toggle { + text-align: left; +} + +.idea-catalog-advanced-toggle:hover, +.idea-catalog-clear:hover { + text-decoration: underline; +} + +.idea-catalog-advanced { + display: flex; + flex-direction: column; + gap: 0.75rem; + padding: 0.75rem 0; + border-top: 1px solid var(--surface-card-border); +} + +.idea-catalog-status { + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 0.85rem; + color: var(--text-muted); + padding-top: 0.5rem; + border-top: 1px solid var(--surface-card-border); +} + +.idea-catalog-empty { + text-align: center; + color: var(--status-gray-500); + padding: 2rem 1rem; +} + +/* ── Card Grid ───────────────────────────────────────────── */ + +.idea-catalog-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; +} + +@media (max-width: 768px) { + .idea-catalog-grid { + grid-template-columns: 1fr; + } + + .idea-catalog-filter-group { + flex-direction: column; + align-items: flex-start; + } + + .idea-catalog-filter-label { + min-width: auto; + } +} + +/* ── Idea Card ───────────────────────────────────────────── */ + +.idea-card { + position: relative; + padding: 1.25rem 1.5rem; + border: 1px solid var(--surface-card-border); + border-radius: 16px; + background: var(--surface-card); + cursor: pointer; + transition: var(--transition-normal); + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.idea-card:hover { + transform: translateY(-4px); + box-shadow: 0 10px 20px var(--status-purple-glow); + border-color: var(--status-purple-border); +} + +.idea-card__header { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.idea-card__category { + font-size: 0.72rem; + font-weight: 600; + padding: 0.15rem 0.55rem; + border-radius: 6px; + text-transform: uppercase; + letter-spacing: 0.03em; +} + +.idea-card__title { + margin: 0; + font-size: 1.05rem; + font-weight: 600; + color: var(--ifm-heading-color); + line-height: 1.3; +} + +.idea-card__superpowers { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} + +.idea-card__superpower { + font-size: 0.68rem; + font-weight: 600; + padding: 0.1rem 0.45rem; + border-radius: 4px; +} + +.idea-card__tag--builder { + color: var(--status-blue-text); + background: var(--status-blue-soft); +} + +.idea-card__what { + margin: 0; + font-size: 0.88rem; + line-height: 1.5; + color: var(--text-muted); +} + +.idea-card__badges { + display: flex; + gap: 0.4rem; + flex-wrap: wrap; +} + +.idea-card__badge { + font-size: 0.72rem; + font-weight: 600; + padding: 0.15rem 0.5rem; + border-radius: 6px; +} + +.idea-card__tags { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} + +.idea-card__tag { + font-size: 0.7rem; + font-weight: 500; + padding: 0.12rem 0.45rem; + border-radius: 4px; + color: var(--status-purple-text); + background: var(--status-purple-soft); +} + +.idea-card__tag--segment { + color: var(--status-green-text); + background: var(--status-green-soft); +} + +.idea-card__expand-icon { + position: absolute; + top: 1.25rem; + right: 1.25rem; + font-size: 0.65rem; + color: var(--status-gray-400); +} + +/* ── Expanded Detail ─────────────────────────────────────── */ + +.idea-card__detail { + display: flex; + flex-direction: column; + gap: 0.6rem; + padding-top: 0.6rem; + border-top: 1px solid var(--surface-card-border); + animation: ideaDetailFadeIn 200ms ease-out; +} + +@keyframes ideaDetailFadeIn { + from { opacity: 0; transform: translateY(-4px); } + to { opacity: 1; transform: translateY(0); } +} + +.idea-card__detail-section { + font-size: 0.88rem; + line-height: 1.55; + color: var(--ifm-font-color-base); +} + +.idea-card__detail-section strong { + font-weight: 600; +} + +.idea-card__detail-meta { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + padding-top: 0.3rem; +} + +.idea-card__meta-badge { + display: inline-flex; + flex-direction: column; + padding: 0.3rem 0.55rem; + border-radius: 8px; + background: var(--surface-meta-badge); + border: 1px solid var(--surface-meta-badge-border); +} + +.idea-card__meta-label { + font-size: 0.62rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--text-subtle); +} + +.idea-card__meta-value { + font-size: 0.78rem; + font-weight: 500; + color: var(--ifm-font-color-base); +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css new file mode 100644 index 0000000..467840b --- /dev/null +++ b/src/pages/index.module.css @@ -0,0 +1,393 @@ +/* Hero Section */ +.hero { + padding: 4rem 2rem 2rem; + text-align: center; + position: relative; + overflow: hidden; +} + +.hero::before { + content: ''; + position: absolute; + top: -60%; + left: 50%; + transform: translateX(-50%); + width: 800px; + height: 800px; + background: radial-gradient( + circle, + rgba(113, 64, 253, 0.1) 0%, + rgba(113, 64, 253, 0.04) 40%, + transparent 70% + ); + pointer-events: none; + z-index: 0; +} + +[data-theme='dark'] .hero::before { + background: radial-gradient( + circle, + rgba(113, 64, 253, 0.2) 0%, + rgba(113, 64, 253, 0.08) 40%, + transparent 70% + ); +} + +.heroContent { + position: relative; + z-index: 1; + max-width: 720px; + margin: 0 auto; +} + +.heroLogo { + width: 72px; + height: 72px; + margin-bottom: 1.25rem; + filter: drop-shadow(0 4px 12px rgba(113, 64, 253, 0.2)); +} + +[data-theme='dark'] .heroLogo { + filter: drop-shadow(0 4px 16px rgba(113, 64, 253, 0.35)); +} + +.heroSubtitle { + font-size: 1rem; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #7140fd; + margin-bottom: 0.75rem; +} + +[data-theme='dark'] .heroSubtitle { + color: #9b7aff; +} + +.heroTitle { + font-size: clamp(2rem, 5vw, 3rem); + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.15; + margin-bottom: 1.25rem; + color: #09101c; +} + +[data-theme='dark'] .heroTitle { + color: #ffffff; +} + +.heroDescription { + font-size: 1.125rem; + line-height: 1.7; + color: var(--status-gray-500); + max-width: 560px; + margin: 0 auto; +} + +[data-theme='dark'] .heroDescription { + color: var(--status-gray-400); +} + +/* Section Common */ +.section { + padding: 3rem 2rem; + max-width: 1100px; + margin: 0 auto; +} + +.sectionTitle { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: -0.02em; + margin-bottom: 0.5rem; + color: #09101c; +} + +[data-theme='dark'] .sectionTitle { + color: #ffffff; +} + +.sectionSubtitle { + font-size: 1rem; + color: var(--status-gray-500); + margin-bottom: 2rem; +} + +[data-theme='dark'] .sectionSubtitle { + color: var(--status-gray-400); +} + +/* Doc Cards Grid */ +.cardGrid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; +} + +@media (max-width: 768px) { + .cardGrid { + grid-template-columns: 1fr; + } +} + +.card { + display: flex; + flex-direction: column; + padding: 1.75rem; + border: 1px solid var(--status-gray-200); + border-radius: 16px; + background: #ffffff; + text-decoration: none !important; + color: inherit !important; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1), + border-color 250ms cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; +} + +[data-theme='dark'] .card { + background: #0f1729; + border-color: rgba(113, 64, 253, 0.12); +} + +.card:hover { + transform: translateY(-4px); + box-shadow: 0 12px 24px -8px rgba(113, 64, 253, 0.15); + border-color: #7140fd; + text-decoration: none !important; +} + +[data-theme='dark'] .card:hover { + box-shadow: 0 12px 24px -8px rgba(113, 64, 253, 0.3); + border-color: #9b7aff; +} + +.cardIcon { + width: 48px; + height: 48px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.5rem; + margin-bottom: 1.25rem; + flex-shrink: 0; +} + +.cardIconOverview { + composes: cardIcon; + background: rgba(113, 64, 253, 0.1); +} + +[data-theme='dark'] .cardIconOverview { + background: rgba(113, 64, 253, 0.18); +} + +.cardIconBuild { + composes: cardIcon; + background: rgba(94, 174, 164, 0.12); +} + +[data-theme='dark'] .cardIconBuild { + background: rgba(94, 174, 164, 0.18); +} + +.cardIconTools { + composes: cardIcon; + background: rgba(81, 208, 240, 0.12); +} + +[data-theme='dark'] .cardIconTools { + background: rgba(81, 208, 240, 0.18); +} + +.cardTitle { + font-size: 1.25rem; + font-weight: 600; + margin-bottom: 0.5rem; + color: #09101c; +} + +[data-theme='dark'] .cardTitle { + color: #ffffff; +} + +.cardDescription { + font-size: 0.925rem; + line-height: 1.6; + color: var(--status-gray-500); + margin-bottom: 1.25rem; + flex: 1; +} + +[data-theme='dark'] .cardDescription { + color: var(--status-gray-400); +} + +.cardLink { + display: inline-flex; + align-items: center; + gap: 0.35rem; + font-size: 0.9rem; + font-weight: 500; + color: #7140fd; + text-decoration: none; + transition: gap 200ms ease; +} + +[data-theme='dark'] .cardLink { + color: #9b7aff; +} + +.card:hover .cardLink { + gap: 0.6rem; +} + +.cardLinkArrow { + transition: transform 200ms ease; +} + +.card:hover .cardLinkArrow { + transform: translateX(2px); +} + +/* Community Section */ +.communityGrid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; +} + +@media (max-width: 768px) { + .communityGrid { + grid-template-columns: 1fr; + } +} + +.communityCard { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 1.5rem; + border: 1px solid var(--status-gray-200); + border-radius: 16px; + background: #ffffff; + text-decoration: none !important; + color: inherit !important; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1), + border-color 250ms cubic-bezier(0.4, 0, 0.2, 1); +} + +[data-theme='dark'] .communityCard { + background: #0f1729; + border-color: rgba(113, 64, 253, 0.12); +} + +.communityCard:hover { + transform: translateY(-2px); + box-shadow: 0 8px 16px -4px rgba(113, 64, 253, 0.12); + border-color: #7140fd; + text-decoration: none !important; +} + +[data-theme='dark'] .communityCard:hover { + box-shadow: 0 8px 16px -4px rgba(113, 64, 253, 0.25); + border-color: #9b7aff; +} + +.communityCardTitle { + font-size: 1rem; + font-weight: 600; + color: #09101c; +} + +[data-theme='dark'] .communityCardTitle { + color: #ffffff; +} + +.communityCardDescription { + font-size: 0.875rem; + line-height: 1.5; + color: var(--status-gray-500); +} + +[data-theme='dark'] .communityCardDescription { + color: var(--status-gray-400); +} + +/* Quick Start Banner */ +.quickStart { + padding: 2.5rem 2rem; + max-width: 1100px; + margin: 0 auto 2rem; +} + +.quickStartInner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 2rem; + padding: 2rem 2.5rem; + border-radius: 16px; + background: linear-gradient(135deg, rgba(113, 64, 253, 0.06) 0%, rgba(113, 64, 253, 0.03) 100%); + border: 1px solid rgba(113, 64, 253, 0.12); +} + +[data-theme='dark'] .quickStartInner { + background: linear-gradient(135deg, rgba(113, 64, 253, 0.12) 0%, rgba(113, 64, 253, 0.06) 100%); + border-color: rgba(113, 64, 253, 0.2); +} + +@media (max-width: 640px) { + .quickStartInner { + flex-direction: column; + text-align: center; + } +} + +.quickStartText h3 { + font-size: 1.25rem; + font-weight: 600; + margin: 0 0 0.35rem; + color: #09101c; +} + +[data-theme='dark'] .quickStartText h3 { + color: #ffffff; +} + +.quickStartText p { + font-size: 0.925rem; + color: var(--status-gray-500); + margin: 0; +} + +[data-theme='dark'] .quickStartText p { + color: var(--status-gray-400); +} + +.quickStartButton { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.7rem 1.5rem; + border-radius: 12px; + background: #7140fd; + color: #ffffff !important; + font-weight: 500; + font-size: 0.925rem; + text-decoration: none !important; + transition: transform 200ms ease, box-shadow 200ms ease; + white-space: nowrap; + flex-shrink: 0; +} + +.quickStartButton:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px -4px rgba(113, 64, 253, 0.4); + text-decoration: none !important; + color: #ffffff !important; +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..23e8233 --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,296 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import Translate, {translate} from '@docusaurus/Translate'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import styles from './index.module.css'; + +function getDocCards() { + return [ + { + title: translate({ + id: 'homepage.docCards.overview.title', + message: 'Overview', + description: 'Homepage docs card title for Overview', + }), + description: translate({ + id: 'homepage.docCards.overview.description', + message: + "Learn about Status Network's architecture, gasless transactions, tokenomics, and the sustainable public funding model", + description: 'Homepage docs card description for Overview', + }), + link: '/overview', + linkText: translate({ + id: 'homepage.docCards.overview.linkText', + message: 'Read More', + description: 'Homepage docs card link text for Overview', + }), + iconClass: styles.cardIconOverview, + icon: '🌐', + }, + { + title: translate({ + id: 'homepage.docCards.build.title', + message: 'Build for Karma', + description: 'Homepage docs card title for Build for Karma', + }), + description: translate({ + id: 'homepage.docCards.build.description', + message: + 'Guides, tutorials, and references for deploying contracts, integrating Karma, and building gasless apps', + description: 'Homepage docs card description for Build for Karma', + }), + link: '/build-for-karma', + linkText: translate({ + id: 'homepage.docCards.build.linkText', + message: 'Read More', + description: 'Homepage docs card link text for Build for Karma', + }), + iconClass: styles.cardIconBuild, + icon: '🛠', + }, + { + title: translate({ + id: 'homepage.docCards.tools.title', + message: 'Tools', + description: 'Homepage docs card title for Tools', + }), + description: translate({ + id: 'homepage.docCards.tools.description', + message: + 'RPC endpoints, bridges, testnet faucets, block explorers, and infrastructure partners', + description: 'Homepage docs card description for Tools', + }), + link: '/tools', + linkText: translate({ + id: 'homepage.docCards.tools.linkText', + message: 'Read More', + description: 'Homepage docs card link text for Tools', + }), + iconClass: styles.cardIconTools, + icon: '⚡', + }, + ]; +} + +function getCommunityLinks() { + return [ + { + title: translate({ + id: 'homepage.community.telegram.title', + message: 'Join our Telegram', + description: 'Homepage community card title for Telegram', + }), + description: translate({ + id: 'homepage.community.telegram.description', + message: 'Connect with other Status Network builders and get support', + description: 'Homepage community card description for Telegram', + }), + href: 'https://t.me/statusl2', + }, + { + title: translate({ + id: 'homepage.community.github.title', + message: 'View on GitHub', + description: 'Homepage community card title for GitHub', + }), + description: translate({ + id: 'homepage.community.github.description', + message: 'Explore the source code and contribute to the ecosystem', + description: 'Homepage community card description for GitHub', + }), + href: 'https://github.com/status-im', + }, + { + title: translate({ + id: 'homepage.community.official.title', + message: 'Official Links', + description: 'Homepage community card title for official links', + }), + description: translate({ + id: 'homepage.community.official.description', + message: 'Website, social channels, and all official resources in one place', + description: 'Homepage community card description for official links', + }), + href: '/overview/other/official-links', + }, + ]; +} + +function Hero() { + const logoSrc = useBaseUrl('/img/sn_logo.svg'); + return ( +
+
+ Status Network +

+ + Welcome to + +

+

+ + Status Network Documentation + +

+

+ + Fully gasless Ethereum L2 with composable privacy and built-in spam protection for humans and bots + +

+
+
+ ); +} + +function DocCards() { + const docCards = getDocCards(); + + return ( +
+

+ + Navigate the Docs + +

+

+ + Start developing on Status Network today + +

+
+ {docCards.map((card) => ( + +
{card.icon}
+
{card.title}
+
{card.description}
+ + {card.linkText}{' '} + + + + ))} +
+
+ ); +} + +function QuickStart() { + return ( +
+
+
+

+ + Ready to build? + +

+

+ + Set up your wallet, grab testnet tokens, and deploy your first + contract in minutes + +

+
+ + + Quick Start + {' '} + → + +
+
+ ); +} + +function Community() { + const communityLinks = getCommunityLinks(); + + return ( +
+

+ + Connect with us + +

+

+ + Keep up to date with the latest from the Status Network community + +

+
+ {communityLinks.map((item) => ( + +
{item.title}
+
+ {item.description} +
+ + ))} +
+
+ ); +} + +export default function Home(): React.JSX.Element { + return ( + + + + + + + ); +} diff --git a/yarn.lock b/yarn.lock index 415883d..f2f6a21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,153 +7,136 @@ resolved "https://registry.yarnpkg.com/@acid-info/docusaurus-umami/-/docusaurus-umami-1.0.2.tgz#0bbfce9e159e351d19ae19292303add35a7ee1b9" integrity sha512-irSTnx1drVlcerzU5xsDpJPuzKDRowIJGqPFeZP1edTqiu6R5RIWN09AqG3XxuRfsj6UY7/orR0Ug6ntML7Liw== -"@algolia/autocomplete-core@1.17.9": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz#83374c47dc72482aa45d6b953e89377047f0dcdc" - integrity sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ== +"@algolia/abtesting@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.13.0.tgz#88bbf09c5846fbe9a213461ea8bfdcf756c060dd" + integrity sha512-Zrqam12iorp3FjiKMXSTpedGYznZ3hTEOAr2oCxI8tbF8bS1kQHClyDYNq/eV0ewMNLyFkgZVWjaS+8spsOYiQ== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.17.9" - "@algolia/autocomplete-shared" "1.17.9" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/autocomplete-plugin-algolia-insights@1.17.9": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz#74c86024d09d09e8bfa3dd90b844b77d9f9947b6" - integrity sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ== +"@algolia/client-abtesting@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.47.0.tgz#0d64f45844dcf18cebe9d1dae183052ec3d3f6cb" + integrity sha512-aOpsdlgS9xTEvz47+nXmw8m0NtUiQbvGWNuSEb7fA46iPL5FxOmOUZkh8PREBJpZ0/H8fclSc7BMJCVr+Dn72w== dependencies: - "@algolia/autocomplete-shared" "1.17.9" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/autocomplete-preset-algolia@1.17.9": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz#911f3250544eb8ea4096fcfb268f156b085321b5" - integrity sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ== +"@algolia/client-analytics@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.47.0.tgz#239ce66964a766316ec2e3a6a1773dfa89f13203" + integrity sha512-EcF4w7IvIk1sowrO7Pdy4Ako7x/S8+nuCgdk6En+u5jsaNQM4rTT09zjBPA+WQphXkA2mLrsMwge96rf6i7Mow== dependencies: - "@algolia/autocomplete-shared" "1.17.9" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/autocomplete-shared@1.17.9": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz#5f38868f7cb1d54b014b17a10fc4f7e79d427fa8" - integrity sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ== +"@algolia/client-common@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.47.0.tgz#de05deb8c058e9f125eea51de317ab1406247642" + integrity sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg== -"@algolia/client-abtesting@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz#012204f1614e1a71366fb1e117c8f195186ff081" - integrity sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ== +"@algolia/client-insights@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.47.0.tgz#9adbc82f6bfa896266559843fc74eddaaf9bff15" + integrity sha512-Ci+cn/FDIsDxSKMRBEiyKrqybblbk8xugo6ujDN1GSTv9RIZxwxqZYuHfdLnLEwLlX7GB8pqVyqrUSlRnR+sJA== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/client-analytics@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.25.0.tgz#eba015bfafb3dbb82712c9160a00717a5974ff71" - integrity sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A== +"@algolia/client-personalization@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.47.0.tgz#f45bca61625458a2c26d0f241bbc249f47aa0fe1" + integrity sha512-gsLnHPZmWcX0T3IigkDL2imCNtsQ7dR5xfnwiFsb+uTHCuYQt+IwSNjsd8tok6HLGLzZrliSaXtB5mfGBtYZvQ== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/client-common@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.25.0.tgz#2def8947efe849266057d92f67d1b8d83de0c005" - integrity sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA== - -"@algolia/client-insights@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.25.0.tgz#b87df8614b96c4cc9c9aa7765cce07fa70864fa8" - integrity sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw== +"@algolia/client-query-suggestions@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.47.0.tgz#20af440297524956aff483dccef7222c57366f04" + integrity sha512-PDOw0s8WSlR2fWFjPQldEpmm/gAoUgLigvC3k/jCSi/DzigdGX6RdC0Gh1RR1P8Cbk5KOWYDuL3TNzdYwkfDyA== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/client-personalization@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.25.0.tgz#74b041f0e7d91e1009c131c8d716c34e4d45c30f" - integrity sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow== +"@algolia/client-search@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.47.0.tgz#b74b948adbd2908cb70a73a17e8a23d7e5ae439c" + integrity sha512-b5hlU69CuhnS2Rqgsz7uSW0t4VqrLMLTPbUpEl0QVz56rsSwr1Sugyogrjb493sWDA+XU1FU5m9eB8uH7MoI0g== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" - -"@algolia/client-query-suggestions@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz#e92d935d9e2994f790d43c64d3518d81070a3888" - integrity sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA== - dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" - -"@algolia/client-search@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.25.0.tgz#dc38ca1015f2f4c9f5053a4517f96fb28a2117f8" - integrity sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g== - dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/ingestion@1.25.0": - version "1.25.0" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.25.0.tgz#4d13c56dda0a05c7bacb0e3ef5866292dfd86ed5" - integrity sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ== +"@algolia/ingestion@1.47.0": + version "1.47.0" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.47.0.tgz#47ffeba5120a4b186a81a2adb1ffda2902c6f3f1" + integrity sha512-WvwwXp5+LqIGISK3zHRApLT1xkuEk320/EGeD7uYy+K8WwDd5OjXnhjuXRhYr1685KnkvWkq1rQ/ihCJjOfHpQ== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/monitoring@1.25.0": - version "1.25.0" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.25.0.tgz#d59360cfe556338519d05a9d8107147e9dbcb020" - integrity sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg== +"@algolia/monitoring@1.47.0": + version "1.47.0" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.47.0.tgz#3ea90f176495a1130887b0780d91ff91fd42b9f9" + integrity sha512-j2EUFKAlzM0TE4GRfkDE3IDfkVeJdcbBANWzK16Tb3RHz87WuDfQ9oeEW6XiRE1/bEkq2xf4MvZesvSeQrZRDA== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/recommend@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.25.0.tgz#b96f12c85aa74a0326982c7801fcd4a610b420f4" - integrity sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw== +"@algolia/recommend@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.47.0.tgz#71a759cdbe67e27f2299ab87d3c8aa4392001a88" + integrity sha512-+kTSE4aQ1ARj2feXyN+DMq0CIDHJwZw1kpxIunedkmpWUg8k3TzFwWsMCzJVkF2nu1UcFbl7xsIURz3Q3XwOXA== dependencies: - "@algolia/client-common" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/client-common" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" -"@algolia/requester-browser-xhr@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz#c194fa5f49206b9343e6646c41bfbca2a3f2ac54" - integrity sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw== +"@algolia/requester-browser-xhr@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.47.0.tgz#0e76a8e3db0b09235178cb47c9de0a198db7b52d" + integrity sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw== dependencies: - "@algolia/client-common" "5.25.0" + "@algolia/client-common" "5.47.0" -"@algolia/requester-fetch@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz#231a2d0da2397d141f80b8f28e2cb6e3d219d38d" - integrity sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ== +"@algolia/requester-fetch@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.47.0.tgz#de68b44bef30d03919be249a6ff30e82975494a9" + integrity sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA== dependencies: - "@algolia/client-common" "5.25.0" + "@algolia/client-common" "5.47.0" -"@algolia/requester-node-http@5.25.0": - version "5.25.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz#0ce13c550890de21c558b04381535d2d245a3725" - integrity sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ== +"@algolia/requester-node-http@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.47.0.tgz#b8e46c1e80b74d9146dec7b0219131198951198a" + integrity sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA== dependencies: - "@algolia/client-common" "5.25.0" + "@algolia/client-common" "5.47.0" "@ampproject/remapping@^2.2.0": version "2.3.0" @@ -1958,22 +1941,22 @@ resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72" integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== -"@csstools/color-helpers@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" - integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA== +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== "@csstools/css-calc@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== -"@csstools/css-color-parser@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10" - integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg== +"@csstools/css-color-parser@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== dependencies: - "@csstools/color-helpers" "^5.0.2" + "@csstools/color-helpers" "^5.1.0" "@csstools/css-calc" "^2.1.4" "@csstools/css-parser-algorithms@^3.0.5": @@ -1991,55 +1974,88 @@ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1" integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== -"@csstools/postcss-cascade-layers@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz#9640313e64b5e39133de7e38a5aa7f40dc259597" - integrity sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ== +"@csstools/postcss-alpha-function@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz#7989605711de7831bc7cd75b94c9b5bac9c3728e" + integrity sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-cascade-layers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz#dd2c70db3867b88975f2922da3bfbae7d7a2cae7" + integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -"@csstools/postcss-color-function@^4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz#11ad43a66ef2cc794ab826a07df8b5fa9fb47a3a" - integrity sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ== +"@csstools/postcss-color-function-display-p3-linear@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz#3017ff5e1f65307d6083e58e93d76724fb1ebf9f" + integrity sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-color-mix-function@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz#8c9d0ccfae5c45a9870dd84807ea2995c7a3a514" - integrity sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q== +"@csstools/postcss-color-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz#a7c85a98c77b522a194a1bbb00dd207f40c7a771" + integrity sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz#0b29cb9b4630d7ed68549db265662d41554a17ed" - integrity sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ== +"@csstools/postcss-color-mix-function@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz#2f1ee9f8208077af069545c9bd79bb9733382c2a" + integrity sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-content-alt-text@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz#548862226eac54bab0ee5f1bf3a9981393ab204b" - integrity sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ== +"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz#b4012b62a4eaa24d694172bb7137f9d2319cb8f2" + integrity sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-content-alt-text@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz#1d52da1762893c32999ff76839e48d6ec7c7a4cb" + integrity sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-contrast-color-function@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz#ca46986d095c60f208d9e3f24704d199c9172637" + integrity sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" "@csstools/postcss-exponential-functions@^2.0.9": @@ -2059,43 +2075,43 @@ "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-gamut-mapping@^2.0.10": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz#f518d941231d721dbecf5b41e3c441885ff2f28b" - integrity sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg== +"@csstools/postcss-gamut-mapping@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz#be0e34c9f0142852cccfc02b917511f0d677db8b" + integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-gradients-interpolation-method@^5.0.10": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz#3146da352c31142a721fdba062ac3a6d11dbbec3" - integrity sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw== +"@csstools/postcss-gradients-interpolation-method@^5.0.12": + version "5.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz#0955cce4d97203b861bf66742bbec611b2f3661c" + integrity sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-hwb-function@^4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz#f93f3c457e6440ac37ef9b908feb5d901b417d50" - integrity sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ== +"@csstools/postcss-hwb-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz#07f7ecb08c50e094673bd20eaf7757db0162beee" + integrity sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-ic-unit@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz#7561e09db65fac8304ceeab9dd3e5c6e43414587" - integrity sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA== +"@csstools/postcss-ic-unit@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz#2ee2da0690db7edfbc469279711b9e69495659d2" + integrity sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg== dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" @@ -2104,22 +2120,22 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a" integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== -"@csstools/postcss-is-pseudo-class@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz#12041448fedf01090dd4626022c28b7f7623f58e" - integrity sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ== +"@csstools/postcss-is-pseudo-class@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74" + integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -"@csstools/postcss-light-dark-function@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz#9fb080188907539734a9d5311d2a1cb82531ef38" - integrity sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ== +"@csstools/postcss-light-dark-function@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz#0df448aab9a33cb9a085264ff1f396fb80c4437d" + integrity sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" "@csstools/postcss-logical-float-and-clear@^3.0.0": @@ -2179,31 +2195,44 @@ "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-normalize-display-values@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" - integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== +"@csstools/postcss-normalize-display-values@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#3738ecadb38cd6521c9565635d61aa4bf5457d27" + integrity sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz#d4c23c51dd0be45e6dedde22432d7d0003710780" - integrity sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg== +"@csstools/postcss-oklab-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz#416640ef10227eea1375b47b72d141495950971d" + integrity sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-progressive-custom-properties@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz#70c8d41b577f4023633b7e3791604e0b7f3775bc" - integrity sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA== +"@csstools/postcss-position-area-property@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz#41f0cbc737a81a42890d5ec035fa26a45f4f4ad4" + integrity sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q== + +"@csstools/postcss-progressive-custom-properties@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz#c39780b9ff0d554efb842b6bd75276aa6f1705db" + integrity sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw== dependencies: postcss-value-parser "^4.2.0" +"@csstools/postcss-property-rule-prelude-list@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz#700b7aa41228c02281bda074ae778f36a09da188" + integrity sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-random-function@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" @@ -2213,15 +2242,15 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-relative-color-syntax@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz#daa840583969461e1e06b12e9c591e52a790ec86" - integrity sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g== +"@csstools/postcss-relative-color-syntax@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz#ced792450102441f7c160e1d106f33e4b44181f8" + integrity sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" "@csstools/postcss-scope-pseudo-class@^4.0.1": @@ -2249,12 +2278,27 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-text-decoration-shorthand@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz#a3bcf80492e6dda36477538ab8e8943908c9f80a" - integrity sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA== +"@csstools/postcss-syntax-descriptor-syntax-production@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz#98590e372e547cdae60aef47cfee11f3881307dd" + integrity sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow== dependencies: - "@csstools/color-helpers" "^5.0.2" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-system-ui-font-family@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz#bd65b79078debf6f67b318dc9b71a8f9fa16f8c8" + integrity sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-text-decoration-shorthand@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz#fae1b70f07d1b7beb4c841c86d69e41ecc6f743c" + integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== + dependencies: + "@csstools/color-helpers" "^5.1.0" postcss-value-parser "^4.2.0" "@csstools/postcss-trigonometric-functions@^4.0.9": @@ -2271,10 +2315,10 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== -"@csstools/selector-resolve-nested@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a" - integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== +"@csstools/selector-resolve-nested@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" + integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== "@csstools/selector-specificity@^5.0.0": version "5.0.0" @@ -2291,25 +2335,28 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/css@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.9.0.tgz#3bc29c96bf024350d73b0cfb7c2a7b71bf251cd5" - integrity sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA== +"@docsearch/core@4.5.3": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.5.3.tgz#b64b7855348882ba4789e6a28a51764abb1ff9a1" + integrity sha512-x/P5+HVzv9ALtbuJIfpkF8Eyc5RE8YCsFcOgLrrtWa9Ui+53ggZA5seIAanCRORbS4+m982lu7rZmebSiuMIcw== -"@docsearch/react@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.9.0.tgz#d0842b700c3ee26696786f3c8ae9f10c1a3f0db3" - integrity sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ== +"@docsearch/css@4.5.3": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.5.3.tgz#359930bc8435976c574655adc9bb0574d8887a70" + integrity sha512-kUpHaxn0AgI3LQfyzTYkNUuaFY4uEz/Ym9/N/FvyDE+PzSgZsCyDH9jE49B6N6f1eLCm9Yp64J9wENd6vypdxA== + +"@docsearch/react@^3.9.0 || ^4.1.0": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.5.3.tgz#84b3bff8ca1fa7870499b1c9d28bd2b65786c18e" + integrity sha512-Hm3Lg/FD9HXV57WshhWOHOprbcObF5ptLzcjA5zdgJDzYOMwEN+AvY8heQ5YMTWyC6kW2d+Qk25AVlHnDWMSvA== dependencies: - "@algolia/autocomplete-core" "1.17.9" - "@algolia/autocomplete-preset-algolia" "1.17.9" - "@docsearch/css" "3.9.0" - algoliasearch "^5.14.2" + "@docsearch/core" "4.5.3" + "@docsearch/css" "4.5.3" -"@docusaurus/babel@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.0.tgz#2f390cc4e588a96ec496d87921e44890899738a6" - integrity sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA== +"@docusaurus/babel@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.9.2.tgz#f956c638baeccf2040e482c71a742bc7e35fdb22" + integrity sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA== dependencies: "@babel/core" "^7.25.9" "@babel/generator" "^7.25.9" @@ -2321,54 +2368,54 @@ "@babel/runtime" "^7.25.9" "@babel/runtime-corejs3" "^7.25.9" "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.8.0" - "@docusaurus/utils" "3.8.0" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" babel-plugin-dynamic-import-node "^2.3.3" fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/bundler@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.0.tgz#386f54dca594d81bac6b617c71822e0808d6e2f6" - integrity sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA== +"@docusaurus/bundler@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.9.2.tgz#0ca82cda4acf13a493e3f66061aea351e9d356cf" + integrity sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA== dependencies: "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.8.0" - "@docusaurus/cssnano-preset" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" + "@docusaurus/babel" "3.9.2" + "@docusaurus/cssnano-preset" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" babel-loader "^9.2.1" - clean-css "^5.3.2" + clean-css "^5.3.3" copy-webpack-plugin "^11.0.0" - css-loader "^6.8.1" + css-loader "^6.11.0" css-minimizer-webpack-plugin "^5.0.1" cssnano "^6.1.2" file-loader "^6.2.0" html-minifier-terser "^7.2.0" - mini-css-extract-plugin "^2.9.1" + mini-css-extract-plugin "^2.9.2" null-loader "^4.0.1" - postcss "^8.4.26" - postcss-loader "^7.3.3" - postcss-preset-env "^10.1.0" + postcss "^8.5.4" + postcss-loader "^7.3.4" + postcss-preset-env "^10.2.1" terser-webpack-plugin "^5.3.9" tslib "^2.6.0" url-loader "^4.1.1" webpack "^5.95.0" webpackbar "^6.0.1" -"@docusaurus/core@3.8.0", "@docusaurus/core@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.0.tgz#79d5e1084415c8834a8a5cb87162ca13f52fe147" - integrity sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw== +"@docusaurus/core@3.9.2", "@docusaurus/core@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.9.2.tgz#cc970f29b85a8926d63c84f8cffdcda43ed266ff" + integrity sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw== dependencies: - "@docusaurus/babel" "3.8.0" - "@docusaurus/bundler" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/babel" "3.9.2" + "@docusaurus/bundler" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -2402,35 +2449,35 @@ update-notifier "^6.0.2" webpack "^5.95.0" webpack-bundle-analyzer "^4.10.2" - webpack-dev-server "^4.15.2" + webpack-dev-server "^5.2.2" webpack-merge "^6.0.1" -"@docusaurus/cssnano-preset@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz#a70f19e2995be2299f5ef9c3da3e5d4d5c14bff2" - integrity sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ== +"@docusaurus/cssnano-preset@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz#523aab65349db3c51a77f2489048d28527759428" + integrity sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ== dependencies: cssnano-preset-advanced "^6.1.2" - postcss "^8.4.38" + postcss "^8.5.4" postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/logger@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.8.0.tgz#c1abbb084a8058dc0047d57070fb9cd0241a679d" - integrity sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ== +"@docusaurus/logger@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.9.2.tgz#6ec6364b90f5a618a438cc9fd01ac7376869f92a" + integrity sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA== dependencies: chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/mdx-loader@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz#2b225cd2b1159cc49b10b1cac63a927a8368274b" - integrity sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng== +"@docusaurus/mdx-loader@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz#78d238de6c6203fa811cc2a7e90b9b79e111408c" + integrity sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ== dependencies: - "@docusaurus/logger" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -2453,12 +2500,12 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.8.0", "@docusaurus/module-type-aliases@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz#e487052c372538c5dcf2200999e13f328fa5ffaa" - integrity sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g== +"@docusaurus/module-type-aliases@3.9.2", "@docusaurus/module-type-aliases@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz#993c7cb0114363dea5ef6855e989b3ad4b843a34" + integrity sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew== dependencies: - "@docusaurus/types" "3.8.0" + "@docusaurus/types" "3.9.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2466,19 +2513,34 @@ react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/plugin-content-blog@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz#0c200b1fb821e09e9e975c45255e5ddfab06c392" - integrity sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg== +"@docusaurus/plugin-client-redirects@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.9.2.tgz#9c27025c72aeeedeb783a94720163911567da0e8" + integrity sha512-lUgMArI9vyOYMzLRBUILcg9vcPTCyyI2aiuXq/4npcMVqOr6GfmwtmBYWSbNMlIUM0147smm4WhpXD0KFboffw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + eta "^2.2.0" + fs-extra "^11.1.1" + lodash "^4.17.21" + tslib "^2.6.0" + +"@docusaurus/plugin-content-blog@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz#d5ce51eb7757bdab0515e2dd26a793ed4e119df9" + integrity sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ== + dependencies: + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" cheerio "1.0.0-rc.12" feed "^4.2.2" fs-extra "^11.1.1" @@ -2490,20 +2552,20 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz#6aedb1261da1f0c8c2fa11cfaa6df4577a9b7826" - integrity sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g== +"@docusaurus/plugin-content-docs@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz#cd8f2d1c06e53c3fa3d24bdfcb48d237bf2d6b2e" + integrity sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/module-type-aliases" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -2514,148 +2576,148 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz#2db5f990872684c621665d0d0d8d9b5831fd2999" - integrity sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw== +"@docusaurus/plugin-content-pages@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz#22db6c88ade91cec0a9e87a00b8089898051b08d" + integrity sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-css-cascade-layers@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz#a0741ae32917a88ce7ce76b6f472495fa4bf576d" - integrity sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ== +"@docusaurus/plugin-css-cascade-layers@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz#358c85f63f1c6a11f611f1b8889d9435c11b22f8" + integrity sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" tslib "^2.6.0" -"@docusaurus/plugin-debug@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz#297c159ae99924e60042426d2ad6ee0d5e9126b3" - integrity sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ== +"@docusaurus/plugin-debug@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz#b5df4db115583f5404a252dbf66f379ff933e53c" + integrity sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" fs-extra "^11.1.1" react-json-view-lite "^2.3.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz#fb97097af331beb13553a384081dc83607539b31" - integrity sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w== +"@docusaurus/plugin-google-analytics@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz#857fe075fdeccdf6959e62954d9efe39769fa247" + integrity sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz#b5a60006c28ac582859a469fb92e53d383b0a055" - integrity sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g== +"@docusaurus/plugin-google-gtag@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz#df75b1a90ae9266b0471909ba0265f46d5dcae62" + integrity sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" "@types/gtag.js" "^0.0.12" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz#612aa63e161fb273bf7db2591034c0142951727d" - integrity sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w== +"@docusaurus/plugin-google-tag-manager@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz#d1a3cf935acb7d31b84685e92d70a1d342946677" + integrity sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" tslib "^2.6.0" -"@docusaurus/plugin-sitemap@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz#a39e3b5aa2f059aba0052ed11a6b4fbf78ac0dad" - integrity sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g== +"@docusaurus/plugin-sitemap@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz#e1d9f7012942562cc0c6543d3cb2cdc4ae713dc4" + integrity sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/plugin-svgr@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz#6d2d43f14b32b4bb2dd8dc87a70c6e78754c1e85" - integrity sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA== +"@docusaurus/plugin-svgr@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz#62857ed79d97c0150d25f7e7380fdee65671163a" + integrity sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" "@svgr/core" "8.1.0" "@svgr/webpack" "^8.1.0" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/preset-classic@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz#ac8bc17e3b7b443d8a24f2f1da0c0be396950fef" - integrity sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g== +"@docusaurus/preset-classic@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz#85cc4f91baf177f8146c9ce896dfa1f0fd377050" + integrity sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/plugin-content-blog" "3.8.0" - "@docusaurus/plugin-content-docs" "3.8.0" - "@docusaurus/plugin-content-pages" "3.8.0" - "@docusaurus/plugin-css-cascade-layers" "3.8.0" - "@docusaurus/plugin-debug" "3.8.0" - "@docusaurus/plugin-google-analytics" "3.8.0" - "@docusaurus/plugin-google-gtag" "3.8.0" - "@docusaurus/plugin-google-tag-manager" "3.8.0" - "@docusaurus/plugin-sitemap" "3.8.0" - "@docusaurus/plugin-svgr" "3.8.0" - "@docusaurus/theme-classic" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/theme-search-algolia" "3.8.0" - "@docusaurus/types" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/plugin-css-cascade-layers" "3.9.2" + "@docusaurus/plugin-debug" "3.9.2" + "@docusaurus/plugin-google-analytics" "3.9.2" + "@docusaurus/plugin-google-gtag" "3.9.2" + "@docusaurus/plugin-google-tag-manager" "3.9.2" + "@docusaurus/plugin-sitemap" "3.9.2" + "@docusaurus/plugin-svgr" "3.9.2" + "@docusaurus/theme-classic" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-search-algolia" "3.9.2" + "@docusaurus/types" "3.9.2" -"@docusaurus/theme-classic@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz#6d44fb801b86a7c7af01cda0325af1a3300b3ac2" - integrity sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g== +"@docusaurus/theme-classic@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz#6e514f99a0ff42b80afcf42d5e5d042618311ce0" + integrity sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/module-type-aliases" "3.8.0" - "@docusaurus/plugin-content-blog" "3.8.0" - "@docusaurus/plugin-content-docs" "3.8.0" - "@docusaurus/plugin-content-pages" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/theme-translations" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/plugin-content-blog" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/plugin-content-pages" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" - copy-text-to-clipboard "^3.2.0" infima "0.2.0-alpha.45" lodash "^4.17.21" nprogress "^0.2.0" - postcss "^8.4.26" + postcss "^8.5.4" prism-react-renderer "^2.3.0" prismjs "^1.29.0" react-router-dom "^5.3.4" @@ -2663,15 +2725,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.0.tgz#102c385c3d1d3b7a6b52d1911c7e88c38d9a977e" - integrity sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw== +"@docusaurus/theme-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.9.2.tgz#487172c6fef9815c2746ef62a71e4f5b326f9ba5" + integrity sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag== dependencies: - "@docusaurus/mdx-loader" "3.8.0" - "@docusaurus/module-type-aliases" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" + "@docusaurus/mdx-loader" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2681,34 +2743,34 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-mermaid@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.0.tgz#f0720ec89fd386870f30978ba984b1b126ca92a5" - integrity sha512-ou0NJM37p4xrVuFaZp8qFe5Z/qBq9LuyRTP4KKRa0u2J3zC4f3saBJDgc56FyvvN1OsmU0189KGEPUjTr6hFxg== +"@docusaurus/theme-mermaid@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz#f065e4b4b319560ddd8c3be65ce9dd19ce1d5cc8" + integrity sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw== dependencies: - "@docusaurus/core" "3.8.0" - "@docusaurus/module-type-aliases" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/module-type-aliases" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" mermaid ">=11.6.0" tslib "^2.6.0" -"@docusaurus/theme-search-algolia@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz#21c2f18e07a73d13ca3b44fcf0ae9aac33bef60f" - integrity sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ== +"@docusaurus/theme-search-algolia@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz#420fd5b27fc1673b48151fdc9fe7167ba135ed50" + integrity sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw== dependencies: - "@docsearch/react" "^3.9.0" - "@docusaurus/core" "3.8.0" - "@docusaurus/logger" "3.8.0" - "@docusaurus/plugin-content-docs" "3.8.0" - "@docusaurus/theme-common" "3.8.0" - "@docusaurus/theme-translations" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-validation" "3.8.0" - algoliasearch "^5.17.1" - algoliasearch-helper "^3.22.6" + "@docsearch/react" "^3.9.0 || ^4.1.0" + "@docusaurus/core" "3.9.2" + "@docusaurus/logger" "3.9.2" + "@docusaurus/plugin-content-docs" "3.9.2" + "@docusaurus/theme-common" "3.9.2" + "@docusaurus/theme-translations" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-validation" "3.9.2" + algoliasearch "^5.37.0" + algoliasearch-helper "^3.26.0" clsx "^2.0.0" eta "^2.2.0" fs-extra "^11.1.1" @@ -2716,26 +2778,27 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz#deb64dccab74361624c3cb352a4949a7ac868c74" - integrity sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg== +"@docusaurus/theme-translations@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz#238cd69c2da92d612be3d3b4f95944c1d0f1e041" + integrity sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/tsconfig@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.8.0.tgz#ea7ee0917e1562cf0a6e95e049c42f1f61351f32" - integrity sha512-utLl48nNjSYBoq47RKukZ9fPLEX3nJWThzrujb0ndQQ1jc/gh4RhTRaAqItH9nImnsgGKmLMnyoMBpfGmoop+w== +"@docusaurus/tsconfig@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.9.2.tgz#7f440e0ae665b841e1d487749037f26a0275f9c1" + integrity sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ== -"@docusaurus/types@3.8.0", "@docusaurus/types@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.0.tgz#f6cd31c4e3e392e0270b8137d7fe4365ea7a022e" - integrity sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA== +"@docusaurus/types@3.9.2", "@docusaurus/types@^3.9.0": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.9.2.tgz#e482cf18faea0d1fa5ce0e3f1e28e0f32d2593eb" + integrity sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" + "@types/mdast" "^4.0.2" "@types/react" "*" commander "^5.1.0" joi "^17.9.2" @@ -2744,36 +2807,36 @@ webpack "^5.95.0" webpack-merge "^5.9.0" -"@docusaurus/utils-common@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.8.0.tgz#2b1a6b1ec4a7fac62f1898d523d42f8cc4a8258f" - integrity sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw== +"@docusaurus/utils-common@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.9.2.tgz#e89bfcf43d66359f43df45293fcdf22814847460" + integrity sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw== dependencies: - "@docusaurus/types" "3.8.0" + "@docusaurus/types" "3.9.2" tslib "^2.6.0" -"@docusaurus/utils-validation@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz#aa02e9d998e20998fbcaacd94873878bc3b9a4cd" - integrity sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg== +"@docusaurus/utils-validation@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz#04aec285604790806e2fc5aa90aa950dc7ba75ae" + integrity sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A== dependencies: - "@docusaurus/logger" "3.8.0" - "@docusaurus/utils" "3.8.0" - "@docusaurus/utils-common" "3.8.0" + "@docusaurus/logger" "3.9.2" + "@docusaurus/utils" "3.9.2" + "@docusaurus/utils-common" "3.9.2" fs-extra "^11.2.0" joi "^17.9.2" js-yaml "^4.1.0" lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/utils@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.0.tgz#92bad89d2a11f5f246196af153093b12cd79f9ac" - integrity sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ== +"@docusaurus/utils@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.9.2.tgz#ffab7922631c7e0febcb54e6d499f648bf8a89eb" + integrity sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ== dependencies: - "@docusaurus/logger" "3.8.0" - "@docusaurus/types" "3.8.0" - "@docusaurus/utils-common" "3.8.0" + "@docusaurus/logger" "3.9.2" + "@docusaurus/types" "3.9.2" + "@docusaurus/utils-common" "3.9.2" escape-string-regexp "^4.0.0" execa "5.1.1" file-loader "^6.2.0" @@ -2883,6 +2946,166 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.65.0.tgz#ba3b023c69ab311e5b706289414a44ee46117824" + integrity sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ== + +"@jsonjoy.com/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/buffers@17.65.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz#d6890737d9cbc49c17e2c5d1a2d796c57205152c" + integrity sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz#531524f37fd3e1d1189de18fef346e998eee8952" + integrity sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/fs-core@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz#320728b4b7bef63abb60e7630351623899237411" + integrity sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz#02bac88c4968ddf2effbd7452861aaed60ba3557" + integrity sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz#a32a5bcb093f8b34a99aa8957e993a52ec316662" + integrity sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw== + +"@jsonjoy.com/fs-node-to-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz#33fc503e50d283ac5fc510e3accced7fccecf2f4" + integrity sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw== + dependencies: + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + +"@jsonjoy.com/fs-node-utils@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz#788e95052aa99744f6e8e55b5098afc203df2b9e" + integrity sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + +"@jsonjoy.com/fs-node@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz#70b18bfaf14544a9820d2016e913dde12c6de991" + integrity sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" + glob-to-regex.js "^1.0.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz#7c181b9aefcc1b268be0e6233bff26310c355335" + integrity sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.56.10" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz#05aadd2c0eaa855b13d6cb17d29b7c8cee239c8c" + integrity sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pack@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz#4ea06dd0aee1c29954bd978c4f107401dbf713fb" + integrity sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ== + dependencies: + "@jsonjoy.com/base64" "17.65.0" + "@jsonjoy.com/buffers" "17.65.0" + "@jsonjoy.com/codegen" "17.65.0" + "@jsonjoy.com/json-pointer" "17.65.0" + "@jsonjoy.com/util" "17.65.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz#4bad42d86c9ee0ad1758c082b065bd5e16f8dc36" + integrity sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow== + dependencies: + "@jsonjoy.com/util" "17.65.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@17.65.0", "@jsonjoy.com/util@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.65.0.tgz#b27832bdf7aeaf4a36f9cb8721cb4ffb086f06a1" + integrity sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w== + dependencies: + "@jsonjoy.com/buffers" "17.65.0" + "@jsonjoy.com/codegen" "17.65.0" + +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" @@ -2932,6 +3155,11 @@ dependencies: langium "3.3.1" +"@noble/hashes@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2953,6 +3181,129 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@peculiar/asn1-cms@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz#88267055c460ca806651f916315a934c1b1ac994" + integrity sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-csr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz#a7eff845b0020720070a12f38f26effb9fdab158" + integrity sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-ecc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz#4846d39712a1a2b4786c2d6ea27b19a6dcc05ef5" + integrity sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pfx@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz#4c8ed3050cdd5b3e63ec4192bf8f646d9e06e3f5" + integrity sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs8@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz#c426caf81cb49935c553b591e0273b4b44d1696f" + integrity sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs9@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz#96b57122228a0e2e30e81118cd3baa570c13a51d" + integrity sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pfx" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-rsa@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz#49d905ab67ae8aa54e996734f37a391bb7958747" + integrity sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== + dependencies: + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509-attr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz#057cb0c3c600a259c9f40582ee5fd7f0114c5be6" + integrity sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz#9aa0784b455ca34095fdc91a5cc52869e21528dd" + integrity sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/x509@^1.14.2": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" + integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-csr" "^2.6.0" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-pkcs9" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + pvtsutils "^1.3.6" + reflect-metadata "^0.2.2" + tslib "^2.8.1" + tsyringe "^4.10.0" + "@pnpm/config.env-replace@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" @@ -3153,14 +3504,14 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": +"@types/bonjour@^3.5.13": version "3.5.13" resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.3.5": +"@types/connect-history-api-fallback@^1.5.4": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== @@ -3435,6 +3786,16 @@ "@types/range-parser" "*" "@types/send" "*" +"@types/express-serve-static-core@^4.17.21": + version "4.19.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" + integrity sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + "@types/express-serve-static-core@^4.17.33": version "4.19.6" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" @@ -3455,15 +3816,15 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/express@^4.17.13": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== +"@types/express@^4.17.25": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/geojson@*": version "7946.0.16" @@ -3533,6 +3894,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/katex@^0.16.0": + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.16.8.tgz#80bf3e0814d09a846412a0b0f140946b79c36c3e" + integrity sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg== + "@types/mdast@^4.0.0", "@types/mdast@^4.0.2": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" @@ -3555,13 +3921,6 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - "@types/node@*": version "22.7.9" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.9.tgz#2bf2797b5e84702d8262ea2cf843c3c3c880d0e9" @@ -3628,10 +3987,10 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/sax@^1.2.1": version "1.2.7" @@ -3648,14 +4007,22 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.1": +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": version "1.9.4" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.15.7" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== @@ -3664,7 +4031,16 @@ "@types/node" "*" "@types/send" "*" -"@types/sockjs@^0.3.33": +"@types/serve-static@^1", "@types/serve-static@^1.15.5": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + +"@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== @@ -3686,10 +4062,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@types/ws@^8.5.5": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== +"@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" @@ -3962,7 +4338,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -4049,31 +4425,32 @@ ajv@^8.0.0, ajv@^8.9.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -algoliasearch-helper@^3.22.6: - version "3.25.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.25.0.tgz#15cc79ad7909db66b8bb5a5a9c38b40e3941fa2f" - integrity sha512-vQoK43U6HXA9/euCqLjvyNdM4G2Fiu/VFp4ae0Gau9sZeIKBPvUPnXfLYAe65Bg7PFuw03coeu5K6lTPSXRObw== +algoliasearch-helper@^3.26.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.27.0.tgz#987c18b715ed0ecb303711feaa14335e5b8516e1" + integrity sha512-eNYchRerbsvk2doHOMfdS1/B6Tm70oGtu8mzQlrNzbCeQ8p1MjCW8t/BL6iZ5PD+cL5NNMgTMyMnmiXZ1sgmNw== dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^5.14.2, algoliasearch@^5.17.1: - version "5.25.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.25.0.tgz#7337b097deadeca0e6e985c0f8724abea189994f" - integrity sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg== +algoliasearch@^5.37.0: + version "5.47.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.47.0.tgz#ed95e008bf37806d320419f7f9ad329dc893c6fc" + integrity sha512-AGtz2U7zOV4DlsuYV84tLp2tBbA7RPtLA44jbVH4TTpDcc1dIWmULjHSsunlhscbzDydnjuFlNhflR3nV4VJaQ== dependencies: - "@algolia/client-abtesting" "5.25.0" - "@algolia/client-analytics" "5.25.0" - "@algolia/client-common" "5.25.0" - "@algolia/client-insights" "5.25.0" - "@algolia/client-personalization" "5.25.0" - "@algolia/client-query-suggestions" "5.25.0" - "@algolia/client-search" "5.25.0" - "@algolia/ingestion" "1.25.0" - "@algolia/monitoring" "1.25.0" - "@algolia/recommend" "5.25.0" - "@algolia/requester-browser-xhr" "5.25.0" - "@algolia/requester-fetch" "5.25.0" - "@algolia/requester-node-http" "5.25.0" + "@algolia/abtesting" "1.13.0" + "@algolia/client-abtesting" "5.47.0" + "@algolia/client-analytics" "5.47.0" + "@algolia/client-common" "5.47.0" + "@algolia/client-insights" "5.47.0" + "@algolia/client-personalization" "5.47.0" + "@algolia/client-query-suggestions" "5.47.0" + "@algolia/client-search" "5.47.0" + "@algolia/ingestion" "1.47.0" + "@algolia/monitoring" "1.47.0" + "@algolia/recommend" "5.47.0" + "@algolia/requester-browser-xhr" "5.47.0" + "@algolia/requester-fetch" "5.47.0" + "@algolia/requester-node-http" "5.47.0" ansi-align@^3.0.1: version "3.0.1" @@ -4158,6 +4535,15 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +asn1js@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.7.tgz#15f1f2f59e60f80d5b43ef14047a294a969f824f" + integrity sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + astring@^1.8.0: version "1.9.0" resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" @@ -4175,15 +4561,14 @@ autoprefixer@^10.4.19: picocolors "^1.0.1" postcss-value-parser "^4.2.0" -autoprefixer@^10.4.21: - version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== +autoprefixer@^10.4.23: + version "10.4.24" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.24.tgz#2c29595f3abd820a79976a609d0bf40eecf212fb" + integrity sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw== dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" + browserslist "^4.28.1" + caniuse-lite "^1.0.30001766" + fraction.js "^5.3.4" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -4244,6 +4629,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +baseline-browser-mapping@^2.9.0: + version "2.9.19" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" + integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -4259,28 +4649,28 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== +body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.2" + bytes "~3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" -bonjour-service@^1.0.11: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" - integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== +bonjour-service@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -4343,7 +4733,7 @@ browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^ node-releases "^2.0.18" update-browserslist-db "^1.1.1" -browserslist@^4.24.4, browserslist@^4.24.5: +browserslist@^4.24.4: version "4.24.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== @@ -4353,21 +4743,44 @@ browserslist@^4.24.4, browserslist@^4.24.5: node-releases "^2.0.19" update-browserslist-db "^1.1.3" +browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.2: +bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +bytestreamjs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" + integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -4386,7 +4799,15 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind@^1.0.5, call-bind@^1.0.7: +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -4397,6 +4818,14 @@ call-bind@^1.0.5, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -4430,10 +4859,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001716: - version "1.0.30001743" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz" - integrity sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669, caniuse-lite@^1.0.30001716, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766: + version "1.0.30001776" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz" + integrity sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw== + +caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766: + version "1.0.30001767" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz#0279c498e862efb067938bba0a0aabafe8d0b730" + integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ== ccount@^2.0.0: version "2.0.1" @@ -4531,7 +4965,7 @@ chevrotain@~11.0.3: "@chevrotain/utils" "11.0.3" lodash-es "4.17.21" -chokidar@^3.5.3: +chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4556,7 +4990,7 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2: +clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2: version "5.3.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== @@ -4675,24 +5109,24 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== +compression@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: @@ -4744,7 +5178,7 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== -content-disposition@0.5.4: +content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -4761,20 +5195,15 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -copy-text-to-clipboard@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" - integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== copy-webpack-plugin@^11.0.0: version "11.0.0" @@ -4869,16 +5298,16 @@ css-declaration-sorter@^7.2.0: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== -css-has-pseudo@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz#fb42e8de7371f2896961e1f6308f13c2c7019b72" - integrity sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ== +css-has-pseudo@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz#a5ee2daf5f70a2032f3cefdf1e36e7f52a243873" + integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -css-loader@^6.8.1: +css-loader@^6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== @@ -4952,10 +5381,10 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.3.0.tgz#940becad497b8509ad822a28fb0cfe54c969ccfe" - integrity sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ== +cssdb@^8.6.0: + version "8.7.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.7.1.tgz#f296bbedc39ace9edf0ed8fbbec57c3e117747cd" + integrity sha512-+F6LKx48RrdGOtE4DT5jz7Uo+VeyKXpK797FAevIkzjV8bMHz6xTO5F7gNDcRCHmPgD5jj2g6QCsY9zmVrh38A== cssesc@^3.0.0: version "3.0.0" @@ -5389,12 +5818,18 @@ deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.2.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976" + integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw== dependencies: - execa "^5.0.0" + bundle-name "^4.1.0" + default-browser-id "^5.0.0" defer-to-connect@^2.0.1: version "2.0.1" @@ -5415,6 +5850,11 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -5431,7 +5871,7 @@ delaunator@5: dependencies: robust-predicates "^3.0.2" -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -5446,7 +5886,7 @@ dequal@^2.0.0: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== @@ -5569,6 +6009,15 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -5589,6 +6038,11 @@ electron-to-chromium@^1.5.149: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.159.tgz#b909c4a5dbd00674f18419199f71c945a199effe" integrity sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA== +electron-to-chromium@^1.5.263: + version "1.5.286" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" + integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== + electron-to-chromium@^1.5.41: version "1.5.45" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.45.tgz#fa592ce6a88b44d23acbc7453a2feab98996e6c9" @@ -5619,11 +6073,6 @@ emoticon@^4.0.1: resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encodeurl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" @@ -5661,6 +6110,11 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -5671,6 +6125,13 @@ es-module-lexer@^1.2.1: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + esast-util-from-estree@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" @@ -5845,7 +6306,7 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@5.1.1, execa@^5.0.0: +execa@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -5860,39 +6321,39 @@ execa@5.1.1, execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -express@^4.17.3: - version "4.21.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" - integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== +express@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.10" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.13.0" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -5990,17 +6451,17 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~2.0.2" unpipe "~1.0.0" find-cache-dir@^4.0.0: @@ -6049,7 +6510,12 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -fresh@0.5.2: +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== + +fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== @@ -6063,16 +6529,6 @@ fs-extra@^11.1.1, fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" - integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -6099,11 +6555,35 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -6128,23 +6608,16 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" + integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" @@ -6192,6 +6665,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^12.1.0: version "12.6.1" resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" @@ -6273,6 +6751,11 @@ has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-yarn@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" @@ -6285,6 +6768,37 @@ hasown@^2.0.0, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hast-util-from-dom@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz#c3c92fbd8d4e1c1625edeb3a773952b9e4ad64a8" + integrity sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q== + dependencies: + "@types/hast" "^3.0.0" + hastscript "^9.0.0" + web-namespaces "^2.0.0" + +hast-util-from-html-isomorphic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz#b31baee386a899a2472326a3c5692f29f86d1d3c" + integrity sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw== + dependencies: + "@types/hast" "^3.0.0" + hast-util-from-dom "^5.0.0" + hast-util-from-html "^2.0.0" + unist-util-remove-position "^5.0.0" + +hast-util-from-html@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz#485c74785358beb80c4ba6346299311ac4c49c82" + integrity sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.1.0" + hast-util-from-parse5 "^8.0.0" + parse5 "^7.0.0" + vfile "^6.0.0" + vfile-message "^4.0.0" + hast-util-from-parse5@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" @@ -6299,6 +6813,13 @@ hast-util-from-parse5@^8.0.0: vfile-location "^5.0.0" web-namespaces "^2.0.0" +hast-util-is-element@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz#6e31a6532c217e5b533848c7e52c9d9369ca0932" + integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== + dependencies: + "@types/hast" "^3.0.0" + hast-util-parse-selector@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" @@ -6381,6 +6902,16 @@ hast-util-to-parse5@^8.0.0: web-namespaces "^2.0.0" zwitch "^2.0.0" +hast-util-to-text@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz#57b676931e71bf9cb852453678495b3080bfae3e" + integrity sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + hast-util-is-element "^3.0.0" + unist-util-find-after "^5.0.0" + hast-util-whitespace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" @@ -6399,6 +6930,17 @@ hastscript@^8.0.0: property-information "^6.0.0" space-separated-tokens "^2.0.0" +hastscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== + dependencies: + "@types/hast" "^3.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^4.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6433,11 +6975,6 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^2.3.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== - html-escaper@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -6520,17 +7057,6 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -6541,15 +7067,26 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-middleware@^2.0.3: - version "2.0.7" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6" - integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== +http-proxy-middleware@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" @@ -6579,12 +7116,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== iconv-lite@0.6: version "0.6.3" @@ -6593,6 +7128,13 @@ iconv-lite@0.6: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@~0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -6636,24 +7178,16 @@ infima@0.2.0-alpha.45: resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -6696,10 +7230,10 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== +ipaddr.js@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== is-alphabetical@^2.0.0: version "2.0.1" @@ -6750,6 +7284,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -6777,6 +7316,13 @@ is-hexadecimal@^2.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -6785,6 +7331,11 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-network-error@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" + integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== + is-npm@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" @@ -6849,6 +7400,13 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + is-yarn-global@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" @@ -6980,6 +7538,13 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +katex@^0.16.0, katex@^0.16.28: + version "0.16.28" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.28.tgz#64068425b5a29b41b136aae0d51cbb2c71d64c39" + integrity sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg== + dependencies: + commander "^8.3.0" + katex@^0.16.9: version "0.16.22" resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.22.tgz#d2b3d66464b1e6d69e6463b28a86ced5a02c5ccd" @@ -7032,13 +7597,13 @@ latest-version@^7.0.0: dependencies: package-json "^8.1.0" -launch-editor@^2.6.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.9.1.tgz#253f173bd441e342d4344b4dae58291abb425047" - integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== +launch-editor@^2.6.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" + integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" + picocolors "^1.1.1" + shell-quote "^1.8.3" layout-base@^1.0.0: version "1.0.2" @@ -7173,6 +7738,11 @@ marked@^15.0.7: resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e" integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdast-util-directive@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f" @@ -7292,6 +7862,19 @@ mdast-util-gfm@^3.0.0: mdast-util-gfm-task-list-item "^2.0.0" mdast-util-to-markdown "^2.0.0" +mdast-util-math@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-3.0.0.tgz#8d79dd3baf8ab8ac781f62b8853768190b9a00b0" + integrity sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + longest-streak "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.1.0" + unist-util-remove-position "^5.0.0" + mdast-util-mdx-expression@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" @@ -7382,6 +7965,21 @@ mdast-util-to-markdown@^2.0.0: unist-util-visit "^5.0.0" zwitch "^2.0.0" +mdast-util-to-markdown@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + mdast-util-to-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" @@ -7404,12 +8002,25 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== +memfs@^4.43.1: + version "4.56.10" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.56.10.tgz#eaf2f6556db10f91f1e9ad9f1274fd988c646202" + integrity sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w== dependencies: - fs-monkey "^1.0.4" + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-to-fsa" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.0.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" merge-descriptors@1.0.3: version "1.0.3" @@ -7581,6 +8192,19 @@ micromark-extension-gfm@^3.0.0: micromark-util-combine-extensions "^2.0.0" micromark-util-types "^2.0.0" +micromark-extension-math@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz#c42ee3b1dd5a9a03584e83dd8f08e3de510212c1" + integrity sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg== + dependencies: + "@types/katex" "^0.16.0" + devlop "^1.0.0" + katex "^0.16.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-extension-mdx-expression@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" @@ -7893,6 +8517,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -7905,13 +8534,20 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -7932,10 +8568,10 @@ mimic-response@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== -mini-css-extract-plugin@^2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b" - integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== +mini-css-extract-plugin@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz#d801a1f388f8fac7333c01b7c15c9222c811def4" + integrity sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -7945,7 +8581,7 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.1.2, minimatch@^3.1.1: +minimatch@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7990,6 +8626,11 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + nanoid@^3.3.7: version "3.3.8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" @@ -8000,6 +8641,11 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -8023,7 +8669,7 @@ node-emoji@^2.1.0: emojilib "^2.4.0" skin-tone "^2.0.0" -node-forge@^1, node-forge@^1.3.2: +node-forge@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.2.tgz#d0d2659a26eef778bf84d73e7f55c08144ee7750" integrity sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw== @@ -8038,6 +8684,11 @@ node-releases@^2.0.19: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -8085,10 +8736,10 @@ object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" @@ -8110,24 +8761,17 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== onetime@^5.1.2: version "5.1.2" @@ -8136,7 +8780,17 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9, open@^8.4.0: +open@^10.0.3: + version "10.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" + +open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== @@ -8189,12 +8843,13 @@ p-queue@^6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== +p-retry@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" + integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== dependencies: - "@types/retry" "0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" retry "^0.13.1" p-timeout@^3.2.0: @@ -8301,11 +8956,6 @@ path-exists@^5.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-is-inside@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -8321,11 +8971,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - path-to-regexp@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" @@ -8338,6 +8983,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@~0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8383,6 +9033,18 @@ pkg-types@^2.0.1: exsolve "^1.0.1" pathe "^2.0.3" +pkijs@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.3.3.tgz#b3f04d7b2eaacb05c81675f882be374e591626ec" + integrity sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw== + dependencies: + "@noble/hashes" "1.4.0" + asn1js "^3.0.6" + bytestreamjs "^2.0.1" + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + points-on-curve@0.2.0, points-on-curve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/points-on-curve/-/points-on-curve-0.2.0.tgz#7dbb98c43791859434284761330fa893cb81b4d1" @@ -8418,15 +9080,15 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz#f1e9c3e4371889dcdfeabfa8515464fd8338cedc" - integrity sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA== +postcss-color-functional-notation@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz#9a3df2296889e629fde18b873bb1f50a4ecf4b83" + integrity sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" postcss-color-hex-alpha@^10.0.0: @@ -8473,10 +9135,10 @@ postcss-custom-media@^11.0.6: "@csstools/css-tokenizer" "^3.0.4" "@csstools/media-query-list-parser" "^4.0.3" -postcss-custom-properties@^14.0.5: - version "14.0.5" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.5.tgz#a180444de695f6e11ee2390be93ff6537663e86c" - integrity sha512-UWf/vhMapZatv+zOuqlfLmYXeOhhHLh8U8HAKGI2VJ00xLRYoAJh4xv8iX6FB6+TLXeDnm0DBLMi00E0hodbQw== +postcss-custom-properties@^14.0.6: + version "14.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" + integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== dependencies: "@csstools/cascade-layer-name-parser" "^2.0.5" "@csstools/css-parser-algorithms" "^3.0.5" @@ -8528,12 +9190,12 @@ postcss-discard-unused@^6.0.5: dependencies: postcss-selector-parser "^6.0.16" -postcss-double-position-gradients@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz#185f8eab2db9cf4e34be69b5706c905895bb52ae" - integrity sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q== +postcss-double-position-gradients@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz#b482d08b5ced092b393eb297d07976ab482d4cad" + integrity sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g== dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" @@ -8569,18 +9231,18 @@ postcss-image-set-function@^7.0.0: "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -postcss-lab-function@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz#0537bd7245b935fc133298c8896bcbd160540cae" - integrity sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ== +postcss-lab-function@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz#eb555ac542607730eb0a87555074e4a5c6eef6e4" + integrity sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w== dependencies: - "@csstools/css-color-parser" "^3.0.10" + "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" -postcss-loader@^7.3.3: +postcss-loader@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== @@ -8682,12 +9344,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e" - integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== +postcss-nesting@^13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" + integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== dependencies: - "@csstools/selector-resolve-nested" "^3.0.0" + "@csstools/selector-resolve-nested" "^3.1.0" "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" @@ -8785,25 +9447,28 @@ postcss-place@^10.0.0: dependencies: postcss-value-parser "^4.2.0" -postcss-preset-env@^10.1.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz#ea95a6fc70efb1a26f81e5cf0ccdb321a3439b6e" - integrity sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q== +postcss-preset-env@^10.2.1: + version "10.6.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz#df30cfc54e90af2dcff5f94104e6f272359c9f65" + integrity sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g== dependencies: - "@csstools/postcss-cascade-layers" "^5.0.1" - "@csstools/postcss-color-function" "^4.0.10" - "@csstools/postcss-color-mix-function" "^3.0.10" - "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.0" - "@csstools/postcss-content-alt-text" "^2.0.6" + "@csstools/postcss-alpha-function" "^1.0.1" + "@csstools/postcss-cascade-layers" "^5.0.2" + "@csstools/postcss-color-function" "^4.0.12" + "@csstools/postcss-color-function-display-p3-linear" "^1.0.1" + "@csstools/postcss-color-mix-function" "^3.0.12" + "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.2" + "@csstools/postcss-content-alt-text" "^2.0.8" + "@csstools/postcss-contrast-color-function" "^2.0.12" "@csstools/postcss-exponential-functions" "^2.0.9" "@csstools/postcss-font-format-keywords" "^4.0.0" - "@csstools/postcss-gamut-mapping" "^2.0.10" - "@csstools/postcss-gradients-interpolation-method" "^5.0.10" - "@csstools/postcss-hwb-function" "^4.0.10" - "@csstools/postcss-ic-unit" "^4.0.2" + "@csstools/postcss-gamut-mapping" "^2.0.11" + "@csstools/postcss-gradients-interpolation-method" "^5.0.12" + "@csstools/postcss-hwb-function" "^4.0.12" + "@csstools/postcss-ic-unit" "^4.0.4" "@csstools/postcss-initial" "^2.0.1" - "@csstools/postcss-is-pseudo-class" "^5.0.1" - "@csstools/postcss-light-dark-function" "^2.0.9" + "@csstools/postcss-is-pseudo-class" "^5.0.3" + "@csstools/postcss-light-dark-function" "^2.0.11" "@csstools/postcss-logical-float-and-clear" "^3.0.0" "@csstools/postcss-logical-overflow" "^2.0.0" "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" @@ -8812,41 +9477,45 @@ postcss-preset-env@^10.1.0: "@csstools/postcss-media-minmax" "^2.0.9" "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.0" - "@csstools/postcss-oklab-function" "^4.0.10" - "@csstools/postcss-progressive-custom-properties" "^4.1.0" + "@csstools/postcss-normalize-display-values" "^4.0.1" + "@csstools/postcss-oklab-function" "^4.0.12" + "@csstools/postcss-position-area-property" "^1.0.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-property-rule-prelude-list" "^1.0.0" "@csstools/postcss-random-function" "^2.0.1" - "@csstools/postcss-relative-color-syntax" "^3.0.10" + "@csstools/postcss-relative-color-syntax" "^3.0.12" "@csstools/postcss-scope-pseudo-class" "^4.0.1" "@csstools/postcss-sign-functions" "^1.1.4" "@csstools/postcss-stepped-value-functions" "^4.0.9" - "@csstools/postcss-text-decoration-shorthand" "^4.0.2" + "@csstools/postcss-syntax-descriptor-syntax-production" "^1.0.1" + "@csstools/postcss-system-ui-font-family" "^1.0.0" + "@csstools/postcss-text-decoration-shorthand" "^4.0.3" "@csstools/postcss-trigonometric-functions" "^4.0.9" "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.21" - browserslist "^4.24.5" + autoprefixer "^10.4.23" + browserslist "^4.28.1" css-blank-pseudo "^7.0.1" - css-has-pseudo "^7.0.2" + css-has-pseudo "^7.0.3" css-prefers-color-scheme "^10.0.0" - cssdb "^8.3.0" + cssdb "^8.6.0" postcss-attribute-case-insensitive "^7.0.1" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^7.0.10" + postcss-color-functional-notation "^7.0.12" postcss-color-hex-alpha "^10.0.0" postcss-color-rebeccapurple "^10.0.0" postcss-custom-media "^11.0.6" - postcss-custom-properties "^14.0.5" + postcss-custom-properties "^14.0.6" postcss-custom-selectors "^8.0.5" postcss-dir-pseudo-class "^9.0.1" - postcss-double-position-gradients "^6.0.2" + postcss-double-position-gradients "^6.0.4" postcss-focus-visible "^10.0.1" postcss-focus-within "^9.0.1" postcss-font-variant "^5.0.0" postcss-gap-properties "^6.0.0" postcss-image-set-function "^7.0.0" - postcss-lab-function "^7.0.10" + postcss-lab-function "^7.0.12" postcss-logical "^8.1.0" - postcss-nesting "^13.0.1" + postcss-nesting "^13.0.2" postcss-opacity-percentage "^3.0.0" postcss-overflow-shorthand "^6.0.0" postcss-page-break "^3.0.4" @@ -8944,7 +9613,7 @@ postcss-zindex@^6.0.2: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== -postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38: +postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33: version "8.4.47" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== @@ -8953,6 +9622,15 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4 picocolors "^1.1.0" source-map-js "^1.2.1" +postcss@^8.5.4: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -9006,6 +9684,11 @@ property-information@^6.0.0: resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -9031,12 +9714,24 @@ pupa@^3.1.0: dependencies: escape-goat "^4.0.0" -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== dependencies: - side-channel "^1.0.6" + tslib "^2.8.1" + +pvutils@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" + integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== + +qs@~6.14.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== + dependencies: + side-channel "^1.1.0" quansync@^0.2.8: version "0.2.10" @@ -9070,15 +9765,15 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" rc@1.2.8: version "1.2.8" @@ -9249,6 +9944,11 @@ recma-stringify@^1.0.0: unified "^11.0.0" vfile "^6.0.0" +reflect-metadata@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + regenerate-unicode-properties@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" @@ -9330,6 +10030,19 @@ regjsparser@^0.12.0: dependencies: jsesc "~3.0.2" +rehype-katex@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-7.0.1.tgz#832e6d7af2744a228981d1b0fe89483a9e7c93a1" + integrity sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA== + dependencies: + "@types/hast" "^3.0.0" + "@types/katex" "^0.16.0" + hast-util-from-html-isomorphic "^2.0.0" + hast-util-to-text "^4.0.0" + katex "^0.16.0" + unist-util-visit-parents "^6.0.0" + vfile "^6.0.0" + rehype-raw@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" @@ -9396,6 +10109,16 @@ remark-gfm@^4.0.0: remark-stringify "^11.0.0" unified "^11.0.0" +remark-math@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-6.0.0.tgz#0acdf74675f1c195fea6efffa78582f7ed7fc0d7" + integrity sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-math "^3.0.0" + micromark-extension-math "^3.0.0" + unified "^11.0.0" + remark-mdx@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343" @@ -9506,13 +10229,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - robust-predicates@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" @@ -9538,6 +10254,11 @@ rtlcss@^4.1.0: postcss "^8.4.21" strip-json-comments "^3.1.1" +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9550,16 +10271,16 @@ rw@1: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -9601,6 +10322,16 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +schema-utils@^4.2.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + schema-utils@^4.3.0, schema-utils@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" @@ -9624,13 +10355,13 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.1.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== +selfsigned@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" + integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" + "@peculiar/x509" "^1.14.2" + pkijs "^3.3.3" semver-diff@^4.0.0: version "4.0.0" @@ -9649,24 +10380,24 @@ semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" + fresh "~0.5.2" + http-errors "~2.0.1" mime "1.6.0" ms "2.1.3" - on-finished "2.4.1" + on-finished "~2.4.1" range-parser "~1.2.1" - statuses "2.0.1" + statuses "~2.0.2" serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: version "6.0.2" @@ -9701,15 +10432,15 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== dependencies: encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.19.0" + send "~0.19.1" set-function-length@^1.2.1: version "1.2.2" @@ -9728,7 +10459,7 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -9757,20 +10488,50 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== +shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" @@ -9901,16 +10662,16 @@ srcset@^4.0.0: resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + std-env@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" @@ -10117,6 +10878,11 @@ terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" +thingies@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" + integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -10149,7 +10915,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: +toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -10159,6 +10925,11 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== +tree-dump@^1.0.3, tree-dump@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== + trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" @@ -10174,11 +10945,28 @@ ts-dedent@^2.2.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.0.3, tslib@^2.6.0: version "2.8.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== +tsyringe@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" + integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== + dependencies: + tslib "^1.9.3" + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -10272,6 +11060,14 @@ unique-string@^3.0.0: dependencies: crypto-random-string "^4.0.0" +unist-util-find-after@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz#3fccc1b086b56f34c8b798e1ff90b5c54468e896" + integrity sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-is@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" @@ -10293,6 +11089,14 @@ unist-util-position@^5.0.0: dependencies: "@types/unist" "^3.0.0" +unist-util-remove-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== + dependencies: + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" + unist-util-stringify-position@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" @@ -10322,7 +11126,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -10343,6 +11147,14 @@ update-browserslist-db@^1.1.3: escalade "^3.2.0" picocolors "^1.1.1" +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + update-notifier@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" @@ -10516,52 +11328,51 @@ webpack-bundle-analyzer@^4.10.2: sirv "^2.0.3" ws "^7.3.1" -webpack-dev-middleware@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== +webpack-dev-middleware@^7.4.2: + version "7.4.5" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" + integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" + memfs "^4.43.1" + mime-types "^3.0.1" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" - integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== +webpack-dev-server@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz#7f36a78be7ac88833fd87757edee31469a9e47d3" + integrity sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ== dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.25" + "@types/express-serve-static-core" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" - compression "^1.7.4" + compression "^1.8.1" connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" + express "^4.22.1" graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" + http-proxy-middleware "^2.0.9" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^5.5.0" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.4" - ws "^8.13.0" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" webpack-merge@^5.9.0: version "5.10.0" @@ -10710,11 +11521,6 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" @@ -10730,10 +11536,17 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.13.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +ws@^8.18.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0"